总结:
文件系统:基础、文件、目录管理,用户及权限管理、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