文章目录
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"