* boot 到kernel初始化
CPU 0 init -> 其余CPU、内存 、驱动
kernel功能 硬件驱动 内存管理 进程管理与调度 网络子系统 …
目录结构
/boot /proc /net /sys /etc /tmp /dev /bin /lib /include …
启动 进程信息 网络 系统信息 系统配置 临时 设备 二进制程序 库 头文件 …
shell提供功能
部分builtin命令
基于命令行的进程调用
流程控制
命令组合及IPC组合
ls #列出当前目录的显示文件或目录
ls -al # 列出当前文件夹所有文件或文件夹,以详细信息显示
ls -alsh #
ls -a -l -s -h #同上
echo "user name is $USER"
touch note.txt #新建空文件note.txt
mkdir dir #新建目录dir
cat /etc/passwd #查看
tac /etc/passwd #倒序查看
head -n 5 /etc/passwd #产看前5行
tail -n 2 /etc/passwd
more /etc/passwd #
wc -l /etc/passwd #统计行数
cp -rf dir1 dir2 file1 file2 targetDir/ #将dir1 dir2 file1 file2都复制到targetDir内
cp -a dir1 dir2 #保留权限信息拷贝
rm -rf note.txt dir #将note.txt和dir都删除
ln -sf filename linkname #新建软链接
readlink -f path #获取path的全路径
pwd #查看当前路径
df -h #以易读方式显示磁盘使用情况
du -sh dir #以易读方式显示dir目录占空间大小
free -h #以易读方式显示内存使用情况
tar cf file.tar file
tar czf file.tar.gz file
tar czf file.tgz file
tar tf file.tar #不解压查看
tar xf file.tar #解压
# 111 111 111
# u g o a # u: user g: group o: other a: all
# usr grp other
chown -R usrname:groupname dir #修改dir的属主和属组
chmod 751 -R dir #修改权限为751
chmod +x filename #增加执行权限
chmod u-w -R dir #用户去除写权限
export VAR1=VALUE1 #设置环境变量
unset VAR1 #删除环境变量
cat note.txt | envsubst # 替换文本中所有环境变量
- 大致范围: vim
- 模式
normal、 insert、 visual 、 command
esc i s a c o v ctrl+v :
vim file1 file2 ... #以多个buffer打开文件粗体
vim -o file1 file2 ... #以多个行打开 ctl+w切换
vim -O file1 file2 ... #以多列打开 ctl+w切换
# normal模式下 :bn :bp #切换下个buffer,上个buffer
vim -p file1 file2 ... #以多个tab打开
# normal模式下 :tabNext :tabPr
:q
:qa
:wq
:wqa
# normal模式下
hjkl #上下左右
w #下个单词
f #跳到字符处
gg G #第一行、最后一行
ctl+n ctl+p #上一行 下一行
ctl+u ctl+d #上半页 下半页
ctl+[ ctl+] #上一段 下一段
i I #normal -> insert ,光标字符前、行首
a A #normal -> insert , 光标字符后、行尾
o O #normal -> insert , 下一行、上一行
r #normal模式下替换
u U #normal模式下将选的的内容切换大小写
dd #删除
3dd
u ctl+r #回退、前进
v #normal -> visual ,移动光标选择改变
ctl+v #normal -> visual ,垂直选择
数动动 动动:
4dd #删除当前到下面4行
dd 1dd #删除当前行
3yy #复制当前到下面3行
yy 1yy #复制当前行
动介名、动数名:
vip vf" df) #选择当前文段、选择至下个"字符、删除至下个)字符
yiw yi" yi} yi]
d3w
diw di} df" #删除当前单词、删除当前{}内的内容、删除到"字符
大小写方向反转:
p #粘贴到下一行
P #粘贴到上一行
which vim #which用于查找命令执行文件所在路径
find dir -name *.txt #查找所有txt文件
find . -name *lck -exec rm {} ;
find . -name *lck | xargs rm
rm `find . -name *lck`
grep root -Rl /etc # /etc目录下查找包含root的文件
大致范围: grep awk sed
单行查找
grep ^root /etc/passwd #查找包含root开头的行
awk '/^root/' /etc/passwd #查找包含root开头的行
awk -F ":" '/^root/{print $(NF)}' /etc/passwd #查找包含root开头的行,分节符为:,获取最后一列
sed -n '/^root/p' /etc/passwd #查找包含root开头的行
sed -n '/^root/s/.*:(.*)$/1/p' /etc/passwd #查找包含root开头的行,获取最后一个:以后的内容
awk '{if( NR >= 1 && NR <=3) {print}}' /etc/passwd #打印1至3行
awk '{if( NR < 1 || NR >3) {print}}' /etc/passwd #打印非1至3行
awk '/^root/,/^adm/' /etc/passwd #查找用户为root到adm的行
sed -n '1,3p' /etc/passwd #打印1至3行
sed '1,3d' /etc/passwd #打印非1至3行
sed -n '/^root/,/^adm/p' /etc/passwd #查找用户为root到adm的行
sed awk cut printf wc sort
awk -F ":" '/^root/,/^adm/{print $(NF)}' /etc/passwd #查找用户为root到adm的行,分节符为:,获取最后一列
sed -n '/^root/,/^adm/s/.*:(.*)$/1/p' /etc/passwd #查找用户为root到adm的行,获取最后一个:以后的内容
cut -d: -f1,4- /etc/passwd #以:为分隔符,获取第一列,第四列到最后一列
printf "%I cost 010.5f" 3.5 #格式化打印
wc -l /etc/passwd #统计行数
seq 1 10 | sort -n -r #seq生成1~10,sort进行反序
awk -F ":" 'BEGIN{nbash=0} {if ($NF == "/bin/bash") {nbash ++}} END{print nbash}' /etc/passwd #统计/etc/passwd 中bash数量
cat /etc/passwd | grep /bin/bash | wc -l #同上
/dev/fd /dev/stdin /dev/stdout /dev/stderr /dev/null /dev/random /dev/zero
./bin/command #路径调用,绝对路径相对路径都可以
command #command在PATH搜索路径中
ldd command #查找command依赖的库
echo $$ #当前shell pid
ls -a -l -s -h #命令参数
echo $? #上个命令的返回值
ps -ef
ps -aux
ps -ef | grep yangll | grep vim #查找属于yangll的vim进程信息
kill -9 341324 #
cat /etc/passwd | grep ^root | cut -d: -f1-3
seq 0 100 | xargs -n 2
seq 0 100 | xargs -n 2 echo numbers
seq 0 100 | xargs -n 3 -I % echo numbers %
bash-4.2$ seq 0 0.123 10 | xargs -n 1 -P 10 -I @ bash -c '''
dir=./topdir/$(printf "%010.5f" @)
echo dir=$dir
''' #从 0到10步进为0.123,使用进程池大小为10调用子shell执行脚本
> >> << &> 2&>1 tee
> # 标准输出重定向
>> # 标准输出追加重定向
< # 将内容重定向到标准输入
2> /dev/null # 将标准错误输出重定向到 /dev/null
2>&1 # 将标准错误输出重定向到标准输出
tee # 标准输出拷贝一份到文件中
cat /etc/passwd | grep root | wc -l
cat /etc/passwd | grep root | tee rootlines.txt | wc -l
cat << EOF
hello user name is $USER
EOF
ipv4 ipv6 tcp udp http ftp ssh vnc ....
ifconfig #查询网络接口配置
ssh name@hostname #ssh登录 用户名@hostname
scp -r name@hostname:/home/name/prj ./ #远端复制到本地
scp -r ./prj name@hostname:/home/name/ #本地复制到远端
vncpasswd #设置vnc密码
vncserver :99 #vnc启动服务端口:99为vnc端口(非网络实际端口)
vncserver -list #查看开启的vnc端口
vncserver -kill :99 #关闭99端口vnc
hostname ifconfig ping route netstat ip
hostname #查询当前主机名
ifconfig #查询网络接口配置
ping baidu.com #ping域名或ip
netstat -ntlp #查询网络端口使用情况
tcpdump tshark wireshark
netcat socat nmap
nc -4 -l localhost 9999 #启动一个ipv4 tcp服务器服务地址为localhost 端口为9999
nc -4 -l localhost 9999 --exec /bin/bash #如上启动一个服务器用子进程/bin/bash来恢复消息
nc localhost 9999 #作为客户端连接localhost:9999
source : 当前解释器执行脚本内容,会集成执行过程中的环境变量
source script.sh
行头标注解释器 : 第一行需要指定解释器,如下,后面的/bin/bash则是解释器路径,脚本需要有执行权限,用脚本路径调用,或者放在PATH搜索路径中直接以文件名调用,由于在子进程中调用,所以脚本结束,子进程退出,环境变量消失
#!/bin/bash
./script.sh #调用方式
bash script.sh #调用方式
$# # 参数个数
$1 # 第一个参数
$2 # 第二个参数
...
$* # 所有参数
$@ # 所有参数
$? # 上个进程或函数的返回值
$$ # 当前脚本的pid
# 取反 !
# 一目运算符 -n -z -f -d
# 二目运算符 == != -eq -lt -le -gt -ge
[[ -f test.txt ]] && echo exist
[[ `cat /etc/passwd | wc -l` -gt 10 ]] && echo more than 10 lines
for((i=1;i<=10;i++));
do
echo $i
done
for name in yang wang li
do
echo $name
done
for i in `seq 1 10`
do
echo $i
done
i=0
while [[ $i -lt 10 ]]
do
echo $i
let i++
done
cat /etc/passwd | while read line
do
echo $line
done
while read line
do
echo $line
done < /etc/passwd
. #匹配任意字符
[] #匹配一个[]范围内的字符,^取反
? #匹配0至1个
+ #匹配1至任意个
* #匹配0至任意个
{n} #匹配n个
{min,max} #匹配min至max个
| #或
^ #行首
$ #行尾
<
>
[a-zA-Z] #匹配一个字母
[0-9] #匹配一个数字
[^0-9] #匹配一个非数字
[0-9]* #匹配一节数字,默认以贪婪算法取最长
grep --color "o{2,3}" /etc/passwd #查找2到3个o的行
grep --color "[0-9]{2,3}" /etc/passwd #查找有2到3个数字的行
grep --color "(^root|^sshd)" /etc/passwd #查找root或sshd开头的行
sed -n '/^root/{:begin;n;p;/^adm/b end;b begin;:end}' /etc/passwd #查找用户为root到adm的行
sed -n '/^root/{:begin;N;/
adm/b end;b begin;:end;p}' /etc/passwd #查找用户为root到adm的行
awk -F ":" 'BEGIN{found=0} {if( $1 == "root" ) {found=1};if($1 == "adm"){found=0};if (found==1){print}}' /etc/passwd #查找用户为root到adm的行