文章目录
- shell基础认知
- 1. shell语言
- 2. 脚本执行方式
- 3. 快捷键
- 4. 通配符
- 5. 命令后跟的选项
- 6. 逻辑运算 && ||
- 7. 算术运算(equal,great,less)
- 8. 目录或文件意义
- 9. 规则
- 10. vim
- shell脚本常规内容解释
- 1. set -ex
- 2. set -o pipefail
- 3. basepath = $(cd \`dirname $0\`; pwd) 打印脚本所在目录
- 4. grep -v grep 去掉grep本身的进程行
- 5. tail -100f haha.log | grep "error" -3
- 6. 登录服务器:ssh root@ip
- 7. 从远程ip拷贝到本地:scp -r root@ip:/opt/* /opt/haha/
- 8. haha.sh restart/stop/start
- shell常用命令
- 1. 连接测试telnet ping curl
- 2. netstat -nap | grep pid 根据进程查端口
- 3. netstat -tunlp | grep port 根据端口查进程
- 4. 查看磁盘空间情况
- 5. 查找文件
- 6. 抓包tcpdump(必须是root用户,且是http请求,因为https是密文,抓包没有意义)
- 7. type ls 查看命令类型(是否为内置命令)
- 8. echo \$PATH(\$MAIL, \$HOEM, \$PWD) 打印系统变量
- 9. set 设置变量 unset 取消变量
- 10. bash 进入子shell
- 11. exit 退出程序
- 12. export 将变量设置为环境变量,但仅本次登录有效
- 13. env 各种环境
- 14. locale 语系变量
- 15. iconv -f big5 -t utf8 filename 转换编码
- 16. cat /etc/shells 查看可使用的shell
- 17. systemctl start haveged 启动haveged(随机数生成器)
- 18. zip -q -r haha.zip * 将本文件夹下的所有文件和子目录一并压缩为haha.zip文件
- 19. tar -xzvf a.tar.gz 解压
- 20. tar -czvf abc.tar.gz a.tet b.txt c.txt 一并压缩
- 21. awk 文本分析工具,主要用于单行数据分成数个字段来处理的场景
- 22. sed (stream editor, 流编辑器)
- 23. cp -r a b 将a目录下的文件和子目录copy到b目录中
- 24. df -h 查看各个挂载点的磁盘空间使用情况
- 25. du -h 查看目录的磁盘空间使用情况
- 26. stat 文件/目录 显示文件/目录的inode节点保存的信息(元信息)
- 27. df -i/h inode信息,h代表human可读性
- 28. ldd /opt/xinliushijian/java 列出java的动态链接依赖
- 29. nl 显示文件的同时列出行号
- 30. nl wang.sh | sed '2,4d' 删除文件的2-5行
- 31. hostname 主机名
- 32. /sbin/ifconfig 网卡指令,查看ip地址,inet位置
- 33. sed -i '$a #haha' wang.sh
- 34. grep -E 等价于eprep,表示使用扩展正则表达式
- 35. typeset -i a=8 设置变量为整数
- 36. info 命令的详细介绍
- 37. more less head tail cat tac 展示命令
- 38. chown -R root:root haha.sh 改变文件的属主、属组归属
- 39. chmod 700 haha.sh 改变文件权限
- 40. chattr lsattr 文件隐藏属性
- 41. ls -l | grep "^-" | wc -l 查看当前目录下的文件数量
- 42. ll --block -size=m 以mb打印
- 43 crontab -l 展示定时任务 crontab -e 编辑定时任务
- 44. awk '{print $2}' $filename 一行一行得读取指定的文件,以空格为分隔符,打印第二个字段
- 45. xargs kill -9 把参数杀死 9代表9号信息SIGKILL,杀死进程信号
- 46. unask 文件默认权限
- 47. SUID SGID SBIT
shell基础认知
1. shell语言
shell是一种脚本语言,编写完源码后不用编译,直接运行源码即可
2. 脚本执行方式
- ./test.sh 或者 sh test.sh ,这种执行方式都会重新打开一个子shell执行,脚本里面的变量不能立即生效,需要重新登录才可以
- source test.sh 这种执行方式是在原shell执行,变量会立即生效(source也可以简写为.)
3. 快捷键
Ctrl + a : 光标移动到最前面
Ctrl + e : 光标移动到最前面
Ctrl + u : 删除光标前面的命令
Ctrl + k : 删除光标后面的命令
4. 通配符
$? 最后运行命令的结束代码(返回值),0表示没有错误,其他任何值都表示有错误
$# 传给脚本的参数个数
$0 脚本本身的名字
$1 传给shell脚本的第一个参数
$2 传给shell脚本的第二个参数
$@ 传给shell脚本的所有参数列表
5. 命令后跟的选项
-e 存在
-d 目录
-f 文件
-L 符号链接
-r -w -x 可读可写可执行
-s 文件长度不为零
->, -h 软连接,相当于快捷方式
6. 逻辑运算 && ||
7. 算术运算(equal,great,less)
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-lt 小于等于
8. 目录或文件意义
/etc/passwd 各个用户用的shell
~/.bash_history 登录用户命令历史
~/.bashrc bash的配置文件,可以在这里设置工作目录和命令别名,仅对当前登录用户有效
/etc/profile 变量永久有效
9. 规则
- 显示变量a: echo $a 或 echo ${a}
- echo `echo KaTeX parse error: Expected group as argument to '\`' at position 7: MAIL\` ̲反单引号用来包含命令,也可以使…()
- “” 双引号内的变量保持原有特性,而’'单引号内的变量仅是纯文本
10. vim
- vim分为三种模式:一般模式,编辑模式,命令行模式;
一般模式键入a、i、o可以进入编辑模式,按Esc回到一般模式;
一般模式键入:可以进入命令行模式,按Esc回到一般模式;
编辑模式和命令行模式不互通。 - 一般操作:
vim haha.sh 或者vi haha.sh
按i进入编辑模式编辑文件,按Esc进入一般模式,
按:进入命令行模式键入wq保存文件内容并退出vim。 - 命令
! 强制
w 写入
:set nu 设置行号
/ 搜索文本内容
shell脚本常规内容解释
1. set -ex
-e 脚本中的命令一旦运行失败就终止脚本的执行
-x 用于显示命令及其执行结果
2. set -o pipefail
设置这个选项之后,包含管道命令的语句的返回值,会变成最后一个返回非零的管道命令的返回值,
即返回语句中最后一个非零返回值(错误值)
3. basepath = $(cd `dirname $0`; pwd) 打印脚本所在目录
dirname 若后面跟文件则显示文件所在目录,后面跟目录则显示父目录
$0 文件名
4. grep -v grep 去掉grep本身的进程行
5. tail -100f haha.log | grep “error” -3
-3 表示上下各多两行
6. 登录服务器:ssh root@ip
7. 从远程ip拷贝到本地:scp -r root@ip:/opt/* /opt/haha/
-r 表示递归拷贝,也就是子目录下的内容也会copy
8. haha.sh restart/stop/start
shell常用命令
1. 连接测试telnet ping curl
telnet ip port 查看程序是否启动正常
ping ip 通则有公网权限
curl 127.0.0.1:8080/ShowMonitor 查看slb中各节点的状态
curl --request GET 'http://10.38.239.252:8888/hehe/index.html'
curl -k https://ip:port/ 发送请求(-k是https请求要求的选项)
2. netstat -nap | grep pid 根据进程查端口
3. netstat -tunlp | grep port 根据端口查进程
4. 查看磁盘空间情况
du -h --max-depth=10 /opt/xinliushijian/ awk '{if($1 ~ /M1){split($1,arr,"M")};if(($1~/G/) || ($1 ~ /M/ && arr[1] > 200)){printf "%-10s %s\n", $1, $2}}' | sort -n -r
find / -size +500M -exec du -h {} \;
5. 查找文件
find /home/xinliushijian/logs/ -type f -iname "*haha*"
# 一周以外的都会删除,rm前不能使用管道符,{}存放find的参数,exec要以";"结尾,\是转义
find /home/xinliushijian/logs/ -type f -mtime +7 -exec rm -f {} \;
6. 抓包tcpdump(必须是root用户,且是http请求,因为https是密文,抓包没有意义)
yum install tcpdump
tcpdump -i any port 8282 -S0 -w aaa.cap
strings aaa.cap > aaa.txt
7. type ls 查看命令类型(是否为内置命令)
8. echo $PATH($MAIL, $HOEM, $PWD) 打印系统变量
9. set 设置变量 unset 取消变量
10. bash 进入子shell
11. exit 退出程序
12. export 将变量设置为环境变量,但仅本次登录有效
13. env 各种环境
14. locale 语系变量
15. iconv -f big5 -t utf8 filename 转换编码
16. cat /etc/shells 查看可使用的shell
17. systemctl start haveged 启动haveged(随机数生成器)
systemctl status haveged 查看服务状态
systemctl list-unit-files 列出所有服务
18. zip -q -r haha.zip * 将本文件夹下的所有文件和子目录一并压缩为haha.zip文件
-q (quiet) 不显示执行过程
-r 递归文件、子目录一并处理
19. tar -xzvf a.tar.gz 解压
20. tar -czvf abc.tar.gz a.tet b.txt c.txt 一并压缩
21. awk 文本分析工具,主要用于单行数据分成数个字段来处理的场景
22. sed (stream editor, 流编辑器)
默认对源文件不会改变(当然也可以改变)仅对模式空间中的数据做处理,常对文件以行为单位进行处理
23. cp -r a b 将a目录下的文件和子目录copy到b目录中
24. df -h 查看各个挂载点的磁盘空间使用情况
25. du -h 查看目录的磁盘空间使用情况
26. stat 文件/目录 显示文件/目录的inode节点保存的信息(元信息)
27. df -i/h inode信息,h代表human可读性
28. ldd /opt/xinliushijian/java 列出java的动态链接依赖
29. nl 显示文件的同时列出行号
30. nl wang.sh | sed ‘2,4d’ 删除文件的2-5行
31. hostname 主机名
32. /sbin/ifconfig 网卡指令,查看ip地址,inet位置
33. sed -i ‘$a #haha’ wang.sh
直接修改文件内容,在最后一行加上#haha,如果不加-i,则只是在屏幕输出,而不会改变文件内容
34. grep -E 等价于eprep,表示使用扩展正则表达式
35. typeset -i a=8 设置变量为整数
36. info 命令的详细介绍
37. more less head tail cat tac 展示命令
38. chown -R root:root haha.sh 改变文件的属主、属组归属
39. chmod 700 haha.sh 改变文件权限
40. chattr lsattr 文件隐藏属性
chattr +i 作用于目录,目录下的文件不能新增、删除文件,只能修改文件(内容可以修改),作用于文件,文件内容不能删除、新增和修改
chattr +a 作用于目录,目录下的文件不能删除、修改文件,只能新增文件,作用于文件,文件内容不能删除、修改,只能新增
chattr -i -a 减去权限
mv用于移动或重命名文件,rename也可以重命名,touch 用于创建文件,vi 也可以生成不存在的文件,chmod是修改属主、数组、其他人员对文件的权限,而chattr更加底层地控制文件的增删改属性。
41. ls -l | grep “^-” | wc -l 查看当前目录下的文件数量
42. ll --block -size=m 以mb打印
43 crontab -l 展示定时任务 crontab -e 编辑定时任务
0 0 6 * * ?* 每天6点执行 (秒 分 时 日 月 周 年)
*/1 * * * * source ~/.profile && /opt/xinliushijian/haha.sh > /dev/null 2>&1
44. awk ‘{print $2}’ $filename 一行一行得读取指定的文件,以空格为分隔符,打印第二个字段
45. xargs kill -9 把参数杀死 9代表9号信息SIGKILL,杀死进程信号
46. unask 文件默认权限
默认权限 = 7777 - umask
47. SUID SGID SBIT
chmod 4744 filename 是不是对第一个4感到奇怪
rwsr-xr-x 是不是对s感到奇怪
其实它们指得就是SUID=4 SGID=2 SBIT=1
- SUID
- 仅对二进制程序有效
- 执行者对该程序具有x的可执行权限
- 该权限只发生在执行过程中
- 执行者拥有属主owner的权限
- SGID
- 仅对二进制程序有效
- 执行者对该程序具有x的可执行权限
- 执行者拥有属组的权限
- SBIT
- 仅对目录有效
- 执行者对目录有wx的权限
- 在该目录下新增的文件和目录,只有自己和root可以删除