-c
:指定ping的次数-q
:只重结果不重过程-s
: 默认情况下,ping命令是以64字节大小的数据包来测试网络联通性的,如需要改变默认数据包的大小,则可以使用参数-s选项。-t
: 指定ping的TTL-i
: 指定ping的时间间隔-f
: 以尽可能快的速度来发送数据包/etc/resolv.conf
存放dns服务器地址nslookup
$ nslookup www.baidu.com
//本次解析使用的DNS服务器的具体IP地址和端口
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.121
Name: www.a.shifen.com
Address: 61.135.169.125
/etc/resolv.conf
中第一条记录dig
dig: Domain Information Groper,它是一个DNS查询工具,比nslookup更加强大。
dig +tcp @8.8.8.8 www.baidu.com
: 采用TCP协议来进行DNS通信dig +trace roclinux.cn
: 跟踪dig全过程dig +short www.baidu.com
: 精简dig输出net-tools软件包是Linux平台中非常老牌的工具包,包括arp、ifconfig、netstat、route等命令,普遍集成于各类Linux发行版中,但是Linux内核2.2版本对网络子系统进行了全面的重构后,net-tools工具集有些力不从心,iproute2做为后浪有将前浪拍在沙滩上的趋势。
ss
ss -s
: 查看当前服务器的网络连接统计ss -l
: 查看所有打开的网络端口ss -a
: 查看所有的socket连接 -ta
:表示只查看TCP socketsip
ip是用来管理网络设备和路由的强大命令。
+ ip addr show
展示网络接口信息
+ ip addr add 192.168.1.111/24 dev p1p2
为网络接口添加一个IP地址
+ ip addr del 192.168.1.111/24 dev p1p2
针对一个网络接口删除其IP地址
+ ip route show
查看路由表
+ ip route add 192.168.2.0/24 via 192.168.1.254
增加一条路由规则
+ ip neigh show
查看本服务器的ARP列表
+ ip命令汇总表
tcpdump -i eth0 -nn -X ‘port 53’ -c 1
tcpdump -i eth0 -c 1 -t -F filter.txt
tcp[tcpflags] & tcp-syn; tcp[tcpflags] & tcp-ack; tcp[tcpflags] & tcp-fin;
tcpdump 'ip[2:2] > 576'
打印IP包长度超过576字节的网络包。命令nc,全名netcat, 能胜任跟TCP/UDP相关的一切操作,可以打开TCP连接、发送UDP包、监听端口,端口扫描等等。
nc -l 12345
nc 116.255.245.207(A的IP地址) 12345
nc -v -l 12345 < book_out.txt
nc -v -n 116.255.245.207 12345 > book_in.txt
一个脚本方便从A机器建立到B机器的ssh信任关系。
用于源端和目的端文件、文件夹的实时同步
命令行下的网络下载工具,支持HTTP、HTTPS、FTP协议的下载。
uptime命令,有两大功能:一个是查看机器的开机时长,另一个是查看CPU负载情况。
$ uptime
22:36:58 up 11:12, 1 user, load average: 0.00, 0.00, 0.00
系统当前时间 主机已运行时间 用户**连接**数 最近1、5、15分钟的系统平均负载
+ **系统平均负载:** 运行队列中的平均进程数,一般的经验来看,单核负载在0.7以下是安全的,超过0.7就需要进行优化了。
+ **/proc/loadavg**文件中也记载了系统平均负载信息。
SWAP(交换分区)和Windows中的虚拟内存都是将一部分硬盘空间虚拟成内存,来缓解内存使用紧张的问题。
+ 当Linux系统发现物理内存使用量不足时就会选择内存中较长时间没有被访问和更新的内存数据,将这些内存数据临时写到SWAP中,并释放内存中相应的空间
+ 等到某个程序要使用SWAP中的数据时,系统会再次从SWAP中读取之前保存的数据,并写回到物理内存中。
+ 对于服务器来说,SWAP建议设置为内存的1~2.5倍之间的数值,可以防止内存耗尽的窘境。
+ 如何定义内存不足?cat /proc/sys/vm/swappiness
中的参数会来辅助控制“内存不足”的界限。
通过top,我们可以了解到服务器的CPU负载情况、内存状态、SWAP使用状况,以及详尽的进程级运行状态,可谓应有尽有。
iostat -d -k 1 3
pidof sshd
将系统性能指标信息按时间间隔数据到文件中。
lsof,即list open files 用来查看进程打开的文件、目录和套接字等一系列信息。
lsof filename
: 通过文件名来定位打开该文件的进程lsof -d N
:根据文件描述符定位进程lsof -p PID
:查询进程打开了哪些文件lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
:查看哪些程序占用端口查看服务器上有哪些进程,属于哪些用户,消耗了多少CPU资源,占了多少内存
+ a:显示各终端上的所有进程
+ u:展示进程所属的用户名
+ x: 对于没有关联到终端上的进程也展示出来
kill [选项] [进程号]
向进程发送特定信号要想让运行的命令不因用户注销、网络断开等因素而中断,有两个基本思路:
+ 让进程对SIGHUP信号免疫。免疫宗的成员有nohup和disown。
+ 让进程在新的会话中运行。会话宗的成员有setid和screen。
service [服务名] [start/stop/restart/status]
/etc/init.d
目录下的这些文件就是可以通过service命令掌控的服务。可以实现把某些功能代码封装成模块动态地装载到内核中,当内核需要用到这个功能时再读取使用。
man cmd
info cmd
来查询cmd命令的说明文档useradd USERNAME
,可以通过-g指定所属的用户组 useradd -g GROUPNAME USERNAME
,-d 指定该用户的根目录
passwd
userdel
groupadd
groupdel
users
:查看当前系统有哪些用户; who
、w
:查询详细信息su
:切换到其它用户,默认切换到root,切换成其他用户的前提是需要知道对方的密码。sudo
:用其他用户的身份执行命令
USER ALL=(ALL)ALL
: USER这个用户(第一列)可以从任何地方登录后(第二列的ALL)执行任何人(第三列的ALL)的任何命令(第四列的ALL)。USER ALL=(ALL) NOPASSWD:/sbin/shutdown, /usr/bin/reboot
at
: 在某一个特定的时间执行一次任务cron
: 周期性执行任务pwd
:当前所在的目录; 在每个目录下,都会固定存在两个特殊目录,分别是一个点(.)和两个点(..)的目录。一个点(.)代表的是当前目录,两个点(..)代表的是当前目录的上层目录。touch
: 创建文件,如果已经存在了这个文件,并不会修改文件的内容,但是会更新文件的创建时间属性。rm
删除文件、目录; -r 递归删除子目录 -f 强制删除,不需要确认提示mv
移动或重命名文件cat
查看文件;head
查看文件头; tail
查看文件尾dos2unix
把DOS格式的文本文件转变成UNIX下的文本文件mkdir
创建目录,-p参数一次性创建所有目录cp
文件和目录复制
[root@localhost ~]# ls -al
total 112
drwxr-x--- 3 root root 4096 Oct 1 10:43 .
drwxr-xr-x 24 root root 4096 Oct 1 07:42 ..
-rw------- 1 root root 1017 Jan 2 2009 anaconda-ks.cfg
第一列是文件类别和权限,这列由10个字符组成,第一个字符表明该文件的类型。(d:目录 -:普通文件 l:链接文件 b:快文件 c:字符文件 s:socket文件 p:管道文件)
接下来的属性中,每3个字符为一组,第2~4个字符代表该文件所有者(user)的权限,第5~7个字符代表给文件所有组(group)的权限,第8~10个字符代表其他用户(others)拥有的权限。
第二列代表“连接数”,除了目录文件之外,其他所有文件的连接数都是1,目录文件的连接数是该目录中包含其他目录的总个数+2
第三列代表该文件的所有人,第四列代表该文件的所有组,第五列是该文件的大小,第六列是该文件的创建时间或最近的修改时间,第七列是文件名。
lsattr 查看文件的隐藏属性,chattr设置文件的隐藏属性
chattr +a anaconda-ks.cfg
设置了a属性的文件,即便是root用户也不能删除它,但是实际上可以以尾部新增(append)的方式继续向该文件中写入内容。chmod: 改变文件权限,u、g、o来分别代表拥有者、拥有组、其他人,而对应的具体权限则使用rwx的组合来定义,增加权限使用+号,删除权限使用-号,详细权限使用=号
chmod u+s somefile
chmod o+t somedir
ext2文件系统:ext2文件系统也是采取将文件数据存放到数据块中的方式来存储数据的,这些数据块的大小可以在创建文件系统的时候指定,对于存放的每个文件和目录,都会有一个inode指定,文件系统中所有的inode都是使用inode表来进行记录的,一定数量的块就会组成一个块组。在ext2文件系统中,整个分区的文件系统信息都被存放在超级块中,考虑到超级块所具有的重要性,因此在每个块组的开头中都有相同的备份。ext2文件系统的弱点也是很明显的:它不支持日志功能。这很容易造成在一些情况下丢失数据,这个天然的弱点让ext2文件系统无法用于关键应用中,目前已经很少有企业使用ext2文件系统了。
ext3文件系统: 从ext2文件系统发展而来,所以完全兼容ext2文件系统,拥有日志功能
grep:搜索文本
grep [-ivnc] ‘需要匹配的字符’ 文件名
#-i 不区分大小写
#-c 统计包含匹配的行数
#-n 输出行号
#-v 反向匹配
sort排序 sort [-ntkr] 文件名
#-n 采取数字排序
#-t 指定分隔符
#-k 指定第几列
#-r 反向排序
uniq删除重复内容 uniq [-ic]
#-i 忽略大小写
#-c 计算重复行数
uniq命令只会对比相邻的行,如果有连续相同的若干行则删除重复内容,仅输出一行。如果相同的行非连续,则uniq命令不具备删除效果。uniq一般都需要和sort命令一起使用。
cut 截取文本
cut -f指定的列 -d’分隔符’; 系统中的所有用户及用户的家目录 cat /etc/passwd | cut -f1,6 -d’:’
cut还可以打印指定的字符; cat /etc/passwd | cut -c1-5,7-10 打印出每行第1~5个字符,以及第7~10个字符的内容
tr 做文本转换或删除
cat /etc/passwd | tr ‘[a-z]’ ‘[A-Z]’ //把所有a转换为A b转换为B
cat /etc/passwd | tr -d ‘:’ //删除所有的:
paste 做文本合并; paste a.txt b.txt ;-d 指定在合并文件时行间的分隔符
split 分割大文件
ifoconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:1A:C7:24
inet addr:172.19.9.191 Bcast:172.19.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14073006 errors:0 dropped:0 overruns:0 frame:0
TX packets:10588780 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7100709998 (6.6 GiB) TX bytes:8880189731 (8.2 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:11804717 errors:0 dropped:0 overruns:0 frame:0
TX packets:11804717 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1845532026 (1.7 GiB) TX bytes:1845532026 (1.7 GiB)
eth0表示的是以太网的第一块网卡。其中eth是Ethernet的前三个字母,代表以太网,0代表是第一块网卡,第二块以太网网卡则是eth1,以此类推。Link encap是指封装方式为以太网;HWaddr是指网卡的硬件地址(MAC地址);inet addr是指该网卡当前的IP地址;Broadcast是广播地址(这部分是由系统根据IP和掩码算出来的,一般不需要手工设置);Mask是指掩码;UP说明了该网卡目前处于活动状态;MTU代表最大存储单元,即此网卡一次所能传输的最大分包;RX和TX分别代表接收和发送的包;collision代表发生的冲突数,如果发现值不为0则很可能网络存在故障;txqueuelen代表传输缓冲区长度大小;第二个设备是lo,表示主机的环回地址,这个地址是用于本地通信的。
DEVICE=eth0 //DEVICE变量定义了设备的名称
BOOTPROTO=dhcp //BOOTPROTO变量定义了获取IP的方式
ONBOOT=yes // ONBOOT变量定义了启动时是否激活使用该设备
// BOOTPROTO=static
//IPADDR=192.168.159.129
//NETMASK=255.255.255.0
route add default gw 192.168.159.2
route–n查看系统当前的路由表
lsof [options] filename
lsof filename 显示打开指定文件的所有进程
lsof -c COMMAND 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属于user进程打开的文件
lsof -g gid 显示归属于gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,默认是不加-n
lsof -p<进程号> 列出指定进程号所打开的文件
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
#46指IPv4或IPv6
#protocol指TCP或UDP
#hostname指主机名
#hostaddr是IPv4地址
#service是/etc/service中的service name
#port是端口号
nice、renice
:调整进程优先级没什么好记录的。。。
.(一个点)符号:用于匹配除换行符之外的任意一个字符。
* 符号:符号用于匹配前一个字符0次或任意多次
{n,m}: 控制字符的重复次数
^ 符号: 用于匹配开头的字符
$ 符号:“$”用于匹配尾部
[] 符号: 用于匹配方括号内出现的任一字符,^这个符号出现在[]中,则代表取反.
\ 转义字符
\d : 匹配一个数字,等价于[0-9]
\b : 匹配单词的边界 \B:匹配非单词的边界
\w: 匹配字母、数字和下划线,等价于[A-Za-z0-9]。 \W:匹配非字母、非数字、非下划线,等价于[^A-Za-z0-9]。
\n 匹配换行符 \r匹配回车符 \t 匹配制表符
\s:匹配任何空白字符,\S:匹配非空白字符
扩展正则表达式
+ ?
: 用于匹配前一个字符0次或1次
+ +
: 用于匹配前一个字符1次以上
+ |
“|”符号是“或”的意思,即多种可能的罗列,彼此间是一种分支关系。
基于正则的文本查找命令
+ 默认情况下,sed并不会改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印到标准输出中,要想保存修改后的文件,必须使用重定向生成新的文件。如果想直接修改源文件本身则需要使用“-i”参数。
+ sed处理文本时是以行为单位的,每处理完一行就立即打印出来,然后再处理下一行
+ sed [options] 'command' file,是sed可以接受的参数;#command是sed的命令集(一共有25个)
+ -e 参数和分号可以连接多个命令
sed 应用实例:
1. 删除:d命令可删除指定的行。删除第一行 `sed '1d' Sed.txt`; 删除从N到M行 `sed 'N,Md' Sed.txt`;删除第一行到最后行 `sed '1,$d' Sed.txt`;删除最后一行 `sed '$d' Sed.txt`; 删除所有包含Empty的行 `sed '/Empty/d' Sed.txt`;删除空行 ` sed '/^$/d' Sed.txt`
2. 查找替换: 使用s命令可将查找到的匹配文本内容替换为新的文本。 sed 's/line/LINE/' Sed.txt 使用LINE替换line,请注意每一行只有第一个line被替换了,默认情况下只替换第一次匹配到的内容。`s/line/LINE/g` 可以完成所有匹配值的替换
3. 字符转换: 使用y命令可进行字符转换,其作用为将一系列字符逐个地变换为另外一系列字符。该命令会将file中的O转换为N、L换为E、D转换为W#注意转换字符和被转换字符的长度要相等,否则sed无法执行 `sed 'y/OLD/NEW/' file`
4. 插入文本:使用i或a命令插入文本,其中i代表在匹配行之前插入,而a代表在匹配行之后插入。 在匹配行的上一行插入,sed '/Pattern/i\Insert' Sed.txt
5. 读取文本,使用r命令可从其他文件中读取文本,并插入匹配行之后。 `sed '/^$/r /etc/passwd' Sed.txt `
6. 打印: 使用p命令可进行打印,这里使用sed命令时一定要加-n参数,表示不打印没关系的行. 打印出文件中指定的行 `sed -n '1p' Sed.txt`
7. 写文件: 想要保存文件除了使用重定向或-i参数外,还可以使用w命令将结果保存到外部指定文件。 `sed -n '1,2 w output' Sed.txt`
8. 替换匹配行的下一行: n命令,该命令的作用在于读取匹配行的下一行,然后再用n命令后的编辑指令来处理该行。
9. 每一行最前面加点东西,`sed 's/^/#/g' pets.txt`
10. 在每一行最后面加点东西 `sed 's/$/ --- /g' pets.txt`
11. 对匹配内容执行多条命令,对1,3行做替换操作,然后打印出替换后的内容 `sed -n '1,3{s/old/new/g;p;}' file`
awk则是基于列的文本处理工具,它的工作方式是按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出各字段的值,1、1、2分别用于表示域,$0则表示全部域。
type:判断一个命令是不是内建命令
执行程序:“.”(点号),点号或者source命令用于执行某个脚本,甚至脚本没有可执行权限也可以运行。
alias:用于创建命令的别名,alias ll='ls -l --color=tty',可以将别名条目写到用户家目录中的.bashrc文件中
unalias: 删除别名
任务前后台切换:bg、fg、jobs
cd 改变目录
declare、typeset 用来声明变量
echo 打印字符,默认加上换行符,使用-n参数可以不打印换行符
eval: 将所跟的参数作为Shell的输入,并执行产生的命令
exec:内建命令exec并不启动新的Shell,而是用要被执行的命令替换当前的Shell进程,并且将老进程的环境清理掉。exec典型的用法是与find联合使用,用find找出符合匹配的文件,然后交给exec处理 find / -name "*.conf" -exec ls -l {} \;
exit: 退出Shell
kill: 发送信号给指定PID或进程
let: Shell内建的整数运算命令
pwd:显示当前目录, PWDPWDOLDPWD
local:该命令用于在脚本中声明局部变量
read: 从标准输入读取一行到变量
return 定义函数返回值
ulimit: 显示并设置进程资源限度
/etc/shells
文件中存放系统已安装的shell。特殊变量
数组:
定义: declare -a Array #定义名为Array的索引数组 declare -a Name=(‘john’ ‘sue’) # 数组还可以在创建的同时赋值
数组取值: ${数组名[索引]}。${Array[@]} ${Array[*]} 可以一次性取出所有值
数组长度: 利用“@”或“*”字符,可以将数组扩展成列表,然后使用“#”来获取数组元素的个数 echo ${#Array[@]}。echo ${#Array[2]} 如果某个元素是字符串,还可以通过指定索引的方式获得该元素的长度。
数组截取: 可以截取某个元素的一部分,对象可以是整个数组或某个元素。echo ${Array[@]:1:2}
连接数组:将若干个数组进行拼接操作 Conn=(${Array[@]} ${Name[@]})
替换元素:将数组内某个元素的值替换成其他值。Array=(${Array[@]/HelloWorld/HelloJohn})
readonly RO=100
文件测试 :
-e FILE :文件或者目录存在时返回真。
-d FILE: 文件存在并且是个目录时返回真。
-f FILE: 文件存在并且为普通文件。
-x FILE: 文件存在并且可以执行。
-r FILE: 文件存在并且可读。
-w FILE: 文件存在并且可写。
字符串测试:
-z “STR”: STR为空时返回真
-n “STR”: STR非空时返回真
“string1”=”string2”
“string1”!=”string2”
整数比较:
”num1” -eq “num2”
“num1” -gt “num2”
“num1” -lt “num2”
“num1” -ge “num2”
“num1” -le “num2”
“num1” -ne “num2”
逻辑测试: 用于连接多个测试条件,并返回整个表达式的值。
! expression
expression1 -a expression2 :同时为真 ===> 等同 &&
expression1 -0 expression2 :有一个为真 ====> 等同 ||
判断
if判断
if expression; then
command
fi
if expression; then
command
else
command
fi
if expression1; then
command1
else
if expression2; then
command2
else
command3
fi
fi
case判断
case VAR in
var1) command1 ;;
var2) command2 ;;
var3) command3 ;;
...
*) command ;;
esac
//case判断结构中的var1、var2、var3等这些值只能是常量或正则表达式。
for循环
带列表的for循环
for VARIABLE in (list)
do
command
done
将列表定义到一个变量中,以后有任何修改只需要修改该变量即可
fruits="apple orange banana pear"
for FRUIT in ${fruits}
do
echo "$FRUIT is John's favorite"
done
echo "No more fruits"
for VAR in {1..5}
do
echo "Loop $VAR times"
done
可以使用seq命令结合命令替换的方式生成列表
sum=0
for VAR in `seq 1 100`
#for VAR in $(seq 1 100)
do
let "sum+=VAR"
done
echo "Total: $sum"
//$(seq 1 2 100)
类C的for循环
for ((expression1; expression2; expression3))
do
command
done
for ((i=1; i<=10; i++))
do
echo -n "$i "
done
while循环
和for循环一样,while循环也是一种运行前测试语句
while expression
do
command
done
使用while按行读取文件
while read LINE
do
NAME=`echo $LINE | awk '{print $1}'`
AGE=`echo $LINE | awk '{print $2}'`
Sex=`echo $LINE | awk '{print $3}'`
echo "My name is $NAME, I'm $AGE years old, I'm a $Sex"
done
until expression
do
command
done
select MENU in (list)
do
command
done
当程序运行到select语句时,会自动将列表中的所有元素生成为可用1、2、3等数选择的列表,并等待用户输入。用户输入并回车后,select可判断输入并执行后续命令。
#省略关键字function效果一致
function FUNCTION_NAME(){
command1 #函数体中可以有多个语句,不允许有空语句
command2
...
}
# 函数调用 FUNCTION_NAME不需要加小括号
FUNCTION_NAME #调用函数
文件标识符是重定向中很重要的一个概念,Linux使用0到9的整数指明了与特定进程相关的数据流,系统在启动一个进程的同时会为该进程打开三个文件:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),分别用文件标识符0、1、2来标识。如果要为进程打开其他的输入输出,则需要从整数3开始标识。默认情况下,标准输入为键盘,标准输出和错误输出为显示器。
<,其中delimiter是一个用于标注的“分隔符”,该分隔符后所有的输入都被当作是输入的文本,直到出现下一个分隔符为止。
参考: 《Linux系统命令及Shell脚本实践指南》