Shell文本变量及符号
特殊变量
$0:脚本自身的名字
$?:返回上一条命令是否执行成功,0为执行成功,非0为执行失败
$#:位置参数总参数
$*:所有的位置参数被看做成一个字符串
$@:每个位置参数被看做成独立的字符串
$$:当前进程的PID
$!:上一条运行后台进程的PID
整数比较符
-eq:等于;-ne:不等于;-ge:大于等于;-gt:大于;-le:小于等于;-lt:小于
字符串比较符
==;!=;>=;<=;>;<;-n:字符串长度不等于0为真;-z:字符串长度等于0为真;str:字符串存在为真
文件测试:
-e:文件或目录存在真;-f:文件存在为真;-d:目录存在为真;-r:有读权限为真;-w:有写权限为真;-x:有执行权限为真;-s:文件存在并且大小大于0为真
括号用途
():1、在运算中,先计算小括号里面的内容;2、数组;3、匹配分组
$():执行shell命令,与反撇号等效
$(()):1、简单算数运算。2、支持三目运算符
[]:条件表达式,里面不支持逻辑判断符
$[]:简单算数运算
${}:1、引用变量。2、字符串处理
文本常用处理命令
grep常用参数
-E:模式是扩展正则表达式
-x:模式匹配整行
-v:打印不匹配的行
-c:只打印匹配的行数
grep –v –E “^$|^#”/etc/Nginx/Nginx.conf #去除开头是空格或者#的配置文件
sed命令常用方法
匹配打印(p)
tail /etc/services| sed -n ‘/^b/p’#打印匹配开头的行
tail /etc/services|sed –n ‘1,3p’#打印1到3行
匹配删除(d)
sed -i ‘/^$/d;/^#/d’/etc/Nginx/Nginx.conf #删除空行和注释
匹配替换(s)
tail /etc/services | sed –n ‘s/tcp/lsk/p’#打印替换匹配的tcp字符
sed –i ‘s/http/lsk’/etc/Nginx/Nginx.conf #在Nginx.conf配置文件上替换字符
awk命令(处理文本的编程语言工具)
常用选项:
-F fs:指定fs为分隔符
-v var=value 指定变量符
常用模式:
BEGIN{ }:给程序赋予初始状态,先执行的工作
END{}:程序结束之后执行的工作
逻辑not,or,and(!,||,&&)
内置变量:
FS:输入字段分隔符,默认是空格或制表符
OFS:输出字段分隔符,默认是空格
RS:输入记录分隔符,默认是换行符\n
ORS:输出记录分隔符,默认是换行符\n
NF: 统计当前记录中字段个数
NR: 统计记录编号,没处理一行记录,编号会自增1
FNR:统计记录编号,没处理一行记录,编号自增1,处理第二个文件时,编号会重新计数
ENVIRON:当前系统的环境变量
IGNORECASE:忽略大小
tail /etc/services | awk –F ‘[\#]’‘{print $2}’//[]为元字符,符号其中任意一个字符。每遇到一个/或者#就分割字段
tail /etc/services | awk ‘/^blp5/{print $0}’//正则表达式,匹配开头是blp5的行
tail /etc/services | awk '/tcp/ || /blp5/{print $0}'//筛选tcp或者blp5字段的行
awk ‘BEGIN{FS=”:”;OFS=”-”}{print $1,$3,$5}’/etc/passwd //过滤/etc/passwd文件,以冒号为分隔符,输出分隔符以-分隔
常用系统配置文件
/etc/issue 系统版本
/etc/hosts 主机名与IP的对应关系
/etc/reslov.conf DNS服务器地址
/etc/hostname 主机名
/etc/sysctl.conf 系统参数配置文件
/etc/sudoers sudu权限配置
/etc/init.d 服务器启动脚本
/etc/sysconfig/network-scripts 网卡信息配置目录
/etc/rc.d/rc.local 系统init初始化完后执行,不建议将启动服务写在这里面,应创建自己的Systemd或者udev
/etc/fstab 硬盘自动挂载配置
/etc/inittab 系统启动运行级别
/etc/crontab 系统级任务计划
/var/spool/cron 用户级任务计划
/etc/crond.d 描述计算机任务计划
/etc/hosts.allow TCP包访问列表
/etc/hosts.deny TCP包拒绝列表
/usr/share/doc 各软件的文档
/etc/sshd_config SSH服务配置文件
/var/log 系统和应用程序日志目录
/var/spool/mail 邮件目录
/dev 目录
/dev/hd[a-t] IDE设备
/dev/sd[a-z] SCSI设备
/dev/dm-[-9] LVM逻辑磁盘
/dev/zero 无限0数据流
/proc 目录
/proc/[0-9]+ 此目录下数字命名的目录是运行进程信息,目录名为PID
/proc/meminfo 物理内存、交换空间等信息,free
/proc/loadavg 系统负载
/proc/uptime 系统运行时间
/proc/mounts 文件系统挂载信息,mount
/proc/swaps swap分区信息
/proc/partitions 系统分区信息
/proc/version 内核版本
/proc/stat cpu利用率,磁盘,内存页
/proc/devices 可用的设备列表
/proc/net
/proc/net/tcp TCP状态连接信息
/proc/net/udp UDP状态连接信息
/proc/net/arp arp信息表
/proc/net/dev 网卡流量
/proc/net/snmp 网卡传输协议的收发包信息
/proc/net/sockstat socket使用情况,比如已使用,正在使用
/proc/net/netstat 网络统计数据
/proc/net/route 路由表
常用Shell基础命令
echo :-n 不加换行符;-e解释转义符
cat:-b 显示非空行行号;-n 显示所有行号 ;-T 显示tab,用^I表示;-E 显示以$结尾
tac:倒序打印每一行
rev:反向打印每一行
wc:-c 打印文件字节数;-m 打印文件字符数;-l 打印多少行;-L 打印最长行的长度,也可以统计字符串的长度
mkdir:-p 递归创建目录; -v 显示创建过程。
du:-h 易读格式显示(K,M,G);-b 单位bytes显示,-k 单位KB显示;-m 单位MB显示;-s 只显示总大小。
cut:-b 选中第几个字符;-c 选中多少个字符;-d 指定分隔符字段,默认是空格;-f 显示选中字段
stat:-Z 显示selinux安全上下文;-f 显示文件系统状态;-c 指定格式输出内容;-t 以简洁的形式打印
seq:-f 使用printf样式格式;-s 指定换行符,默认是\n;-w 等宽,用0填充
sort(排序文本):-f 忽略字母大小写;-M 根据月份比较;-h 根据易读的单位大小比较;-g 按照常规数值排序;-n 根据字符串数值比较;-r 倒序排序;-u 去重重复
行;-t指定分隔符;-o 将结果写入文件
uniq(去除重复行,只统计相邻的):-c 打印出现的次数;-d 只打印重复行;-u 只答应不重复行;-D 只打印重复行,并且把所有重复行打印出来;-i 忽略大小写;
tee(从标准输入读取写到标准输出和文件): -a 追加到文件
join(连接两个文件):-i 忽略大小写;-o 按照指定文件栏位显示;-t 使用字符作为输入和输出字段的分隔符
paste(合并文件):-d 指定分隔符;-s 将文件内容平行合并,默认是tab键分隔
head(输出文件的前几行):-c 打印前多少K,M;-n 打印前多少行
tail(输出文件的后几行):-c 打印后多少K,'sans-serif'">;-f 实时读文件,随着文件的暑促胡附加输出;-n 输出最后几行
xargs(从标准输入中执行命令):-a file 从指定文件中读取数据作为标准输入;-0 处理包含空格的文件名;-d 指定分隔符,默认是空格分隔显示;-i 标准输入以{}代
替;-I 标准输入的结果以指定的名字代替;-t 显示执行命令;-p 交互显示是否执行命令;-n 最大命令行参数
nl(打印文件行号):-b<a|t> 指定行号显示方式,a表示所有行号都打印行号,b表示空行不显示行号;-n <ln|rn|rz> 行号显示方法,ln左对齐,rn右对齐,rz 右边显
示;-w 行号栏位在左边占用的宽度
date(打印或设置系统日期和时间):-d string 显示指定字符串所描述的时间,而非当前时间;-f datefile 从日期文件中按行读入时间描述;-I 输出IPS 8601格式的
日期和时间;-r 显示文件的最后修改时间;-R 输出RFC 2822 格式的日期和时间;-s string 设置时间所描述的字符串;-u 打印或者设置UTC时间
wget(非交互式网络下载):-b 后台运行;-c 断点续传;FTP: --ftp-ser=USER,--ftp-password=PASS 设置ftp用户名和密码;-r 指定递归下载
curl(发送数据到URL,类似于HTTP客户端):-k 允许HTTPS连接网站,-C 断点续传;-I 查看HTTP头信息;-s 静默模式,不输出任何内容;-H 自定义头信息发送
scp(基于SSH的安全远程服务器文件拷贝):-i 指定私钥文件;-l 限制速录;-P 指定远程主机SSH端口;-p 保存修改时间,访问时间和权限;-r 递归拷贝目录
rsync(远程或本地文件同步工具):-v 显示复制信息;-q 不输出错误信息;-c 跳过基础校验,不判断修改时间和大小;-a 归档模式,保留权限,数组;-r 递归目
录;-l 拷贝软连接;-z 压缩传输数据;-e 指定远程shell
nohup(运行程序,忽略挂起信号)
iconv(将文件内容字符集转成其他字符集):-l 列出所有已知的字符集;-f 原始文本编码;-t 输出编码;-o 输出到文件;-s 关闭警告
tar(归档目录或文件):-c:创建新归档;-d:比较归档和文件系统的差异;-r:追加文件到归档;-t:存档的内容列表;-x:提取归档所有文件;-C:改变解压目
录;-f:使用归档文件或设备归档;-j:bzip2压缩;-z:gzip压缩;-v:输出处理过程
netstat(打印网络连接、路由表、接口统计信息、伪装连接和多播成员):-r 显示路由表;-i 显示接口表;-n 不解析名字;-p 显示程序名;-l 显示监听的socket;-a 显示所有的socket ;-o 显示计时器;-Z 显示上下文;-t 只显示tcp连接;-u 只显示udp连接;-s 显示每个协议统计信息
ss(比netstat更强大的socket查看工具):-n 不解析名字;-a 显示所有的socket;-l 显示所有的监听的socket显示计时器;-e 显示socket详细信息;-m 显示
socket内存使用;-p 显示进程使用的socket;-I 显示内部的TCP信息;-s 使用汇总;-t 只显示TCP socket;-u 只显示UDP socket;-d 只显示DDCP socket
lsof(列出打开的文件):-i 监听的网络地址,如果没有,默认列出所有;-U 列出Unix域socket文件;-p 制定PID;-u 指定用户名或UID所有打开的文件;+D 递归
ps(报告当前进程的快照):-a 显示所有的进程;-u 选择有效的用户ID或名称;-x 显示无控制终端的进程;-e 显示所有进程;-f 全格式;-r 只显示运行的进程;-T
这个终端的所有进程;-p 指定进程ID;-m 线程;-o 用户自定义格式;
top(动态显示活动的进程和系统资源利用率):-d 信息刷新时间间隔;-p 只监控指定的进程PID;-i 只显示正在使用cpu的进程;-H 显示线程;-u只查看指定用户
名的进程;-b 将输出编排成易处理格式,适合输出到文件处理;-n 指定最大循环刷新数;-----交互命令: f 添加或杀出显示的指标;c 显示完整命令;P 按cpu使用
百分率排序;按驻留内存大小排序;T 按进程使用cpu时间排序;l 显示每个cpu核心使用率;k 终止一个进程
free(查看内存使用率):-b bytes显示;-k KB显示;-m M 显示;-g G 显示;-h易读单位显示;-s 没几秒重复打印;-c 重复打印几次退出;
df(查看文件系统的磁盘空间的使用情况):-a 包括虚拟文件系统;-h 可易读单位显示;-i 显示inode信息而非块使用量;-k 1K块的数量;-t 只显示指定文件系统为
vmstat(报告虚拟内存,swap,io,上下文和cpu统计信息):-a 打印活跃和不活跃的内存页;-d 打印硬盘统计信息;-D 统计硬盘表;-p 打印硬盘分区统计信
息;-s 打印虚拟内存表;-m 打印内存分配信息;-t 添加时间戳到输出
iostat(报告cpu利用率和磁盘I/O):-c 显示cpu使用率;-d 只显示磁盘使用率;-k 单位KB/S代替BLOCK/S单位 MB/S 代替Block/s;-N 显示所有映射设备名
sar(查看系统资源综合方面利用率):-u cpu;-r memory;-b disk;-n DEV,NIC traffic;-q systemload;-b TPS;-o output to file
dstat(查看系统资源综合方面利用率—需要额外安装):-p cpu统计;-d 磁盘统计;-m 内存统计;-n 网络统计;-s swap统计;-l 负载统计
ip(查看/操作路由表、设备、路由策略和隧道):---操作对象:address 网络设备地址;12tp 以太网IP隧道;link 配置网络设备;monitor 动态监控网络连
接;mroute:多播路由缓存条目;route 路由表;rule 角色在路由策略数据库;tunnel IP隧道;
nc(TCP和UDP连接和监听):-I interval 指定间隔时间发送和接收行文本;-l 监听模式;-n 不解析域名;-p 指定本地源端口;-s 指定本地源IP地址;-u 使用udp协
议;默认是tcp;-v 执行过程输出;-w timeoute连接超时时间;-x proxy_address请求连接主机使用代理地址和端口;-z 指定扫描监听端口,不发送任何数据
evel(执行参数作为shell命令)
ssh(ssh远程连接客户端)