免密登录配置 #
生成公钥、私钥
ssh-keygen -t rsa
写入公钥配置文件,不能省略
cat id_rsa.pub >> authorized_keys
Xshell 选择Public key,导入id_rsa 文件
VSCode 设置
Host 192.168.8.2
HostName 192.168.8.2
User root
PreferredAuthentications publickey
IdentityFile "C:/Users/X/Desktop/App/id_rsa"
btop 安装 #
git clone https://gitee.com/mirrors/btop.git
make && make install
查看本地DNS服务器地址 #
# systemd-resolve --status | grep 'DNS Servers'
DNS Servers: 192.168.8.101
查看服务器的公网 IP 地址 #
curl ifconfig.me
curl ifconfig.io
查询指定域名 #
# nslookup www.baidu.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 182.61.200.6
Name: www.a.shifen.com
Address: 182.61.200.7
Windows ping IP Address #
PS C:\WINDOWS\system32> Test-NetConnection xx.yy.com
ComputerName : xx.yy.com
RemoteAddress : 192.168.8.43
InterfaceAlias : Ethernet
SourceAddress : 10.1.4.2
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
Linux IO 实践 #
$$ 当前进程
# cd /proc/$$/fd
dr-x------ 2 root root 0 Oct 7 08:54 ./
dr-xr-xr-x 9 root root 0 Oct 7 08:54 ../
lrwx------ 1 root root 64 Oct 7 08:54 0 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:54 1 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:54 2 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:55 255 -> /dev/pts/17
创建进程
# exec 8<> /dev/tcp/www.baidu.com/80
dr-x------ 2 root root 0 Oct 7 08:54 ./
dr-xr-xr-x 9 root root 0 Oct 7 08:54 ../
lrwx------ 1 root root 64 Oct 7 08:54 0 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:54 1 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:54 2 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:55 255 -> /dev/pts/17
lrwx------ 1 root root 64 Oct 7 08:54 8 -> 'socket:[237040623]'
echo -e 'GET / HTTP/1.0\n\n' >& 8
标准输出重定向到8
cat <& 8
kill -9无法杀死一般因为是僵尸进程 #
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为
stat(状态),ppid(进程父id), pid(进程id),cmd(命令),这四个参数
因为状态为 z或者Z的进程为僵尸进程,所以使用grep抓取stat状态为zZ进程
Query process for using multiple swap memory #
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
# 81667 371.781M
# 81818 371.703M
# 1849767 281.137M
# ps aux | grep ${pid}
Detail:
cd /proc:将当前目录更改为 /proc 目录。
ls:列出当前目录中的所有文件和目录。
grep "^[0-9]":过滤掉所有不以数字开头的文件和目录。
awk ' $0 >100':过滤掉数字小于 100 的文件和目录。
for i in $(...) ;do ... ; done:循环处理每个符合前面条件的文件或目录。
awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null:对于每个文件或目录,使用 awk 在 /proc/$i/smaps 文件中搜索包含 "Swap:" 的行。然后将匹配行的第二列值相加,并输出进程 ID ($i) 和该进程使用的总交换内存大小(以兆字节为单位)。
2>/dev/null:将任何错误消息重定向到 /dev/null(一个特殊的文件,可以丢弃所有输出)。
sort -k2nr:按第二列的值以逆数值顺序排序输出。
head -10:仅显示输出的前 10 行(即使用交换内存最多的前 10 个进程)。
ps aux:列出当前正在运行的所有进程的详细信息。
|:管道符,将 ps aux 命令的输出结果传递给 grep 命令。
grep ${pid}:过滤出包含指定 ${pid} 的行。
当前登录用户信息 #
root@kiga:/home/kiga/test# who
root pts/0 2024-06-20 03:06 (10.1.2.89)
查看登录失败的尝试 #
# Debian/Ubuntu 系统
grep 'Failed' /var/log/auth.log
# RedHat/CentOS 系统
grep 'Failed' /var/log/secure
root@kiga:/home/kiga/test# grep ‘Failed’ /var/log/auth.log Jun 17 10:04:14 kiga sshd[1265007]: Failed password for root from 192.168.8.244 port 38640 ssh2 Jun 17 10:04:19 kiga sshd[1265007]: Failed password for root from 192.168.8.244 port 38640 ssh2 Jun 18 08:53:51 kiga sshd[1428484]: Failed password for root from 192.168.8.244 port 51134 ssh2 Jun 20 03:05:54 kiga sshd[1737950]: Failed password for kiga from 10.1.2.47 port 61574 ssh2
最后一次登录信息 #
lastlog 命令显示系统中所有用户的最后一次登录信息。
root@kiga:/home/kiga/test# last
root pts/0 10.1.2.89 Thu Jun 20 03:06 still logged in
root pts/1 192.168.8.244 Tue Jun 18 08:55 - 08:55 (00:00)
kiga pts/1 192.168.8.244 Tue Jun 18 08:54 - 08:55 (00:00)
kiga pts/0 10.1.2.51 Tue Jun 18 03:16 - 11:30 (08:13)
kiga pts/0 10.1.2.51 Tue Jun 18 01:25 - 03:16 (01:51)
kiga pts/1 192.168.8.244 Mon Jun 17 10:04 - 12:18 (02:14)
kiga pts/0 10.1.2.51 Mon Jun 17 09:41 - 12:08 (02:26)
kiga pts/2 10.1.2.47 Thu Jun 13 08:09 - 09:27 (01:17)
kiga pts/1 10.1.2.51 Thu Jun 13 08:02 - 12:00 (03:58)
kiga pts/0 10.1.2.47 Thu Jun 13 08:00 - 01:59 (3+17:59)