Shell命令的查询网址:https://man.linuxde.net/
sed —— sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
- sed -i 's/原字符串/新字符串/g' file —— 替换文本文件
- sed -n '/开始日志/,/结束日志/p' file —— 读取部分时间段的日志
- sed '1d' —— 删除第一行
- sed '/字段/d' —— 删除包含某个字段的一行内容
- -e —— 直接在指令列模式上进行sed 的动作编辑
- -i —— 文件内容进行变更
- a —— 新增,a的后面可以接字符串,在下一行出现
- d —— 删除
- s —— 查找并替换
- g —— 全部替换
- 将“meinv”插入h.txt第二行下,打印(文件内容不变)
sed '2a mei nv' test.txt
- 删除h.txt文件包含w的行
sed '/w/d' test.txt
- 将h.txt文件中w替换成@
sed 's/w/@/g' test.txt
- 将h.txt文件中的第二行删除并将@替换成w
sed -e '2d' -e 's/@/w/g' test.txt
pass —— 远程批量执行命令(远程并发链接)
Pssh –h ip.txt –p “uptime”
- -l —— 远程机器的用户名
- -p —— 一次最大允许多少连接
- -o —— 输出内容重定向到一个文件
- -e —— 执行错误重定向到一个文件
- -t —— 设置命令执行的超时时间
- -A —— 提示输入密码并且把密码传递给ssh(注意这个参数添加后只是提示作用,随便输入或者不输入直接回车都可以,可以结合sshpass-p password使用)
- -O —— 设置ssh参数的具体配置,参照ssh_config配置文件
- -x —— 传递多个SSH 命令,多个命令用空格分开,用引号括起来
- -X —— 同-x 但是一次只能传递一个命令
- -i —— 显示标准输出和标准错误在每台host执行完毕后
- -I —— 读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入
- 远程免密操作
- 1)一种借助expect脚本
- sshpass -p password 以password为代码远程登录服务器
- 2) 一种借助sshpass来实现.
- $ ssh -o “StrictHostKeyChecking no” username@password 免密执行登录
- 案例
- local ssh="$SSHPASS -p $PASSWD ssh -o StrictHostKeyChecking=no -o GSSAPIAuthentication=no" ssh="$ssh -o ConnectTimeout=30 -o ServerAliveInterval=60 -o ServerAliveCountMax=5"
- StrictHostKeyChecking——主机秘钥检查
- GSSAPIAuthentication——GSSAPI身份认证失败
- ConnectTimeout——链接超时
- ServerAliveInterval——服务器间隔
scp -r —— 远程拷贝命令
- scp -r root@机器ip:file 本地file 机器——>本地
- scp -r 本地file root@机器ip:file 本地——>机器
&/dev/null —— 黑洞、空文件
rm —— 删除
- rm –i file —— 删除已有文件/目录前进行询问
- rm -f file —— 删除时候不进行提示,强势删除
- rm -r dir —— 删除目录下所有文件及子目录(删除目录)
ifconfig —— 查看机器(查看配置网络设备)
ssh admin@机器ip —— 链接机器
exit —— 断开链接
grep 查询内容 file —— 搜索数据
- grep "查找内容" —— 查找含有“查找内容”字段的行
- grep -v "排除的内容" —— 查找不含有“排除内容”字段的行
help —— 查看函数、模块的用途
ps -ef —— 查看进程信息
- ps -aux —— BSD格式显示进程信息
top —— 实时监控进程(查看CPU使用情况)
free —— 查看CPU的使用率
kill —— 结束进程(支持通配符)
- -s——强制结束进程
- killall——结束全部基进程
wget —— 用来从指定的url下载文件
- wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
- wget XXX -O file——把文档写到FILE文件中
- wget ftp://mfs.jd.com/mnt/mfs/tools/sshpass -O sshpass &>/dev/null
echo $PATH —— 查看PATH环境变量
sh FileName —— 执行shell脚本
- sh -n FileName——选项进行shell脚本的语法检查
- sh -x FileName ——shell脚本逐条语句跟踪
man —— 查看命令用法
ls —— 显示当前目录下最基本的目录及文件
- ll——ls -l——显示长列表
cp —— 复制文件(覆盖文件原有内容)
mv —— 移动文件/文件夹(重命名文件/文件夹)
mkdir —— 创建目录
- mkdir -p:确保目录名称存在,不存在就创建一个
file —— 查看文件类型
cat —— 显示文本文件所有内容
- -n——显示所有行号(包含空行)
- -b——显示所有行号(不包含空行)
more —— 分页显示文件内容
tail —— 显示文件最后几行内容(10)
tailf —— tail -f —— 跟踪日志
head —— 查看开头日志
mount —— 输出当前系统上挂载的设备列表
umount —— 卸载设备
df —— 查看设备磁盘空间
du —— 显示某个特定目录的磁盘使用情况
awk [选项参数] 'pattern1 {action1} pattern2 {action2}...' filename —— 文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
- pattern —— 表示awk在数据中查找的内容(匹配方式)
- action —— 在找到匹配内容时所执行的一系列命令
- -F —— 指定输入文件折分隔符
- -v —— 赋值一个用户定义变量
- FILENAME —— 文件名
- NR —— 已读文件的记录数
- NF —— 浏览记录的域的个数(切割后,列的个数)
- awk '{print $1,$3}' file —— 分析数据并生成报告
- $1 表示打印第一列
- $NF表示打印最后一列
- 不写默认打印所有列
- 搜索passwd文件以root关键字开头的所有行,并输出该行的第7列
awk -F: '/^root/{print $7}' passwd
- 搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列中间以“,”分割(只有匹配了pattern的行才会执行action)
awk -F: '/^root/{print $1","$7}' passwd
- 只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"(BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行)
awk -F : 'BEGIN{print "user,shell"} {print $1 "," $7} END{print "dahaige,/bin/zuishuai"}' passwd
- 将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F: '{print $3+i}' passwd
- 统计passwd文件名,每行的行号,每行的列数
awk -F: '{print "filename:"FILENAME ",linenumber:" NR ",columns:" NF}' passwd
- 切割IP
ifconfig eth0 | grep "init addr" | awk -F: '{print $2}' |awk -F " " '{print $1}'
- 查询sed.txt中空行所在的行号
awk '/^$/{print NR}' test.txt
sort —— 查看文件内容并排序
- -n —— 依照数值的大小排序
- -r —— 以相反的顺序排序
- -t —— 设置排序时所用的分割符
- -k —— 指定需要排序的列
- 按照“:”分割后的第三列倒序排序
$ sort -t : -rnk 3 sort.sh
source xx.sh —— 在当前bash环境下读取并执行FileName中的命令
cut [选项参数] filename —— 文件中剪切数据的作用,将剪切的字节、字符、字段输出
- -d —— 分隔符,按指定分隔符分割列
- -f —— 列号,提取第几列
- 切割第一列,第二列
- 在文件中切割“开心”
- 选取系统PATH变量值,第二个":"开始后的所有路径
- 切割ifconfig后打印的IP地址
wc -l —— 统计文件内容行数
- wc -c filename —— 显示一个文件的字节数
- wc -m filename —— 显示一个文件的字符数
- wc -l filename —— 显示一个文件的行数
- wc -L filename —— 显示一个文件中的最长行的长度
- wc -w filename —— 显示一个文件的字数
whereis —— 用于查询程序名称
chmod 777 file/chmod ug=rwx,o=x file —— 修改权限
- 读写执行
- rwx = 4+2+1 = 7
- rw- = 4+2 = 6
- r-x = 4+1 = 5
- u-拥有者
- g-同组人
- o-其他人
- a-全部人
pwd —— 查看当前目录的绝对路径
gzip file —— 压缩文件
gzcat —— 查看压缩过的文本文件内容
gunzip xx.gz —— 解压文件.gz
tar -zwvf xx.tgz —— 解压文件.tgz
eval()函数 —— 计算某个字符串
sleep —— 延迟操作
ping ip/域名 —— 查看网络连通情况
uniq —— 用于报告或忽略文件中的重复行,一般与sort命令结合使用
lsof —— 根据PID查端口
netstat -lnp | grep 80 —— 查看对应端口占用的进程
- netstat -atn —— 查看本机所有链接的状态
- -a —— 所有
- -t —— 仅显示tcp链接的信息
- -n —— 数字格式显示
trap —— 捕捉信号
-z $line —— 判断字符串长度是否为0
test —— 检查文件和比较值
- 判断表达式
- if test (表达式为真)
- if test !表达式为假
- test 表达式1 –a 表达式2 两个表达式都为真
- test 表达式1 –o 表达式2 两个表达式有一个为真
- 判断字符串
- test –n 字符串 字符串的长度非零
- test –z 字符串 判断字符串的长度是否为零
- test -z "" && echo true || echo false
- test 字符串1=字符串2 字符串相等
- test 字符串1!=字符串2 字符串不等
md5sum —— 生成一个MD5的值
CUR_PATH —— 当前路径
$? —— 判断命令是否正确执行
$# —— shell的输入参数的个数
$$ —— 当前shell的PID
$0、$1、$2
- $0 —— 脚本本身的名字
- $1 —— 第一个参数
- $2 —— 第二个参数
-o —— 或
-a —— 与
curl —— 在命令行中利用url进行数据或者文件传输
- 一款强大的http命令行工具,它支持文件的上传和下载,是综合传输工具,按照传统,习惯称url为下载工具
- -A/--user-agent <string> 设置用户代理发送给服务器
- -b/--cookie <name=string/file> cookie字符串或文件读取位置
- -c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
- -C/--continue-at <offset> 断点续转
- -D/--dump-header <file> 把header信息写入到该文件中
- -e/--referer 来源网址
- -f/--fail 连接失败时不显示http错误
- -o/--output 把输出写到该文件中
- -O/--remote-name 把输出写到该文件中,保留远程文件的文件名
- -r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围
- -s/--silent 静音模式。不输出任何东西
- -T/--upload-file <file> 上传文件
- -u/--user <user[:password]> 设置服务器的用户和密码
- -w/--write-out [format] 什么输出完成后
- -x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
- -#/--progress-bar 进度条显示当前的传送状态
- seq [选项]... [首数] [增量] 尾数
- 输出序列化
- -f, --format=格式 使用printf 样式的浮点格式
- -s, --separator=字符串使用指定字符串分隔数字(默认使用:\n)
- -w, --equal-width 在列前添加0 使得宽度相同
xargs —— 可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数
- -I {}批定了替换字符串,表示文件内容,能循环按要求替换相应的参数 使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,
- 当-I与xargs结合使用,每一个参数命令都会被执行一次:
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
- -d 自定义定界符
find —— 实施查找
- -type —— 查找某一类型的文件
- b —— 块设备文件
- d —— 目录
- c —— 字符设备文件
- p —— 管道文件
- l —— 符号链接文件
- f —— 普通文件
w —— 显示已经登录的用户及正在进行的操作
who —— 显示已经登录的用户名、终端名称、登录时间及登录IP
whoami —— 显示当前的用户名
Nginx——反向代理、负载均衡
- 启动Nginx进程
- /export/servers/nginx/sbin/nginx
- 关闭Nginx进程
- /export/servers/nginx/sbin/nginx -s stop
- 重启Nginx进程
- /export/servers/nginx/sbin/nginx -s reload
- 查看nginx进程是否启动。此命令用在代码判断nginx进程是否启动,如果只用ps aux | grep nginx 即使没有启动也会用内容返回,影响判断
- ps -ef|grep nginx|grep -v "grep"
echo——输出
- echo -n —— 不换行输出
- echo -e —— 处理特殊字符
read —— 输入
- read -p ——输入命令前有提示字符
- read -t ——指定读取值时等待的时间
if test ...then...else...fi——if判断
- []与[[]]的区别
- 算术比较运算符
- -eq——等于
- -lt——小于
- -gt——大于
- -le——小于等于
- -ge——大于等于
- -ne——不等于
- 1. 首先,尽管很相似,但是从概念上讲,二者是不同层次的东西。
- "[[",是关键字,许多shell(如ash bsh)并不支持这种方式。ksh, bash(据说从2.02起引入对[[的支持)等支持。
- "["是一条命令, 与test等价,大多数shell都支持。在现代的大多数sh实现中,"["与"test"是内部(builtin)命令,换句话说执行"test"/"["时不会调用/some/path/to/test这样的外部命令(如果有这样的命令的话)。
- 2.[[]]结构比Bash版本的[]更通用。在[[和]]之间的所有的字符都不会被文件扩展或是标记分割,但是会有参数引用和命令替换。
- 用[[ ... ]]测试结构比用[ ... ]更能防止脚本里的许多逻辑错误。比如说,&&,||,<和>操作符能在一个[[]]测试里通过,但在[]结构会发生错误。
- 3.(( ))结构扩展并计算一个算术表达式的值。如果表达式值为0,会返回1或假作为退出状态码。一个非零值的表达式返回一个0或真作为退出状态码。这个结构和先前test命令及[]结构的讨论刚好相反。
- 4.[ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符">" 与"<"必须转义,否则就变成IO改向操作符了(请参看上面2中的例子)。在[[中"<"与">"不需转义;
- 由于"[["是关键字,不会做命令行扩展,因而相对的语法就稍严格些。例如
- 在[ ... ]中可以用引号括起操作符,因为在做命令行扩展时会去掉这些引号,而在[[ ... ]]则不允许这样做。
- 5.[[ ... ]]进行算术扩展,而[ ... ]不做
let —— 指定算术算法
set —— 查看系统所有变量
rmp —— 是RPM软件包的管理工具
du -sh * —— 查看当前目录下文件大小
- -s——汇总
- -h——表示以KB, MB, GB, TB格式进行人性化显示
readlink —— 找出符号链接所指向的位置
- -f —— 递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在
- 简言:就是一直跟随符号链接,直到直到非符号链接的文件位置,限制是最后必须存在一个非符号链接的文件
- readlink -f test.sh
dirname —— 去除文件名中非目录部分,删除最后一个\后面的路径,显示父目录