ALT + Backspace - 删除前一个单词
Shift + Insert - 向终端内粘贴文本
ctrl + u,删除从光标处到开头的命令文本
ctrl+k,删除从光标到结尾处的命令文本
ctrl + a:光标移动到命令开头
ctrl + e:光标移动到命令结尾
alt + f:光标向前移动一个单词
alt + b:光标向前移动一个单词
ctrl +w:删除一个词(以空格隔开的)
尽量用引号把字符串引起来,不然的话有时会出现莫名其妙的错误
双引号引用变量,会保留换行符
参数,可选必选,类型,取值范围,位置,描述
借助ssh,我们可以在远程主机上执行命令并读取输出。
ssh user@host “cmd && cmd”
将数据重定向到远程shell命令的stdin
echo “text” | ssh user@host “cat >list”
ssh user@host “cat >list” < filename
~/.ssh目录
ssh协议
用于远程加密登录与远程操作。
其中登录分为口令登录和公钥登录。公钥登录,用户将自己的公钥存储在远程主机上,远程主机在登录时能解密用户私钥加密的信息即可登录。
ssh用于远程登录,加密口令登录(服务器的公钥加密,存在中间人攻击),公钥登录(用自己的私钥加密)
shell_command = “env” # 输出shell当前的环境变量
subprocess.call(shell_command, shell=True) # 输出的环境变量里面 没有 LANG LC_ALL
os.putenv(“LANG”, “en_US.UTF-8”)
os.putenv(“LC_ALL”, “en_US.UTF-8”)
subprocess.call(shell_command, shell=True) # 输出的环境变量里面 包含了 LANG LC_ALL
生成数字签名公钥证书
其实数字签名证书的本质就是服务端的公钥+CA私钥加密的Hash值。(CA私钥负责签名,CA公钥负责验证)
服务器获取到这个已经含有数字签名并带有公钥的证书,将该证书发送给客户端。当客户端收到该公钥数字证书后,会验证其有效性。大部分客户端都会预装CA机构的公钥,也就是CA公钥。客户端使用CA公钥对数字证书上的签名进行验证,这个验证的过程就是使用CA公钥对CA私钥加密的内容进行解密,将解密后的内容与服务端的Public Key所生成的Hash值进行匹配,如果匹配成功,则说明该证书就是相应的服务端发过来的。否则就是非法的
公钥私钥,公钥用来加密信息,私钥用来数字签名
双方括号,与或,可以实现复杂的条件判断
[Tab]按键—具有『命令补全』和『档案补齐』的功能
[Ctrl]-c按键—让当前的程序『停掉』
[Ctrl]-d按键—通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
basename,dirname(不一定是绝对路径)
网络相关的命令
我们可能常常会遇到进程第一次启动后,再次启动会出现端口绑定失败的问题,我们可以通过netstat命令查看端口占用情况:
netstat -anp|grep 端口号
netstat -lntup:l:listening n:num t:tcp u:udp p:display PID/Program name for sockets
程序运行时,终端可能输出大量的日志,此时可以使用ctrl+s键,冻结屏幕,使得日志不再继续输出,而如果想要恢复,可使用ctrl+q退出冻结。
使用分号隔开可以执行多条命令, 虽然;可以分割多条命令,但是不会因为前一条命令失败,而导致后面的不会执行。
例如:$ cd /temp/log/;rm -rf *
使用&&分割多条命令,而且可以确保前一条命令执行成功,才会执行后面一条。
例如:$ cd /temp/log/&&rm -rf *
cat -n service.log | grep 1388
sed -n “29496,29516p” service.log
cat -n service.log | tail -n +29496 | head -n 20:从29496行开始检索,往前推20条
其他命令
cat service.log | grep 13 |more :将查询后的结果交由more输出
cat service.log | wc -l
ps -ef
ps aux;可以显示cpu,内存的使用情况
上面两个命令都是列出所有的进程
ps命令:ps 只显示当前终端当前用户的进程
lsof -i 列出开放的端口以及服务信息
lsof -i:4000
文件扩展
文件扩展匹配:是指生成匹配指定通配符的文件或路径名的过程
linux 命令行,文件(目录)中的通配符,不能用于跨路径
与正则表达式的通配符不同,linux 命令行,文件中的通配符:花中问星{}[]?*
*:匹配任何字符和任何数目的字符
?:匹配单个任意字符,不包括空格
[ ]:匹配[ ]之内的任意一个字符
[! ]:匹配除了[! ]之外的任意一个字符,!表示非的意思
{…}:匹配{}中的任一个字符串,和[]的区别是[]中为可以为字符串
命令 ls /usr/bin/w* 的效果是 列出指定目录下的所有以w开头的文件或目录 ;
命令 ls /usr/bin/w?? 的效果是 列出指定目录下的以w开头名称长度为3的所有文件或目录 ;
命令 ls /usr/bin/[xyz]* 的效果是 列出指定目录下的文件名以x或y或z开头的所有文件或目录 ;
命令 ls /usr/bin/[!a-h]* 的效果是 列出指定目录下的文件名不以a到h区间字母开头的所有文件或目录
进程注销后继续运行进程:nohup 命令 [选项] [参数] [输出文件] &
杀死进程:kill -9 pid
free:查看内存使用状况
top :查看实时刷新的系统进程信息
cut
tr
file 查看文件类型
sort默认按照字符的字典排序;- n 按照数字排序
ls命令 -a -l -F -d -R
sed执行多条命令
sed -i -e cmd -e cmd file
一行运行多条命令,命令之间用;或者&& 分割
将命令列表用小括号括起来,进程列表会生成一个子进程执行进程列表
外部命令执行时会创建一个子进程,又称为文件系统命令
内建命令,是shell的一部分,不需要借助外部程序文件来执行,不会创建子进程
linux通过发送信号进行进程间的通信
shell 通过path环境变量查找命令
当用户登录终端的时候,通常会启动一个默认的交互式shell
续航符:反斜线分行
Linux环境变量用分号分割:
创建库,在多个脚本中使用同一段代码
shell分割命令的符号:分号,换行符
终端是shell交互式工具
Bash会对双引号引用的变量求值,不对单引号求值
%s 格式替换符
UID为重要的环境变量,Root用户的UID为0,通过判断UID来确认当前用户是不是超级用户
stderr 标准错误
cmd &> output.txt
通过管道将上一个命令的输出作为下一个命令的标准输入
< 操作符用于从文件中读取内容至stdin
目录的末尾是否加斜线:对程序的影响
变量切片
延时: sleep 1
如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等
不要把密码硬编码在脚本里,不要把密码硬编码在脚本里,不要把密码硬编码在脚本里。
记录日志时不可包含密码
shell中默认的变量作用域都是全局的
因此,相比直接使用全局变量,我们最好使用local readonly这类的命令,其次我们可以使用declare来声明变量。这些方式都比使用全局方式定义要好。
在使用函数的时候一定要注意,shell中函数的返回值只能是整数,估计是因为一般情况下一个函数的返回值通常表示这个函数的运行状态,所以一般都是0或者是1就够了,因此就设计成了这样。不过,如果非得想传递字符串,也可以通过下面变通的方法
func(){ echo "abc" }
res=$(func)
shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量
命令替换允许你将shell命令的输出赋给变量
警告: 命令替换会创建一个子shell来运行对应的命令。子shell(subshell)是由运行该脚本的shell所创建出来的一个独立的子shell(child shell)。正因如此,由该子shell所执行命令是无法使用脚本中所创建的变量的。
在命令行提示符下使用路径./运行命令的话,也会创建出子shell;
如果你使用的是内建的shell命令,并不会涉及子shell。
在命令行提示符下运行脚本时一定注意是否创建子shell
命令替换:读取命令序列的输出,也称为子shell,子shell的命令对父shell无影响,如切换目录,执行环境变量等
使用函数输出,脚本输出,命令替换,用echo函数显示计算结果
这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。
内联输入重定向符号是远小于号(<<)。除了这个符号,你必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。
command << marker
data
marker
$ wc << EOF
> test string
> EOF
$?代表 上一个命令或脚本的退出状态码,标识执行成功与否,0-255,0通常表示成功
默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出
你可以改变这种默认行为,返回自己的退出状态码。exit命令允许你在脚本结束时指定一个退出状态码
美元方括号进行算数运算,浮点数使用bc
total=$[ $1 * $2 ]
条件表达式是命令,命令的退出状态码为0,执行对应的语句
if command1; then
commands
fi
shellman插件,提示语法
shellformat格式化插件
if [ condition ]; then
commands
fi
方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。
命令行参数(添加在命令后的数据)、命令行选项(可修改命令行为的单个字母)
可选参数改变程序的行为
位置参数
bash shell会将一些称为位置参数(positional parameter)的特殊变量分配给输入到命令行中的所有参数。这也包括shell所执行的脚本名称。位置参数变量是标准的数字:$0是程序名,$1是第一个参数,$2是第二个参数,依次类推,直到第九个参数$9。
Unix的哲学的根本原则,简单原则,尽量用简单的方法解决问题。KISS
可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了。
函数一结束就取返回值,退出状态码0~255
将函数变量和脚本变量隔离开来,只共享需要共享的变量
$@ $* ,加上双引号时,才有区别。
输入通常是通过stdin或者参数传递给命令
对于变量而言,双引号引用会保留换行符,不用双引号引用的话,换行符被替换为空格
env 、set
xargs 将命令的输出作为下一个命令的参数,不带xargs的话,默认是作为标准输入的
作用:转换、删除、压缩
cat text | tr ‘\t’ ’ ’
tr -d ‘0-9’ 删除自定字符集合
tr -s ’ ’ 压缩指定字符
选项 -c 使用集合的补集
按列处理数据的小工具
通过定界符,来分割
切分指定的范围:提取每一行的前十个字符
md5sum、shasum