Linux 命令大全 =菜鸟教程
linux命令手册
Linux学习笔记.pdf
查看系统版本命令
查看服务器品牌
grep 'DMI' /var/log/dmesg
dmidecode |grep -A4 'System Information'
uname
谈到系统版本就一定会想到 uname,查看系统内核版本
uname - 参数
其他的什么 - n -m -r 参数都忽略,直接 - a
[root@linuxprobe ~]#uname -a
Linux linuxprobe.com 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@linuxprobe ~]#
从 uname 中貌似确实看到了许多信息,但是好像并不是我想要的,没有哪个系统的哪个版本
lsb_release -a
[root@linuxprobe ~]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 6.4 (Santiago)
Release: 6.4
Codename: Santiago
[root@linuxprobe ~]#
cat /etc/issue
[root@linuxprobe ~]#cat /etc/issue
Red Hat Enterprise Linux Server release 6.4 (Santiago)
Kernel \r on an \m
[root@linuxprobe ~]#
查看内存相关
free
一谈到 Linux 的内存就想到了一个命令 free,在课本第 2 章 新手必须掌握的 Linux 命令中有对此的解释
[root@linuxprobe ~]# free
total used free shared buffers cached
Mem: 5228872 669360 4559512 0 28060 266936
-/+ buffers/cache: 374364 4854508
Swap: 4194296 0 4194296
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 5106 653 4452 0 27 260
-/+ buffers/cache: 365 4740
Swap: 4095 0 4095
[root@linuxprobe ~]# free -g
total used free shared buffers cached
Mem: 4 0 4 0 0 0
-/+ buffers/cache: 0 4
Swap: 3 0 3
[root@linuxprobe ~]#
很明显内存大小,使用多少,剩余多少,buffers 和 cached 多少,以及 swap 情况一目了然,使用参数 - m/-g 可以指定单位
查看 cpu 相关
uptime
[root@linuxprobe ~]# uptime
20:09:48 up 43 min, 3 users, load average: 0.35, 0.25, 0.11 // 系统的平均负载,1 分钟,5 分钟,15 分钟
top
实时监控系统的 cpu 和内存,默认 3s 刷新一次
[root@linuxprobe ~]# top
top - 20:15:41 up 49 min, 3 users, load average: 0.41, 0.38, 0.21
Tasks: 236 total, 1 running, 235 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.5%sy, 0.0%ni, 98.8%id, 0.5%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 5228872k total, 671136k used, 4557736k free, 28324k buffers
Swap: 4194296k total, 0k used, 4194296k free, 267360k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19360 1536 1224 S 0.0 0.0 0:05.37 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.07 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.14 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.69 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
9 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
11 root RT 0 0 0 0 S 0.0 0.0 0:00.10 migration/2
12 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/2
13 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/2
14 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/2
15 root RT 0 0 0 0 S 0.0 0.0 0:00.17 migration/3
16 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/3
17 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/3
18 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/3
19 root 20 0 0 0 0 S 0.0 0.0 0:00.41 events/0
cpu 内存实时利用率以此为标准
查看 cpu 参数——文件 :/proc/cpuinfo
[root@linuxprobe ~]# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
2 //cpu 个数
[root@linuxprobe ~]# cat /proc/cpuinfo | grep "cpu cores" | uniq
cpu cores : 2 // 线程数
[root@linuxprobe ~]# cat /proc/cpuinfo | grep 'model name' |uniq
model name : Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
//cpu 型号参数
查看硬盘相关
df
[root@linuxprobe ~]# df
文件系统 1K - 块 已用 可用 已用 % 挂载点
/dev/sda2 41284928 469040 38718736 2% /
tmpfs 2614436 224 2614212 1% /dev/shm
/dev/sda1 99150 32504 61526 35% /boot
/dev/sda6 516040 18016 471812 4% /home
/dev/sda3 4128448 2542976 1375760 65% /usr
[root@linuxprobe ~]# df -h // 以简单的看得懂的方式显示
文件系统 容量 已用 可用 已用 %% 挂载点
/dev/sda2 40G 459M 37G 2% /
tmpfs 2.5G 224K 2.5G 1% /dev/shm
/dev/sda1 97M 32M 61M 35% /boot
/dev/sda6 504M 18M 461M 4% /home
/dev/sda3 4.0G 2.5G 1.4G 65% /usr
fdisk -l
[root@linuxprobe ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f0739
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 13 5235 41943040 83 Linux
/dev/sda3 5235 5757 4194304 83 Linux
/dev/sda4 5757 13055 58616832 5 Extended
/dev/sda5 5757 6280 4194304 82 Linux swap / Solaris
/dev/sda6 6280 6345 524288 83 Linux
[root@linuxprobe ~]# fdisk -l | grep Disk
Disk /dev/sda: 107.4 GB, 107374182400 bytes
Disk identifier: 0x000f0739
[root@linuxprobe ~]#
iostat 查看硬盘读写速度
[root@linuxprobe ~]# iostat -t 1 3 //1s 一次,查看 3 次
Linux 2.6.32-358.el6.x86_64 (twj.baidu.com) 2016 年 06 月 07 日 _x86_64_ (4 CPU)
2016 年 06 月 07 日 20 时 40 分 03 秒
avg-cpu: %user %nice %system %iowait %steal %idle
0.17 0.06 0.74 0.84 0.00 98.19
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 8.34 273.82 136.61 1216528 606904
2016 年 06 月 07 日 20 时 40 分 04 秒
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 2.10 9.97 13.12 0.00 74.80
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 89.00 3472.00 11208.00 3472 11208
2016 年 06 月 07 日 20 时 40 分 05 秒
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 1.99 14.35 9.05 0.00 74.61
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 66.13 1464.52 9800.00 1816 12152
https://www.linuxprobe.com/linux-cat-system.html
查看selinux状态
查看selinux的详细状态,如果为enable则表示为开启
/usr/sbin/sestatus -v
getenforce
permissive模式(即关闭)
enforcing模式(即开启)
端口占用情况
系统级
服务级
网路状态
netstat
用法介绍
Linux netstat 命令用于显示网络状态。
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][—ip]
参数说明:
- -a或—all 显示所有连线中的Socket。
- -A<网络类型>或—<网络类型> 列出该网络类型连线中的相关地址。
- -c或—continuous 持续列出网络状态。
- -C或—cache 显示路由器配置的快取信息。
- -e或—extend 显示网络其他相关信息。
- -F或—fib 显示路由缓存。
- -g或—groups 显示多重广播功能群组组员名单。
- -h或—help 在线帮助。
- -i或—interfaces 显示网络界面信息表单。
- -l或—listening 显示监控中的服务器的Socket。
- -M或—masquerade 显示伪装的网络连线。
- -n或—numeric 直接使用IP地址,而不通过域名服务器。
- -N或—netlink或—symbolic 显示网络硬件外围设备的符号连接名称。
- -o或—timers 显示计时器。
- -p或—programs 显示正在使用Socket的程序识别码和程序名称。
- -r或—route 显示Routing Table。
- -s或—statistics 显示网络工作信息统计表。
- -t或—tcp 显示TCP传输协议的连线状况。
- -u或—udp 显示UDP传输协议的连线状况。
- -v或—verbose 显示指令执行过程。
- -V或—version 显示版本信息。
- -w或—raw 显示RAW传输协议的连线状况。
- -x或—unix 此参数的效果和指定”-A unix”参数相同。
- —ip或—inet 此参数的效果和指定”-A inet”参数相同。
输出内容详解
列出所有 tcp与udp 端口
Proto:协议名(tcp协议还是udp协议)netstat -tulnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1904/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1750/cupsd
tcp 0 0 0.0.0.0:44567 0.0.0.0:* LISTEN 1713/rpc.statd
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1965/zabbix_agentd
tcp 0 0 172.172.230.211:3306 0.0.0.0:* LISTEN 31849/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1576/rpcbind
tcp 0 0 172.172.230.211:46327 172.172.100.3:80 TIME_WAIT -
tcp 0 0 172.172.230.211:46329 172.172.100.3:80 TIME_WAIT -
tcp 0 52 172.172.230.211:22 172.172.173.222:50043 ESTABLISHED 6095/sshd
tcp 0 0 172.172.230.211:46326 172.172.100.3:80 TIME_WAIT -
tcp 0 0 172.172.230.211:5401 172.172.100.3:443 TIME_WAIT -
tcp 0 0 :::22 :::* LISTEN 1904/sshd
tcp 0 0 ::1:631 :::* LISTEN 1750/cupsd
tcp 0 0 :::11776 :::* LISTEN 1713/rpc.statd
tcp 0 0 :::10050 :::* LISTEN 1965/zabbix_agentd
tcp 0 0 :::111 :::* LISTEN 1576/rpcbind
recv-Q:网络接收队列
表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
send-Q:网路发送队列
对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
从步骤一的结果中可以看到22端口对应的链路的 send-Q中堆积了大量的数据包 ,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。
Local Address
1)Local Address 部分的0.0.0.0:22 表示监听服务器上所有ip地址的所有(0.0.0.0表示本地所有ip),比如你的服务器是有172.172.230.210和
172.172.230.11两个ip地址,那么0.0.0.0:22此时表示监听172.172.230.210,172.172.230.211,127.0.0.1三个地址的22端口
2):::22 这个也表示监听本地所有ip的22端口,跟上面的区别是这里表示的是IPv6地址,上面的0.0.0.0表示的是本地所有IPv4地址
NOTE
“:::” 这三个: 的前两个”::”,是”0:0:0:0:0:0:0:0”的缩写,相当于IPv6的”0.0.0.0”,就是本机的所有IPv6地址,第三个:是IP和端口的分隔符
3)127.0.0.1:631 这个表示监听本机的loopback地址的631端口(如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问)
4)::1:631 这个表示监听IPv6的回环地址的631端口,::1这个表示IPv6的loopback地址
5)172.172.230.211:3306 这里我们看到我们的mysqld进程监听的是172.172.230.211的3306端口,这是因为我们在启动的时候指定了bind_address=172.172.230.211参数,如果不指定bind_address的话,mysqld默认监听:::3306(本机所有ip地址的3306端口 -IPv6)
Foreign Address
与本机端口通信的外部socket。显示规则与Local Address相同
State
链路状态,共有11种
state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。
状态 | 描述 |
---|---|
LISTEN | 首先服务端需要打开一个socket进行监听,状态为LISTEN. The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 |
SYN_SENT | 客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 |
SYN_RECV | 服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 |
ESTABLISHED | 代表一个打开的连接,双方可以进行或已经在数据交互了。 The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 |
FIN_WAIT1 | 主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态./* The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 |
CLOSE_WAIT | 被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT. The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 |
FIN_WAIT2 | 主动关闭端接到ACK后,就进入了 FIN-WAIT-2 . Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 |
LAST_ACK | 被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 |
TIME_WAIT | 在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。 The socket is waiting after close to handle packets still in the network. 等待足够的时间以确保远程TCP接收到连接中断请求的确认 |
CLOSING | 比较少见. Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 |
CLOSED | 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束. The socket is not being used. 没有任何连接状态 |
UNKNOWN | 未知的Socket状态。The state of the socket is unknown. |
备注
SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。
PID/Program
PID即进程id,Program即使用该socket的应用程序
ping
ping 的用法
Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 …] destination
Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-l preload] [-m mark] [-M pmtudisc_option]
[-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
[-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
[-W timeout] destination
参数详解
参数 | 详解 |
---|---|
-a | Audible ping. |
-A | 自适应ping,根据ping包往返时间确定ping的速度; |
-b | 允许ping一个广播地址; |
-B | 不允许ping改变包头的源地址; |
-c count | ping指定次数后停止ping; |
-d | 使用Socket的SO_DEBUG功能; |
-F flow_label | 为ping回显请求分配一个20位的“flow label”,如果未设置,内核会为ping随机分配; |
-f | 极限检测,快速连续ping一台主机,ping的速度达到100次每秒; |
-i interval | 设定间隔几秒发送一个ping包,默认一秒ping一次; |
-I interface | 指定网卡接口、或指定的本机地址送出数据包; |
-l preload | 设置在送出要求信息之前,先行发出的数据包; |
-L | 抑制组播报文回送,只适用于ping的目标为一个组播地址 |
-n | 不要将ip地址转换成主机名; |
-p pattern | 指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”; |
-q | 不显示任何传送封包的信息,只显示最后的结果 |
-Q tos | 设置Qos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档; |
-R | 记录ping的路由过程(IPv4 only); 注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略; |
-r | 忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。 |
-S sndbuf | Set socket sndbuf. If not specified, it is selected to buffer not more than one packet. |
-s packetsize | 指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节; 包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500); |
-t ttl | 设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃之前允许通过的最大网段数; |
-T timestamp_option | 设置IP timestamp选项,可以是下面的任何一个: ‘tsonly’ (only timestamps) ‘tsandaddr’ (timestamps and addresses) ‘tsprespec host1 [host2 [host3]]’ (timestamp prespecified hops). |
-M hint | 设置MTU(最大传输单元)分片策略。 可设置为: ‘do’:禁止分片,即使包被丢弃; ‘want’:当包过大时分片; ‘dont’:不设置分片标志(DF flag); |
-m mark | 设置mark; |
-v | 使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包; |
-U | Print full user-to-user latency (the old behaviour). Normally ping prints network round trip time, which can be different f.e. due to DNS failures. |
-W timeout | 以毫秒为单位设置ping的超时时间; |
-w deadline | deadline; |
输出格式:
下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:
① ping目标主机的域名和IP(ping会自动将域名转换为IP)
② 不带包头的包大小和带包头的包大小(参考“-s”参数)
③ icmp_seq:ping序列,从1开始;
ttl:剩余的ttl;
time: 响应时间,数值越小,联通速度越快;
④ 发出去的包数,返回的包数,丢包率,耗费时间;
⑤ 最小/最大/平均响应时间和本机硬件耗费时间;
文件传输
1. sftp
Secure Ftp 是一个基于SSH安全协议的文件传输管理工具。由于它是基于SSH的,会在传输过程中对用户的密码、数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性。在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作)。Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的。因此不能用sftp client去连接ftp server 也不能用 ftp client 去连接 sftp server。
简单的命令如下
建立连接:sftp user@host
从本地上传文件:put localpath
下载文件:get remotepath
切换远程目录:cd
显示远程工作目录:pwd
建立远程目录:mkdir
与远程相对应的本地操作,只需要在命令前加上”l” 即可,方便好记。
如:lcd l pwd l mkdir
2. scp
SCP :secure copy (remote file copy program) 也是一个基于SSH安全协议的文件传输命令。与sftp不同的是,它只提供主机间的文件传输功能,没有文件管理的功能。
简单的命令如下
复制local_file 到远程目录remote_folder下
scp local_file remote_user@host:remote_folder
复制local_folder 到远程remote_folder(需要加参数 -r 递归)
scp –r local_folder remote_user@host:remote_folder
以上命令反过来写就是远程复制到本地
3. scp sftp区别
SCP比较简单,是轻量级的,SFTP的功能则比较多
SFTP在文件传输过程中中断的话,连接后还可以继续传输,但SCP不行
4. sz/rz
sz/rz 是基于ZModem传输协议的命令。对传输的数据会进行核查,并且有很好的传输性能。使用起来更是非常方便,但前提是window端需要有能够支持ZModem的telnet或者SSH客户端,例如secureCRT。
首先需要在secureCRT中可以配置相关的本地下载和上传目录,然后用rz、sz命令即可方便的传输文件数据。
下载数据到本地下载目录:sz filename1 filename2 …
上传数据到远程:执行rz –be 命令,客户端会弹出上传窗口,用户自行选择(可多选)要上传的文件即可。
sz 命令,保存文件**到windows
文件分割:
split
split [OPTION]… [FILE [PREFIX]]
-b: 按大小分割
-l:按行分割,上面表示将urls.txt文件按2000行一个文件分割为多个文件
-d:添加数字后缀,比如上图中的00,01,02…默认为 aa ,ab,ac…
-a 2:表示用两位数据来顺序命名