shell 技巧
shell 基本命令
cd -
可以返回上一次cd前的目录cd
可以直接返回~
目录ls -F
可以打印目录下格式化文件ls -R
可以循环打印目录下的文件夹内容- 一次输入多条命令用分号
;
间隔 - shell 查找命令
which 在环境变量路径下寻找
whereis 在特定目录下查找,只能用于查找二进制文件、源代码文件和man手册页
find 寻找特定目录下文件
-.find 查找目录 -name 文件名称
支持模式查找:
* 通配0个及以上
? 通配一个及以上
[a-z]匹配任意小写字符/[abc]匹配或a或b或c/[A-Z]匹配任意大写字符/[0-9]匹配任意数字
[a-z][A-Z]匹配组合,如aD
find -size +10k
查找大于10k文件/-10k
小于10kecho $变量
可以打印变量内容,如echo $PATH
who
用于打印所有用户,whoami
打印当前用户mkdir -m a+wrx dir
新建dir目录并赋予权限(权限名称等同于chmod
)mkdir -p ./work/speech
当父目录不存在时,自动创建rmdir
用于移除目录(目录为空时)ll
的打印显示格式,参考ll命令详解
d | rwx | r-x | r-x | 2 | yd211 | speech | 4096 | Sep 23 11:23 | work |
---|---|---|---|---|---|---|---|---|---|
文件类型 | 创建用户权限 | 创建用户所在组其他人权限 | 其他组其他人权限 | 目录下文件数量 | 创建用户 | 创建用户所在组 | 文件大小/目录名大小 | 创建日期 | 文件名 |
类型参数
- d 代表目录
- - 代表普通用户
- l 代表链接文件
权限类型
- r 可读
- w 可写
- x 可执行
- 查看用户/组相关
cat /etc/passwd
查看用户
cat /etc/group
查看组
du -sh work/
查看目录总大小/du -sh file
查看文件大小(s代表总结值,h代表人类可读格式【b/k/m】)cat file1 file2
可以串起文件并输出,如合并文件:cat file1 file2 > file_cmb
shell变量与字符串
- 打印字符串中的变量:
echo ${file1} and ${file2}
- shell定义数组:
array=(1 2 3 4 5)
打印数组:echo ${array[0]}
增加数组维度:array[6]=7
- shell 定义变量等号左右无空格
- shell定义字符串数组:
array=("abc" "bcd" "cde")
且shell不要求数组内部元素类型相同(可混用) - 打印shell字符串所有变量:
echo ${array[@]}
(@
或*
) 获取数组长度:echo ${#array{*}}
- shell数组遍历:
do
和done
之间是执行体
for v in ${array[@]};do
echo $v;
done
- shell数组拼接:
array_new=(${array1[@]} ${array2[@]})
进程当中值的传递
- 若想要父进程中的变量传递给子进程,可将变量放置到环境区,使用
export temp
(不带$
)
(子进程对父进程无效) - Linux环境变量命令——env、export、set
这三个命令都可以用来显示shell变量
- env:显示所有的环境变量
- set:显示所有本地定义的shell变量
- export:把一个变量变作环境变量。export不加参数的时候,显示哪些变量被导出成了用户变量,一个shell自己的变量可以通过export “导出”变成一个用户变量(env和export显示基本一样,env多了一个
_=/usr/bin/env
)
- shell中并行运行多条命令:
cmd1;cmd2;cmd3
$ vi run.sh cmd1 cmd2 cmd3
- shell顺次运行多条命令
- &&:左边命令执行成功再执行后面命令
- ||:左边命令执行不成功再执行右边命令
- shell中输入
bash
可打开新的shell,虽然还是一个命令行,但已经进入新的shell,输入exit
可退回父shell
$ source ./1.sh
可以使子进程与父进程公用运行空间,此时子进程kill以后,值可以传回父进程,source
可用.
代替,即$ . ./1.sh
$ ps -f
可查看PPID(父进程ID)ps f
可以看到当前字符终端进程树ps xf
可以看到用户的所有字符终端的进程树$ top
可显示CPU及所有进程占用,可安装htop,输入htop
再按f5
显示更详细信息$ kill {pid}
可以杀进程,kill -9 {pid}
可以强制杀死进程,kill -1 {pid}
让进程重启$ free
可看到内存相关信息- 可在命令最后添加
&
来使命令运行在后台,使用$ {cmd} > {logfile} &
再新开终端使用$ tail -f {logfile}
查看增量 $ nohup {./1.sh} &
可使该运行脚本脱离当前父进程字符终端,此时字符终端消失,该脚本仍会继续运行。- 可使用
\
""
''
完成对特殊字符的转义{# ? * < > \}
- 用
''
定义的是常量(内部变量不会解释),用""
定义的是变量 tail -f {filename}
可以增量查看文件(如重定向日志文件)echo test* | xargs ls
相当于把echo的结果传给xargs
,xargs
又把 结果作为参数给ls