总结: 文件系统:基础、文件、目录管理,用户及权限管理、bash基本特性: 命令历史、hash、命令补全、路径补全、glob、快捷键、IO重定向、管道、变量、vim、bash编程、变量、配置文件、算术运算、测试、grep,fgrep,egrep、测试、find、特殊权限进程安全上下文、bash编程。 touch,state mkdir,tree,rmdir,install,cp,rm,mv 用户: 用户认证 useradd,usermod,userdel passwd,chage 组;用户授权机制 groupadd,groupmod,groupdel gpasswd chfn chsh finger su id pwck 权限: chmod , chgrp , chown --reference=IFILE -R -L 命令历史:启动时,将HISTFILE变量中的文件中的内容加载至内。停止时,将历史中新增加的条目同步至HISTFILE变量中的文件中 hash: 运行命令时,bash提请内核运行为一个进程,bash在PATH变量中查找命令的代码,记录hash中。下次查找时,先找hash中(O1标准),再找PATH 命令补全: 从PATH变量查找 路径补全: 从用户所给目录中找 glob: *任意长度任意字符,? 任意单个字符 , [] 任意范围内的任意单个字符[abc] 或a或b或c , [^] 任意范围外的任意单个字符 快捷键: Ctrl + a 行首, Ctrl + e 行尾, Ctrl + l 清屏, Ctrl + s 暂停屏幕, Ctrl + q 取消暂停, Ctrl + c 撤消命令执行 管道:任何一个打开的文件,都有一个文件描述符追踪。上一个文件的标准输入作为下一个文件的标准输出。最后一个命令在当前shell的子进程中运行 IO: 覆盖,追加,set -C 关闭 ,合并 &> , > FILE 2>&1 , > FILE1 2> FILE1 变量: 过程式编程: 选择、循环、顺序 以指令为中心组织数据。 对象式编程:以数据为中心组织指令。 bash过程式编程: magic number ,纯文本 , 变量类型 内部数据的类型 弱类型 bash , 不申明,直接引用,赋值 ,直接运算隐式转换 强类型 必须申明 变量类型的作用: 内部数据的存储格式 数据的范围 参与的运算 vim 使用: vim + FILE vim -o | -O FILE1 FILE2 Ctrl + w 松手后按 : 上,下,左,右 vim FILE1 FILE2 ... :first :pre :next :last 特性: syntax on|off set ai|noai set ic|noic set hlsearch | nohlsearch set tabstop=# set nu|nonu 命令模式 光标跳转: hjkl w 行首 e 不在行尾,当前单词行尾。在行尾,下个单词行尾。 b 不在行首,当前单词行首。在行首,上个单词行首。 [] {} [#][]x [#]r | R d[] | dd 删除 y[] | yy 复制 c[] | cc 删除并进入INSERT模式 其他操作 视图: v | V 进入编辑模式 i,I a,A o,O c[],cc 保存并退出文件: ZZ 退出编辑模式: ESC 未行模式: 在命令模式中输入 : :地址定界s@PATTERN@要替换的内容@g/i 地址定界: % 全文 # 第#行 #1,# 从#1至#行的所有内容 /part1/,/part/ 第part1模式所匹配到的内容所在的行起始至第part所匹配的到的内容所在的行结束。正则表达式的元字符 #,/part/ /part/,# $ 最后一行 #,$ 第#至$行 /part/,$ PATTERN: 支持正则表达式 . * : .* \? , \+ \{m,n\} , \{m\},\{n\} 支持(),正则表达式引擎将括号所匹配到内容保存至内置变量中,依次为\1,\2,.... 要替换的内容: 支持后向引用 \1,\2,.... g/i g: 当作行有多次出现模式匹配至的内容时,只替换一处 i: 忽略PATTERN的大小写匹配 退出文件: :wq 保存文件内容并退出 :q 不保存文件内容并退出 bash编程 if CONDITION; then if-ture ## CONDITION执行状态结果为0时,执行此分支 fi if CONDITION; then if-ture else if-false ## CONDITION执行状态结果非0时,执行此分支 fi if CONDITION; then if-ture elif CONDITION; then if-ture elif CONDITION; then if-ture ... else all-false ## 以上条件均不满足时,执行此分支。只要满足其中一个分支,执行后会自动退出 fi 变量 本地变量 对当前shell有效,对其他无效 环境变量 对当前shell及子shell有效,对其他终端无效 局部变量 在调用函数运行的生命周期中变量有效 位置变量 类似于后向引用,正则表达式引擎存储括号中匹配到内容至内置的变量中。$1,$2,.... 存储向脚本传递的对应位置的参数,方便调用 特殊变量 $#,$@,$*,$? $*: 当作一个整体。 $@: 参数独立存在。 $?: 当作命令的返回值 本地变量 赋值变量: name=value 将value值存储至name变量名所表示的内存空间中 当value有空格时,需要用引号: name="1 2 3" 查看变量: set (本地和环境) 引用变量: ${name} 或 $name ${name} 容易与变量名混淆的字符,能作为变量名存在的字符和变量在一起时,需要用到引号 name=pig echo "there are some $names" echo "there are some ${name}s" $name 不会产生混淆时,可以使用$name 环境变量 赋值变量: declare -x name=value , export name=value 1)变量引用实现赋值 name=$mingetty 引用后,存回原处: name=$name 引用后,存回别处: xue=$name 2)命令引用实现赋值 name=$(COMMAND) name=`COMMAND` 3)纯字符 name=value 查看变量 export printenv env 引用变量 $name 局部变量: 调用函数片段的生命周期内有效 位置变量 $0: 命令本身 $1: 向命令传递的第一个参数 $2: ... shift # 换港符 特殊变量 $* 调用所有传递给命令的参数,所有参数当作一个整体 $@ 调用所有传递给命令的参数,每个参数独立存在 $# 传递给命令的参数的个数 $? 命令的执行状态结果 配置文件 全局: profile类 功能: 1) 脚本 2) 环境变量 配置文件 /etc/profile, /etc/profile.d/*.sh, ~/.bash_profile 个人: bashrc类 功能: 1) 别名 2)本地变量 配置文件 /etc/bashrc, ~/.bash_bashrc 登陆式 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 1) su - user 或 su -l user 2) 终端通过账号密码 非登陆式 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 1) su user 2) 脚本 3) 图形界面下启动的终端 读取配置文件 1). 或 source 多次重读时,会重复出现(有副作用) 2)重新登陆终端 算术运算: + - * / % let A=$B+$C 变量引用实现赋值 $[$B+$C] $(($B+$C)) 命令引用实现赋值 $(expr $A % $B) 注意: $(expr $A \* $B) 变量取模: let A=$RANDOM%$B 测试 test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 数值测试: -eq,-ne -lt,-le -gt,-ge 例如: test $A -lt $B [ $A -eq $B ] [[ $A -gt $B ]] 字符测试: 必须都用引号,除了PATTERN,且必须用[[]] == != ~ 例如: test "$A" == "$B" [ "1" == "$A" ] [[ "$A" ~ PATTERN ]] PATTER支持正则表达式 -z STRING 是否存在且为空 -n STRING 是否存在且不为空 fgrep,grep,egrep COMMAND PATTERN file 用PATTERN逐行匹配file中的每一行,将PATTERN匹配到的字符所在的行显示到标准输出 PATTERN 由特殊的元字符组成 不同工具使用不同的正则表达式引擎,或不同的特殊元字符 fgrep 纯文本字符 grep 正则表达式元字符 egrep 扩展正则表达式元字符 perl perl正则表达式元字符 正则表达式字符: . 任意单个字符 * 对前面单个字符任意次数: .* \? 前面单个字符0或1次 \+ 前面单个字符至少1次 \{m,n\} \{m,\} \{,n\} \(\) 支持后向引用,正则表达式引擎将括号中的模式匹配到的内容存储在内置的变量中 扩展正则表达式字符 . * ? + {m,n} {m,} {,n} () | 分组 : c|Cat 表示 c或 Cat (c|C)at表达cat或Cat 文件测试 -t fd -s 文件有内容 [ -N FILE ] 最近一次查看文件后,是否被修改(重定向或编辑过) [ FILE -ef IFLE ] 指向同一设备的同一inode [ FILE -nt IFLE ] FILE是否比IFLE更新或修改时间戳比IFLE的时间戳离现在更近 -ot -O | -G -[fdbcLhsp] -a | -e -r | -w | -x find命令 -ls , -delete , -fls /path/to/somefile -exec ,-ok find -exec {} \; 所有文件 find | xargs -I {} command {} 单独的文件 {} 代表每一个匹配到的文件 -user USERNAME , -group GRPNAME -nouser , -nogroup -uid UID , -gid GID -name "glob_expr" -iname "glob_expr" -regex "expression" -iregex "expression" -type {f|d|c|b|l|s|p} -size [+|-]#[KMG] -perm [\|-]# \( expr -a expr \) -not \( expr -a expr \) 相当于 -not expr -o -not expr \( expr -o expr \) -not \( expr -o expr \) 相当于 -not expr -a -not expr 用户对文件的权限 用户同文件的属主,应用属主的权限 同文件的属组,应用属组的权限 应用其他用户的权限 进程的安全上下文 当用户对文件有权限运行为一个进程 进程的属主同用户名 进程的属主同文件的属主,应用属主的权限 同文件的属组,应用属组的权限 应用其他用户的权限 r 文件可用文件查看类命令查看 目录可用ls查看 w 文件可修改 目录可创建或删除目录中的文件 x 文件可运行为一个进程 目录: 可用ls -l 或cd 特殊权限 suid,sgid,sticky 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 suid: 当文件有suid权限时,文件被运行为一个进程后,其进程的属主为文件的的属主 sgid: 当目录有sgid权限时,任何用户在其目录下创建的文件的属组同目录的属组 sticky: 当目录有sticky权限时,目录中不同用户的文件只能由文件对应的用户删除 权限位的映射: 当存在x时,为小写 当不存在x时,为大写 例如: 文件为: rw- r-- --- 给予suid权限后: rwS r-- --- 文件为: rwx r-- --- 给予suid权限后: rws r-- --- 编程 for i in 列表; do 循环体 done 列表: 1) 直接给出 2) glob /etc/lib/* 3) 命令生成 $(ls /) 4) 命令 $(seq start step end) $(seq 1 2 100) 5) {start..end} {1..10} 系统管理 磁盘管理 分区、查看、调整、格式化、挂载、编程 RAID,LVM2 程序包管理 安装、重装、升级、降级、卸载、查询、检验、数据库、缓存 进程管理 htop,vmstat,glances 网络管理 命令行、配置文件、图形 系统启动流程 加电 --> 自检 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只读切换挂载rootfs --> 运行init,init工作 grub命令 grub-install, chroot /mnt/sysimage --> root(hd0,0) --> setup (hd0) 磁盘管理 分区、查看、调整、格式化、挂载、编程 RAID,LVM2 mdadm -C /dev/md0 -a yes -l {1,0,5,10} -n # -x # /dev/sda{1,2,3} mdadm -D /dev/md0 mdadm -S /dev/md0 mdadm /dev/md0 -f /dev/sda1 mdadm /dev/md0 -r /dev/sda1 mdadm /dev/md0 -a /dev/sdb1(fd) /dev/sda{1,2,3} pvcreate /dev/sda{1,2,3} vgcreate -s #[KMG] VGNAME /dev/sda{1,2,3} vgremove VGNAME vgextend VGNAME /dev/sda4 (8e) pvmove /dev/sda3 ; vgreduce /dev/sda3 lvcreate -L #[KMG] -n LVNAME VGNAME lvpath: /dev/mapper/VGNAME-LVNAME /dev/VGNAME/LVNAME lvcreate -L #[KMG] -s -n LVNAME_snap -p r lvpath 扩展: lvextend -L [+]#[KMG] lvpath resize2fs lvpath 缩减 umount lvpath e2fsck -fy lvpath resize2fs lvpath [-]#[KMG] lvreduce -L [-]#[KMG] lvpath mount lvpath DIR 程序包管理 安装、重装、升级、降级、卸载、查询、检验、数据库、缓存 安装: rpm -ivh FILE.rpm yum install dnf install apt-get install 重装: rpm -ivh --replacepkgs yum reinstall dnf reinstall apt-get reinstall 升级: rpm -Uvh(安装或升级) -Fvh(仅能升级) yum update dnf update apt-get update 降级 rpm -Uvh | -Fvh --oldpackages yum downgrade dnf downgrade apt-get downgrade 卸载 rpm -e yum remove dnf remove 查询 仓库信息 yum|dnf repolist 程序包: rpm -q -a rpm -q -f CAPABILITY 文件由哪个包所提供 rpm -q --whatprovides CAPABILITY 文件或功能由哪个包所提供 yum|dnf --whatprovides CAPABILITY rpm -q --whatrequires CAPABILITY 包内的信息 rpm -q -i rpm -q --changlog rpm -q -L rpm -q -c, -d rpm -q --scripts | --triggers | --conflicts rpm -R 包依赖的功能 yum deplist rpm --provides 包提供的功能 yum info 校验 rpm -V rpm --import GPG_FILE 数据库 rpm --initdb 初始化,存在时,不执行任何操作 rpm --rebuildb 重建 缓存 yum clean {all|metadata|packages} yum --disablerepo= expr_glob --enablerepo= expr_glob yum --downloadonly --downloaddir=DIR --noplugins --nogpgcheck --version -q rpm --nodigest | --nosignature | --import --nodeps --noscripts --nofiledigest --nomd5 -d -c -l --force 进程管理 htop,vmstat,glances 网络管理 命令行、配置文件、图形 address: 192.168.1.1/24 或 192.168.1.1 255.255.255.0 ifconfig eth0 address [up|down] ifconfig [IFACE] [up|down] ifconfig IFACE metric N | mtu N | broadcast BROADCAST | multicast ip addr show|flush [dev IFACE] [label LABEL] [scope {global|link|host}] [primary|secondary] add|del address dev IFACE [broadcast BROADCAST] [label LABEL] [scope {global|link|host}] route add|del -host|-net address gw GW [dev IFACE] [scope {global|secondary}] ip route add|del address via VIA dev IFACE [src SRC] [mtu MTU] ip route show|flush via VIA [dev IFACE] src SRC ip link show up|dev IFACE ip link set [ dev IFACE up|down ] arp on | arp off multicast on | multicast off netstat | ss -t 、 -u 、 -w -a , -l , -n , -p netstat -i ss -m | -o STATE EXPRESSION STATE established listen EXPRESSION ‘( dport = :ssh or sport = :ssh )‘ 系统启动流程 加电 --> 自检 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只读切换挂载rootfs --> 运行init,init工作 1、CPU自举 ,装载ROM特定地址空间中的特定指令,完成自检,显示BIOS界面 2、依据BIOS配置,从上至下查找第一个有MBR的设备或能模拟MBR的设备,完成系统引导 磁盘: MBR 网卡: 通过网卡发送广播,找到dhcp服务器,获取IP和tftpIP,从tftp获取引导程序 3、MBR工作 1)找到MBR,运行MBR,在MBR后有一段空间作为1.5阶段(安装时,自动将1.5阶段放在MBR之后,是os所在分区的文件系统的驱动) 2)step1.5,bootloader通过1.5找到2 3)step2,提供菜单,将用户选择的内核及ramdisk加载至内存中, 将控制权交给kernel 4、kernel工作 1)自解压、展开 2)探测硬件 3)加载驱动(包括ramdisk) 5、ro挂载rootfs 6、运行用户空间第一个程序init 设定默认启动选项 1)系统初始化 2)启动或关闭服务 3)打印登陆提示符(字符终端或图形终端) bootloader windows: NT loader Linux: 1) LILO Linux loader 2) grub grand uniform boot 1系 CentOS 5,6 2系 CentOS 7 (完成重写) ramdisk分类 1)CentOS 5 ramdisk 将ramdisk加载至磁盘中时,内核将其当作磁盘,会再缓冲一次 2) CentOS 6,7 ramfs 将ramfs加载至磁盘中时,内核直接读取 init分类 CentOS 5 init 配置文件: /etc/inittab 1、大量进程创建、销毁 2、进程的依赖性 CentOS 6 upstart --> init(重命名) 配置文件: /etc/inittab(兼容centos5) /etc/init/*.conf (BUS)消息总线进行进程间通信,让互相依赖的进程能接近并行起动进程。 dbus机制解决进程间的依赖关系 CentOS 7 systemd 只启动开机需要的服务,其他服务只是告诉你启动了,实际并没有启动。而是在第一次访问时,在临时启动,可实现秒级别启动。 进程管理: htop、glances、vmstat top: 命令选项: -d 、-b 、-n -d # 刷新间隔 -b 分批次显示 -n # 显示多少个批次 内建命令: s,k,q l,t,1,m s 刷新间隔高速 k 杀进程 q quit l uptime t task and cpu 1 cpus m mem and swap top - 15:01:32 up 2 days, 4:12, 4 users, load average: 0.53, 0.44, 0.29 Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND uptime命令: l 控制显示 15:01:32 当前时间 up 2 days 系统在线时长 4 users 在线用户数 load average: 0.53, 0.44, 0.29 过去1,5,15分钟的平均负载 控制CPU及TASK显示: t Tasks: 137 total, 总进程数 1 running, 136 sleeping, 0 stopped, 0 zombie Cpu(s): 每个CPU,1 0.0%us, 0.5%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st 控制Mem及Swap显示: m Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached htop (Fedora-EPEL) a affinite cpu 缓存命令率 l list 列出进程打开的文件 s systemcall 进程发起的syscall glances 服务端: glances -s -B 192.168.1.2 -p 8888 -P 123 客户端: glances -c -p 8888 -P 123 192.168.1.2 b 以字节显示网络速率 m/n/d 控制mount,network,disk模块的显示 t # 延迟间隔 1 每个cpu信息单独显示 -f /path/to/somefile galance显示的结果保存至文件中 -o {HTML|CSV} 文件的格式 vmstat [delay [count]] delay 刷新延迟 count 刷新次数 -s 显示内存信息 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 1268 695236 169916 471904 0 0 13 46 56 90 7 21 61 10 0 procs r running b blocking memory swpd swap占用大小 free 空间内存 buff 内存分配为buff占据大小 cache swap si swap input 从内存至磁盘中的swap速率 so io bi block input 从磁盘至内存 bo system in/int interrupt cs context swtich cpu us user space sy system space id idle wa wait st stole grub grub-install --root-directory=DIR DEVICE DIR 为boot目录的上级目录 /boot --> / /mnt/boot --> /mnt DEVICE 磁盘 , 要给哪个磁盘安装grub boot: linux resuce chroot /mnt/sysimage grub root(hd0,0) setup (hd0) (hd#,#) hd# #表示,第几个磁盘 # 表示,指定磁盘的第几个分区 内核编译 获取硬件信息: lscpu, lspci, lsusb, lsblk hal-device 开发环境 下载源码: kernel.org 展开至内核源码树 tar xf linux-VERSION.RELEASE.tar.xz -C /usr/local/src ln -sv linux-VERSION.RELEASE linux 清理 make clean | mrproper | distclean 内核选项 make config make menuconfig make xconfig QT,gnome make gconfig GTK,KDE make allnoconfig make defconfig 编译 make [-j #] make dir/ make dir/file.[oiSs] make dir/file.ko make all [*] make vmlinux make modules [M] make modules_install make install screen命令 screen [-S NAME] exit Ctrl + a + d screen -ls screen -r NUM 光盘启动流程 POST -- MBR(boot.cat) -- isolinux.bin -- kernel(initrd.img) -- anaconda anaconda程序 运行:配置,安装,配置 配置文件: 命令段,程序包段,脚本段 kickstart文件生成 1、system-config-kickstart 和 xmanager 2、vim编辑 光盘生成命令: mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 i386 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso -b 2阶段 -c 1阶段 -o 输出文件 SELinux 配置文件: /etc/selinux/config <--- /etc/sysconfig/selinux MAC: 强制访问控制 用户对文件的权限--> 进程对文件的权限 --> 文件type是否属于进程的domain的子集 是: 可访问 否: 1) chcon [-R] -t TYPE FILE restorecon [-R] FILE 2) 访问记录于/var/log/audit.log 3) setenforing 0 SELinuxTYPE: target: 部分 从permissive/enforing <--> disable: 1)改变配置文件 2)重启 从enforing <--> permissive setenforing {0|1} 0: permissive 1: enforing 查看状态: getenforing 设定程序功能开启或关闭 获取: getsebool [-a | 程序功能名] 设置: setsebool [-P] SEBOOL=VALUE -P 设置至规则库中,(找到规则,设定,转换为binary格式) while语句: while CONDITION; do 循环体 done sed工具使用: 全文都会一行一行的加载至pattern space中, 每加载进一行, 首先匹配: 地址定界是否符合,符合:执行command,显示执行后的结果至标准输出.不符合,显示至标准输出. n 加载一行后,显示后,读取下一行,覆盖本行,行的序号递增 sed [OPTIONS...] ‘地址定界command;[地址定界command;...]‘ FILE1 FILE2 ... OPTIONS: -i 将模式空间中的内容,写入文件中 -n 不显示默认输出的内容 -r extension reguler expresison -f /PATH/TO/SOMEFILE 地址定界: #[,#] /pat/[,/pat/] #~# = ! 取反,在地址定界后 command d, p, w /PATH/TO/FILE, r /PATH/TO/FILE, a \TEXT, c \TEXT, i \TEXT, s 分隔符 模式 分隔符 修饰符 s// s|| s,, s@@ s## 模式 修饰符: i/g/w/p ignore global w /path/to/somefile p 仅显示替换的结果 n,N g,G get 模式 <-- hold h,H hold 模式 --> hold d,D 删除行 until, for, while, break, continue, case while CONDITION; do 循环体 条件正确进入 done until ! CONDITION; do 循环体 条件不确进入 done for ((控制变量初始化;条件判断表达式;控制变量修正表达式)); do 循环体 done while read line; do 循环体 done < /PATH/TO/SOMEFILE while true; do if CONDITION; then condition else break fi done until false; do if CONDITION; then break else continue fi done case 变量 in glob|纯字符) statement ;; ... *) statement ;; esac 函数 函数: 代码片断 函数名: 代码片断的简短名称 调用函数名:进入函数的上下文 函数的生命周期: 调用起始,调用后结束 函数返回状态码: 函数体中最后一个命令执行结束后或return # 返回的#的值 局部变量与本地变量相同时, 局部变量只存活在函数体中 函数/变量/文件名 1) <255 2) 见名知义: small_dog, smallDog 3) 区分大小写 4) 不能有关键字: if, else, then, while 等 函数语法; funciton f_name { 函数体 } f_name() { 函数体 } systemd<CentOS 7的init程序> 完成用户空间的一切事务,但系统调用仍由kernel执行 init新特征: 并行启动进程 按需激活进程: 启动速度快 快照 依赖控制服务启动逻辑 /etc /usr/lib /run /systemd/systemd .service 管理服务 .target 模拟实现运行级别 .device 定义内核识别的设备 .mount 定义文件系统的挂载点 .socket 进程间通信的文件 .snapshot 管理系统快照 .swap 标识swap设备 .automount 文件系统自动挂载点 .path 定义文件系统中的一个文件或目录 没有脚本灵活 非由systemd启动的进程,systemd无法控制 systemd级别不是完全兼容: 2, 3, 4, multi-user.target 都是单用户模式 systemctl不会读取标准输入数据流 跟用户环境无关(PATH) unit均受5min超时时长 systemctl {start|stop|restart|status|relaod|reload-or-restart|try-restart} name.service 服务状态: systemctl list-units --type TYPE [--all] TYPE: service 服务的状态 target 运行级别 是否运行: systemctl is-active name.service 依赖: systemctl list-dependencies name.service 开机是否自启: systemctl list-unit-files --type service is-enabled name.service 设定服务开机是否自启 systemctl enable|diable|reenable name.service systemctl mask|umask name.service 调整运行级别: systemctl isolate name.target 设定默认运行级别: systemctl get-default systemctl set-default name.target systemctl rescue|halt|power off|reboot|suspend|hibenate|hybrid-sleep suspend 挂起 hibenate 保存快照 hybrid-sleep 快照并挂起 bash编程: 过程式编程: c 完成特定功能 选择/循环/顺序 对象编程: 类,多次调用, c++, java 数组: ${array[index]} index: [0,....] 数值 declare -a 字符 declare -A (bash version 4.0) 赋值: array[index]= array=("val1" "val2" "val3" ...) array=([0]="val1" [1]="val2" [10]="val3" ...) read -a array array[${#array[@]}]= 销毁: unset array[index] 字符串: 知道变量的存储值时可以使用:非通用格式 ${var:3} 过3取所有 ${var:3:3} 过3取3个 ${var: -3} 取后3个 ${var#*/} 左向右,至第一个匹配到/全删除 ${var##*/} 左向右,至所有匹配到/全删除 var=/var/log/message 基名: echo ${var##*/} ${var%/*} 右向左,至第一个匹配到/全删除 ${var%%/*} 右向左,至所有匹配到/全删除 var=/var/log/message 目录名: echo ${var%/*} 替换: ${var/pattern} 左向右,匹配到pattern的字符串,第一个删除 ${var/pattern/substi} 左向右,匹配到pattern的字符串,第一个替换 ${var//pattern} 左向右,匹配到pattern的字符串,所有删除 ${var//pattern/substi} 左向右,匹配到pattern的字符串,所有替换 ${var/#pattern} 左向右,匹配到pattern的字符串,首行删除 {var/#pattern/substi} ${var/%pattern} {var/%pattern/substi} 默认值: 不存在时,返回string ${var:-STRING} ${var:=STRING} 存在时,返回STRING ${var:+STRING} 不存在,报错: ${var:?STRING} 配置文件: # vim file1 HOSTNAME=lcc.org # vim file.sh #!/bin/bash # [ -f file1 ] && source file1 HOSTNAME=${HOSTNAME:-lcc.org} if [ -z ${HOSTNAME:-} ]; then HOSTNMAE=lcc.org fi hostname $HOSTNMAE install命令创建目录或复制文件 install -d -m MODE -o OWNER -g GROUP FILE mktemp:创建临时文件或目录 mktemp [-d] [-p DIR] [--tmpdir DIR] [-u] FILE.XXX XXX 至少3个 awk命令 ~ /pat/ !~ "" == "" print item1,item2 printf "FORMAT",item1,item2 %i,%d decimal,interger %s 字符串 %e 科学计数法 %f floating %G %e + %f #[.#] 宽度 .# 精度 + 符号 - 左对齐: 默认右对齐 模式支持扩展正则 $表示字段 ""中不用使用变量,引用字符 表示行数;NR >= # && NR <= # 取反在PATTERN前 awk [OPTION...] ‘PATTERN{ACTION STATEMENT;ACTION STATEMENT;...}‘ FILE1 FILE2 ... -F ‘‘ 相当于 -v FS=‘‘ -v OFS=‘‘ 字段分隔符: FS, OFS 行分隔符: RS, ORS 行:NR, FNR ARGC 命令行除了program个数 ARGV 将命令行参数保存于ARGV的数组中 if (condition) {statement} 或 if (condition) statement if (condition) {statement} else {statement} for (condition) {statement} while (condition) {statement} 或 do {statement} while (condition) next # awk -F ‘:‘ ‘{if ($NF != "/bin/bash"){next} else {print $0}}‘ /etc/passwd 遍历数组: for (i in array) {print i,array[i]} 替换: sub(r,s,t) gsub(r,s,t) ("o"."O",$1) split($5,ARRAY,"%")
本文出自 “Reading” 博客,请务必保留此出处http://sonlich.blog.51cto.com/12825953/1965815
原文地址:http://sonlich.blog.51cto.com/12825953/1965815