Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件

1.查看系统版本

以下都是通用命令:
在Debian系统上的执行结果:

-> # uname -a
Linux VM-73-203-debian 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) x86_64 GNU/Linux
-> # cat /proc/version
Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13)
-> # cat /etc/*release*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

在centos上的执行结果:

root@:/data3/# uname -a
Linux .site 3.10.107-1-tlinux2-0046 #1 SMP Tue Dec 26 16:16:57 CST 2017 x86_64 x86_64 x86_64 GNU/Linux
root@:/data3/# cat /proc/version
Linux version 3.10.107-1-tlinux2-0046 (root@.site) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Tue Dec 26 16:16:57 CST 2017
root@:/data3/# cat /etc/*release*
CentOS Linux release 7.2 (Final)
NAME=" linux"
VERSION="2.2 (Final)"
ID="linux"
ID_LIKE="rhel fedora centos"
VERSION_ID="2.2"
PRETTY_NAME=" linux 2.2 (Final)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:linux:linux:2"
HOME_URL="http://linux.com/"
BUG_REPORT_URL="http://.com/linux/bugtrace/bugreports/my_view/"

CentOS Linux release 7.2 (Final)
 linux release 2.2 (Final)
cpe:/o:linux:linux:2:GA
 linux release 2.2 (Final)

2.显示目录的大小

网址:ls - How do I get the size of a directory on the command line? - Unix & Linux Stack Exchange

-> # du -sh /root    
14G /root

参数含义:

  -s, --summarize
         display only a total for each argument

  -h, --human-readable
         print sizes in human readable format (e.g., 1K 234M 2G)

如果你想更方便,可以使用ncdu,非常好用:

ncdu

使用方法:

ncdu /

3.查看硬盘是HDD还是SSD

在Linux下查看硬盘是固态硬盘还是机械硬盘
参考网址:linux - How to know if a disk is an SSD or an HDD - Unix & Linux Stack Exchange
通用方法:

root@:/data1# lsblk -o NAME,ROTA      
NAME    ROTA
sda        0
|-sda1     0
|-sda2     0
|-sda3     0
`-sda4     0
nvme0n1    0
nvme1n1    0
nvme2n1    0
nvme3n1    0

0的意思是没有转速的硬盘,也就是SSD,
1表示机械硬盘。

其实很多时候,我们不在意是SSD还是HDD,只要速度够快就行,测速代码:

time for i in `seq 1 1000`; do
    dd bs=4k if=/dev/sda1 count=1 skip=$(( $RANDOM * 128 )) >/dev/null 2>&1;
done

SSD结果如下:

real    0m0.754s
user    0m0.052s
sys 0m0.100s

HDD结果如下:

real    0m14.249s
user    0m0.752s
sys     0m6.284s

4.硬盘测速

既然提到了硬盘,那就要提到如何给硬盘测速。
参考文章:Disk Speed Test (Read/Write): HDD, SSD Performance in Linux - ShellHacks
先测写:

-> # sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.59688 s, 299 MB/s

然后测读取速度,记得先清空缓存:

-> # sudo /sbin/sysctl -w vm.drop_caches=3                    
vm.drop_caches = 3
-> # dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.05339 s, 1.0 GB/s

更专业的做法是使用hdparm:

apt install hdparm
hdparm -Tt /dev/sda

5.在ssh的时候自动输入密码

警告:不推荐自动输入密码,有条件的可以使用 ssh key实现自动认证,参考网址:How to automate SSH login with password? - Server Fault
如果想要实现在ssh的时候自动输入密码,那么你需要实现shell的自动交互。
你可以用perl,ruby,Python实现交互。
原先我都是使用Python进行交互的,现在想到使用shell的交互工具。
参考网址:How to enter ssh password using bash? - Stack Overflow

需要先安装:

apt-get install expect

然后写脚本:

#!/usr/bin/expect -f
spawn ssh user@my.server.com
expect "assword:"
send "mypassword\r"
interact

6.查看程序的内存使用情况

有时候我们需要查看一个进程的内存使用情况,但如果有多线程存在,那么在top或者htop中的内存使用情况是不准确的。
参考:linux - How to measure actual memory usage of an application or process? - Stack Overflow
使用pmap进行查看:

pmap -x <process pid>
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000  137956   12604       0 r-x-- clickhouse
0000000008aba000     152      96       4 r-x-- clickhouse
0000000008ae0000     104      68      36 rwx-- clickhouse
...............
00007f3c5762d000       4       4       4 rwx--   [ anon ]
00007ffeedc86000     132      48      48 rwx--   [ stack ]
00007ffeedd9c000       8       4       0 r-x--   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- ------- 
total kB         4921884 1068388 1054568

这里有几个参数:RSS, Dirty,Mode,Mapping。
参考:pmap(1): report memory map of process - Linux man page

RSS是驻留集大小,用于显示分配给该进程的内存量,并且位于RAM中。它不包括换出的内存。它确实包括来自共享库的内存,只要这些库中的页面实际上在内存中。它确实包括所有堆栈和堆内存。

VSZ是虚拟内存大小。它包括进程可以访问的所有内存,包括被换出的内存,已分配但未使用的内存以及来自共享库的内存。
更多内容参考:What is RSS and VSZ in Linux memory management - Stack Overflow
脏: 脏页(共享和私有),以千字节为单位
模式: map的权限:读取,写入,执行,共享,私有(写入时复制)
mapping: 支持映射的文件,或者用于分配内存的’[anon]’,或用于程序堆栈的’[stack]’

另外一个解决方法是查看/proc/$pid/status:

root@:/data4/data/test/app_pv_13# cat /proc/20863/status
Name:   clickhouse-serv
NStgid: 20863
NSpid:  20863
NSsid:  5818
State:  S (sleeping)
FDSize: 256
VmPeak:  4921880 kB
VmSize:  4921880 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:   1076732 kB
VmRSS:   1054856 kB
VmData:  4766592 kB
VmStk:       132 kB
VmExe:    115836 kB
VmLib:     25888 kB
VmPTE:      3388 kB
VmSwap:        0 kB
Threads:        45

最重要的是VmSize,就是程序使用的内存大小??

7.查看I/O的速度

参考:linux - Howto check disk I/O utilisation per process - Server Fault
你可以使用iotop命令查看实时的I/O速度,或者如下命令:
含义是每20秒使用此命令打印每个进程的累积io统计信息

pidstat -dl 20

8.查看ssh密码错误日志,并防止暴力破解

参考:security - How do I keep track of failed SSH log-in attempts? - Ask Ubuntu
在Ubuntu/Debian系统上查看ssh登录失败日志:

grep sshd.\*Failed /var/log/auth.log | less

在我的机器上有4000多条别人的尝试记录。
解决方法很简单,安装fail2ban:

apt install fail2ban

默认情况下,只要有人尝试三次失败,他们的IP就会被禁止五分钟。

9.查找文件

我一般喜欢用locate查找文件:

updatedb
locate test.cpp

但有时系统没装,那么只能用find:

find / -name "test.cpp"
发布了502 篇原创文章 · 获赞 145 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/zhangpeterx/article/details/96279648