总结常用的Linux命令~
实用技巧和工具 ssh自动登录 sshpass
1 sshpass -p 'password' /usr/bin/ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" root@192.168.1.8
1 alias loginroot1='sshpass -p ' password' /usr/bin/ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" root@192.168.1.1'
设置命令行的超时 timeout设置命令行的超时,如
网络流量查看 非UI环境下,实时查看网络流量nload,
通过↑↓
键切换设备。
实时查看进程流量nethogs,
目录查看和分析 Ubuntu系统下,有一个目录浏览的UI工具,
如果要分析目录的使用情况,baobab是不错的工具,
如果是命令行环境,推荐使用ncdu,例如
1 2 3 4 5 6 7 ncdu $HOME /desktop --- /desktop -------------------------------------------------------------------------------- 5.3 GiB [ 2.4 GiB [ 806.6 MiB [ 508.3 MiB [ ] /d
后台和系统 Target就是一个包含许多相关Unit的组
编写systemd配置文件,以sshd为例,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service Requires= Before= [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID Type=simple KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
systemd相关命令总结 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 systemctl enable ${service} systemctl disable ${service} systemctl stop ${service} systemctl start ${service} systemctl kill ${service} systemctl restart ${service} systemctl reload ${service} systemctl cat ${service} systemctl daemon-reload systemctl status ${service} systemctl list-dependencies ${service} systemctl list-unit-files systemctl list-unit-files --type =service systemctl list-units systemd-analyze blame hostnamectl localectl timedatectl loginctl list-users loginctl list-sessions
jobs 1 2 3 4 ping ${IP} Ctrl + Z jobs fg
进程相关 1 2 3 4 5 6 7 ps aux | sort -nk +4 | tail pstree nohup top htop iostat dstat
硬件或驱动程序的信息dmesg
t参数还可以取bios/system/baseboard/chassis/processor/memory/cache/connector/slot
调试与分析
/proc 目录中记录的整个操作系统的运行统计和信息
文件 通配符 命令行提供通配符(wildcards),类似bash中正则表达式的用法,可以简洁地表示复杂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ll ?.py ll *.py ls */*.py ll [xyz].py ll *[xyz].py ll [1-9].py ll [a-z].py ll [^xyz].py ll [!xyz].py ll [^x-z].py echo *.pyc echo {a,b,c} echo {a,b,c}xyz echo {a,b,c}{x,y,z} echo {{0..9},{a..z}} ll {x,y,z}.py echo {1..9}a echo {a..z}{1..9}
这里需要注意,[...]
如果无法匹配,会当做普通字符串,而{...}
无论如何也会展开。
ll *.py
会先被bash解析,进行匹配扩展如x
,然后再执行普通命令ll x.py
。
文件操作 1 2 3 4 5 6 7 8 9 touch ${file} > ${file} file -i $filename wc -lcd - cd ~ du -s * | sort -n | tail ldd ${file}
创建文件 1 2 3 dd if =/dev/zero of=${file} bs=10M count=100 dd if =/dev/zero of=${file} bs=1M count=0 seek=100
查找命令 1 2 3 4 5 6 7 8 9 10 find ${path} ${cond} ${act} find . -name '*.py' find . -type f -name "python" find . -type d -name "python" find . -ls -name '*.py' locate /etc/docker updatedb whereis ${program} which ${program} type ${program}
whereis vs which vs type
1 2 3 4 5 6 7 8 $ whereis docker docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz $ which docker /usr/bin/docker $ type docker docker 是 /usr/bin/docker $ type ll ll 是“ls -alF”的别名
apt包 1 2 3 4 5 6 7 8 9 apt install apt remove apt purge apt update apt upgrade apt autoremove apt full-upgrade apt search apt show
yum
文件防伪 1 2 3 md5sum ${file} sha1sum ${file} sha256sum ${file}
https://www.ruanyifeng.com/blog/2013/07/gpg.html
压缩与解压 网络操作 1 2 3 4 5 6 7 8 9 ifconfig -a netstat -a netstat -at netstat -au netstat -l netstat -lt netstat -lu netstat -lx netstat -tlnp
iproute2套装工具 1 2 3 4 5 6 7 8 ip addr ip link ip -s link ip addr add 192.168.0.193/24 dev wlan0 ip addr show wlan0 ip addr del 192.168.0.193/24 dev wlan0 ip route show
网络质量测试
网速测试、网络流量,
1 2 nload ${device} nethogs
1 2 3 4 5 nmap {IP} nmap -sn 192.168.1.0/24 traceroute ${address} mtr ${address} lsof -i
DNS有关的操作 1 2 3 4 cat /etc/resolv.conf( nmcli dev list || nmcli dev show ) 2>/dev/null | grep DNS systemd-resolve --status | grep DNS resolvectl dns ${device} 8.8.8.8
rsync rsyn同时支持本地和远程目录的增量同步 ,
1 2 3 4 5 6 7 8 9 sync -r ${source} ${destination} sync -a ${source} ${destination} sync -avn ${source} ${destination} rsync -av --delete ${source} ${destination} rsync -av --exclude='*.pyc' ${source} ${destination} rsync -av --exclude='__pycache__/*' ${source} ${destination} rsync -av --exclude={'*.pyc' ,'*.pyo' } ${source} ${destination} rsync -av -e 'ssh -p 8899' ${source} ${destination} rsync -av ${source} ${IP} ::${module} /${destination}
curl & wget curl用来请求Web服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 curl ${address} curl ifconfig.me curl --referer ${x_address} ${address} curl --user-agent ${UA} ${address} curl --user name:password ${address} curl --header "Content-Type:application/json" ${address} curl --cookie "${key} =${value} " ${address} curl -c ${file} ${address} curl -b ${file} ${address} curl -o ${file} ${address} curl -i ${address} curl -V ${address} curl -L ${address} curl --trace ${file} ${address} curl ${address} ?a=b curl -X POST --data "${key} =${value} " ${address}
如果不想用命令行,Postman是推荐的UI工具。
ssh相关 ssh登录过程:
服务器收到用户的登录请求,其把自己的公钥发给用户
用户收到公钥后,将登录密码使用公钥加密后,发送到服务器
服务器用自己的私钥,解密用户的登录密码,验证密码通过,用户登录成功
这个过程有中间人攻击风险,攻击者冒充服务器,伪造假的公钥发送给用户,用户无法辨别公钥真伪,攻击者进而接管登录过程,获取用户密码。因此,使用公钥指纹来辨别公钥的所有者是一种简单的用法。只需要服务器的所有者公开公钥的指纹即可。
1 2 3 4 5 6 7 8 ssh ${user} @${host} ssh -l ${user} ${host} ssh -p ${port} ${user} @${host} tar czv src | ssh user@host 'tar xz' ssh user@host 'tar cz src' | tar xzv ssh user@host 'ps ax | grep [h]ttpd' ssh user@host cat /path/to/remotefile | diff /path/to/localfile - ssh user@server bash < /path/to/local/script.sh
为避免每次登录服务器进行的公钥验证,用户可以使用公钥登录:
用户首次登录将自己的公钥储存到服务器上
下次登录的时候,服务器向用户发送一段随机字符串,用户用自己的私钥加密后该字符串,再发回来服务器
远程主机用已经储存的公钥进行解密,验证随机字符串是否匹配,匹配就证明用户是可信,于是登录成功
1 2 3 4 ssh-keygen ssh-copy-id ${user} @${host} ssh-keygen -R ${hostname} ssh-keygen -l -f ${key} .pub
避免SSH连接超时而断开或卡死,
1 2 3 4 5 cat /etc/ssh/ssh_config ServerAliveInterval 60 cat /etc/ssh/sshd_config ClientAliveInterval 60
端口转发
1 2 ssh -D ${port} ${user} @${host} ssh -L ${local_port} :${target_host} :${target_port} ${forward_host}
远程端口转发
限制sshd的登录IP地址的方法
在/etc/hosts.allow
添加如下项目,
1 sshd: ${your_address} :allow
可以允许${your_address}
登录。
在/etc/hosts.deny
输入
1 sshd: ${your_deny_address}
于是,可以限制登录${your_deny_address}
地址
如果两个文件的配置有冲突,以/etc/hosts.deny
为准
日志和数据处理 1 2 3 4 5 6 tail -f /var/log/xx/yy.logcat ${file} nl ${file} tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q' sort uniq
awk awk用于处理文本文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 awk ${act} ${file} awk ${cond act} ${file} echo ${string} | awk ${act} echo ${file} | awk ${act} echo 'a b c' | awk '{print $0}' echo 'a b c' | awk '{print $1}' echo 'a b c' | awk '{print $NF}' echo 'a b c' | awk '{print $(NF-1)}' echo 'a:b:c' | awk -F ':' '{print $1}' echo 'a:b:c' | awk -F ':' '{print $1}{print $2}' echo 'a:b:c' | awk -F ':' '{print $1, $2}' echo 'a:b:c' | awk -F ':' '{print $1 $2}' echo 'A B C' | awk '{print tolower($1)}' cat *.py | awk '/import/ {print $2}' history |awk '{print $2}' | awk 'BEGIN {FS="|"} {print $1}' |sort |uniq -c|sort -rn|head -10
NR变量表示输出的行序号,从1开始计数
1 2 3 4 5 6 7 8 9 10 11 $ ps -aux | head | awk '{print NR "-" $2}' 1-PID 2-1 3-2 4-3 5-4 6-6 7-9 8-10 9-11 10-12
sed sed是流编辑器,比awk出现早几年。
总结 转载请包括本文地址:https://allenwind.github.io/blog/6329 更多文章请参考:https://allenwind.github.io/blog/archives/