第2章 走进shell
- setterm命令:用于设置终端前背景色和背景色
选项 参数 作用 -background black、red、green、yellow、blue、magenta、cyan、white 将终端背景设置为指定颜色 -foreground black、red、green、yellow、blue、magenta、cyan、white 将终端前景色改为指定颜色 -inversescreen on、off 交换背景色和前景色 -reset 将终端恢复为默认外观并清屏 -store 将终端当前设置存储,作为-reset的值 - Ubuntu的Unity,可以用快捷键Ctrl+Alt+T快速调出终端。
- 复制粘贴快捷键是Shift+Ctrl+C(V)。
- Ctrl +和Ctrl -可以放大或者缩小窗口显示字体大小。Ctrl 0 恢复默认字体大小。
第3章 基本的bash shell命令
- /etc/passwd中最后一个字段指定该用户用的shell程序
- Linux将文件存储在单个目录结构中,这个目录被称为虚拟目录。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
- 波浪号~表示你正处于当前用户的home目录中,用户home目录也是在/etc/passwd中列出。
- ls -R :显示包括当前目录的子目录中的内容
ls -F :文件夹后加个/ - file命令 可以查看文件类型。
- tail 默认显示后10行,通过-n 2显示后两行。tail -f 可以让显示出来的内容随文件实时更新,通常用于一个终端输出日志文件,另一个监控日志文件。
第4章 更多的bash shell 命令
- 默认情况下,ps命令只显示运行在当前控制台下的、属于当前用户的进程。
- 查看系统上运行的所有进程,可以用ps -ef。
UID:启动进程的用户
PID:进程ID
PPID:父进程ID
C:进程生命周期中的CPU利用率
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程需要的累计CPU时间
CMD:启动的程序名称 - ps只显示某个特定时间点的进程信息,而top是实时的。
- killall支持通过进程名来结束进程,进程名支持通配符。
- du命令用于显示当前目录的磁盘使用情况。
-c:显示所有已列出文件总大小
-h:易读形式显示,即用K\M\G单位 - sort file:排序输出文件
-f:默认情况下,大写字母会排在前面,这个参数将忽略大小写
-m:将两个已经排序的数据文件合并
-n:按字符串的数值来排序(不会转换浮点数)
-o:将排序结果输出到指定文件
-r:反向排序
第6章 使用Linux 环境变量
- 全局环境变量:对于shell会话和所有生成的子shell都是可见的。
局部环境变量:只对创建它们的shell可见。 - 父shell export一个全局变量,子shell即使用export再修改,也不影响父shell。
- 可以用unset命令删除环境变量,不用加$。
- 5个启动文件:
/etc/profile:bash shell默认的主启动文件
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile - 剩下4个启动文件,shell按照以下顺序找到第一个,余下被忽略(.bashrc一般是通过其他文件运行的):
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile - 所有用户都用到的变量,一般在/etc/profile设置(当一旦更新可能就没了,建议在/etc/profile.d中放一个.sh文件去导入);个人用户用到的变量,一般在$HOME/.bashrc设置。
第7章 理解Linux文件权限
- /etc/passwd每一个用户信息:
用户名:密码:UID:GID:备注:HOME目录:默认shell - passwd里面的密码都是x,真正密码存储在/etc/shadow中。
- useradd参数:
-c coment:给新用户添加备注
-d home_dir:为主目录指定名字(如果不想用用户名作为主目录名)
-e expire_date:账户过期日期
-f inactive_days:账户密码过期多少天后被禁用
-g initial_group:指定用户登陆组的GID或组名
-G group:指定用户除登陆组之外所属的一个或多个附加组
-k:必须和-m一起使用,将/etc/skel目录下的内容复制到新建用户的HOME
-m:创建用户的HOME目录
-M:不创建HOME目录
-n:创建与用户同名的组
-r:创建系统账户
-s shell
-p passwd
-u uid - useradd -D显示默认值,-D后加-b(HOME目录) -e -f -g -s可以修改默认值
- -代表文件,d代表目录,l代表链接,c代表字符型设备,b代表块设备,n代表网络设备。
- 文件默认值为666,目录默认值为777。创建的默认值是减去umask的值得到的。
通过umask 026设置,这时候创建的文件默认权限是640。
第11章 构建基本脚本
- 有两种方法可以将命令输出赋给变量:
①反引号:test=`date`
②括号:test=$(date) - shell两种运算:
①expr命令:expr 5+2; expr 5 \* 2;
②方括号:var=$[$var1 * ($var2 - $var3) ] - 可以通过bc命令来计算浮点数:var=$(echo "options; expression" | bc)
第12章 使用结构化命令
- Shell的 if 语句是判断后面的命令的退出状态码,如果是0既执行后面内容。
- 数值比较:-eq 相等;-ge 大于等于;-gt 大于;-le 小于等于;-lt 小于;-ne 不等于。
- file1 -nt file2(file1 -ot file2):file1是否比file2新(旧)
- [ condition1 ] || [ condition2 ]
[ condition1 ] && [ condition2 ] - case命令:
case variable in
pattern1 | pattern2) commands;;
pattern3) command;;
*) default command;;
esac - 使用双括号进行判断,可以用类似于C风格的判断:
if(($var>20))
第13章 更多的结构化命令
- 可以用通配符来读取目录:
for file in /home/* ; do commands done
- C风格的for命令:
for((a=1;a<10;a++));do commands done for((a=1,b=10;a<=10;a++,b--));do commands done
- 通过更改IFS变量,可以更改for循环读数据时的默认分隔符:
IFS=$'\n'
for var in $(cat $file) - break支持跳出循环层级,通过break n指定要跳出几层循环。(continue也同理)
第14章 处理用户输入
- $*将所有命令行输入变量当成一个整体;$@则会将其当做多个独立单词,可以通过for循环遍历(for var in "$@")
- read命令从标准输入或另一个文件描述符中接受输入:
read -p "Please enter a num:" num echo "${num}"
- read 后面可以指定多个变量,输入的每一个数据值都会分配给列表中的下一个变量,如果变量数目不够,剩下的所有数据会分配给最后一个变量。
- 加入-s选项,避免read命令输入的数据出现在显示器上(输密码时可以用)。
第15章 呈现数据
- command 2> errlog 1> log:
将错误输出重定向到 errlog,正常输出重定向到 log - command &> log 所有输出重定向到log,此时错误输出优先级较高,他们会集中在一起。
- echo "err message" >&2 脚本中输出临时重定向到错误输出。
- exec 0/1/2>log 永久将错误或标准输出或标准输入重定向,重定向前最好要先备份下防止回不来:
exec 3>&1 #备份 exec 1>log #重定向 #…… exec 1>&3 #恢复
- 可以将不想看到的输出重定向到/dev/null
- 通过tee命令可以同时把输出重定向到其他地方,又同时打印到屏幕:
commands | tee logfile(默认覆盖文件内容,追加要加入-a参数)
第16章 控制脚本
- 可以通过trap命令,捕获Ctrl+C等Linux信号,然后做相应的操作:
trap commands signals - 调度优先级从-20(最高优先级)到+19(最低优先级),默认以优先级0来启动进程。改变一个脚本的优先级,通过nice命令做到:
nice -n 10 ./test.sh &
nice -10 ./test.sh & - at [-f filename] time:定时运行作业。
time的格式很灵活,可以是:
10:15
10:15 PM
MMDDYY;MM/DD/YY; DD.MM.YY
Jul 4
+25min
第17章 创建函数
- 通过echo返回的函数值,可以是任何值,并且保存进变量:ret=$(fun)
- source有一个快捷别名,称为点操作符。只要:. ./funcs.sh 即相当于source ./funcs.sh
第18章 图形化桌面环境中的脚本编程
- echo本不可以输出非字符,例如制表符和换行符,加入-e选项后可以。
- echo加入-n,可以取消自动换行。
- 通过select命令可以简化菜单选择编程:
select option in "option1" "option2" "option3";do case $option in "option1") break ;; "option2") func2 ;; "option3") func3;; esac done
第19章 初识sed和gawk
- 加入-e选项可以在sed中执行多个命令:
sed -e 's/brown/green/; s/dog/cat/' data.txt - gawk中:$0代表整个文本行;$1代表文本行第一个字段;$2代表第二个字段……
- gawk可以通过-F选项指定字段分隔符,默认是任意的空白符(空格或制表符等)
- 可以在处理脚本前或者后运行一些程序:
gawk 'BEGIN{print "Pre:"} {print $0} END{print "End of file"}' data.txt
- 数字方式寻址:
sed '2s/dog/cat/g' data.txt #第二行
sed '2,4s/dog/cat/g' data.txt #第二到第四行
sed '2,$s/dog/cat/g' data.txt #第二行开始的所有行 - sed '/Samantha/s/bash/csh/g' datat.txt #匹配有Samnantha的行,然后再执行替换
- i:在指定行前添加一个新行;a:在指定行后添加一个新行。
sed '1i/this is new line' data.txt
第20章 正则表达式
- 通过()对表达式里面的内容进行分组,后面可以通过$0 $1来表示这些分组。