201808162138
201912301609
目录
- gnu工具链
- gdb
- make
- shell
- 线程编程
文件与目录命令
- chmod [-R]
- chown
- groups [-R]
- chgrp [-R]
- grep
- whereis command
- mount/umount
shell
关于命令
多命令的间隔符号:
脚本文件格式:通常以.sh为后缀;脚本首行为 #!/bin/bash指定使用哪个shell/interpreter,#!(读作 [ʃə’bæŋ])后是解释器的路径;
用户变量:使用’=’定义,使用’$’读取
- 使用’=’定义,必须紧跟在变量后,不能有空格,否则会识别为一个命令;
- 环境变量:使用
export定义,使用set命令查看当前上下文的环境变量- 使用
unset删除变量
- 使用
- 位置变量:$0~$9
- 左移命令shift
预定义变量
$#参数个数;$*或$@参数内容;PS:$*和$@的不同:在双引号中体现出来。假设在脚本运行时写了三个参数1,2,3,则 "*" 等价于 "1 2 3"(传递了一个参数)而 "@" 等价于 "1" "2" "3"(传递了三个参数)。printf $@时,如果$@包含多个参数,则只会打出第一个值;$0当前脚本名,值得注意的是它没有包含在$*和$@$?上一命令的执行状态;$$当前 Shell 进程 ID;
数组变量
使用array=(a b c)定义数组,元素用空格分隔;通过${array[index]}访问元素;通过array[index]=value单独赋值或扩充使用通过unset array[index]删除数组元素或者unset array删除全部数组;特殊符号${array[@]},${array[*]}输出所有符号;仅支持1维数组;
通配符
[abc][*?][!except]
条件判断
- if表达式:if then … else … fi;if要有自己的fi,elif不需要有自己的fi,下一个else或者上一层if的fi就标识它的结束;
- 注意:else等流程控制的程序块不可以为空;
- test和[ expression ]命令
- test expr或者[ expr ]
- test命令后参与比较的参数,如果不用空格分隔,即识别为一个参数;例如test ‘1’=’2’ 的结果是0,shell实际是在回答:the length of STRING(‘1’=’2’) is nonzero,等价于test -n ‘1’=’2’
- 操作符:
- 整数比较:-eq, -ge, -gt, -le, -lt;
- 字符串:=, !=, -z, -n;
- 字符串操作补充:${#str}获取字符串长度,${str: 2: 5}截取字符串
- 文件操作符:-f
- [[ expression ]]关键字:增强版的test命令
- 可以直接使用比较符号;变量不需要加双引号;支持逻辑运算符;
- 支持正则表达式[[ str =~
]]
case-in语句:case test_string in case_string1) …;; case_string2) …;; … esac
for do
done - C风格的for循环
- for ((i=1; i<=100; i++)) do ((sum += i)) done
- Python风格的for-in
- for args 等价于 for args in $@
- C风格的for循环
- while
do done - break和continue命令
-
shell注释
reference
linux学习资源
- 【默认,cheatsheet虽然好用,但是还是没有linuxde好用;linuxde全,准确,但是最好还是自己总结一些即搜即用的cheatsheet】Linux命令大全(手册)_Linux常用命令行实例详解_Linux命令学习手册
- 鳥哥的 Linux 私房菜 — 鳥哥的 Linux 私房菜 首頁
cheatsheet补充
- 其他常用的shell:例如使用python;
系统服务控制systemd,从init、service到systemctl
- systemctl命令的使用及服务状态的查看 - sky__man的博客 - CSDN博客
- “Service”和“/etc/init.d/”有什么区别? - Ubuntu问答
- service {httpd|redis|mysqld|etc} 重启Apache # 可以记成service,先写服务名
- systemctl {start|stop|status|reload|enable|disable|mask|unmask} # 可以记成系统control,先写命令
- netstat 查看端口占用,详见cheatsheet
- tail -n50 查看日志最新的几行,详见cheatsheet
- top/htop 查看进程
- ps和kill关闭进程
一些命令的历史、迭代、发展
- vi -> vim
- ifconfig -> ip
- init.d->service -> systemctl
- apt-get -> apt -> aptitude
- top -> htop
其他
20180816 iptables
