欢迎访问我的博客,你的支持,是我最大的动力!

Linux常用命令,持续添加中

Linux 小马奔腾 9753℃ 评论
目录:
[显示]

这里记录经常要用到的linux命令,随用随记,没有顺序

强制踢用户下线

2018-03-22更新

who      #获取用户登录的终端
pkill -kill -t pts/0
免密码登录

2018-03-22更新

ssh-keygen   #在本地生成key
ssh-copy-id username@192.168.1.123      #将认证文件上传到欲登录的主机和指定登录用户,该过程需要输入一次密码
ssh username@192.168.1.123     #验证
查看rpm包的安装脚本

2018-03-22更新

rpm -qpl <rpm file name>   #查看安装包包含的文件列表
rpm -qp --scripts <rpm file name>
%pre rpm安装前执行的脚本
%post rpm安装后执行的脚本
%preun rpm卸载前执行的脚本
%postun rpm卸载后执行的脚本
preinstall scriptlet (using /bin/sh)::安装前执行脚本
postinstall scriptlet (using /bin/sh)::安装后执行脚本
preuninstall scriptlet (using /bin/sh)::卸载前执行脚本
postuninstall scriptlet (using /bin/sh)::卸载后执行脚本
scp限速复制

2018-03-27更新

scp -l 20000 /tmp/* user@192.168.1.1:/mnt/file/
将本地/tmp目录下所有文件复制到远程主机192.168.1.1的/mnt/file目录下,限制复制速度为20000Kbit/s(约2.44MB/s)
防止将生产服务器带宽跑满,影响业务
shell日期处理

2018-03-29更新

date +"%Y.%m.%d"  #格式化显示当天时间
2018.03.29
date +%Y%m%d-%H%M%S   #年月日时分秒
20180329-180607
date --date='3 day ago' +"%Y.%m.%d"    #格式化显示3天前时间
2018.03.26
curl相关

2018-03-29更新

curl -XGET 'http://localhost:9200/_count?pretty' -d '{"query":{"match_all":{}}}'
elasticsearch查询命令的结构
curl -XDELETE http://localhost:9200/logstash-$(date --date='3 day ago' +'%Y.%m.%d')
删除es中3天前的那个索引
curl -o /dev/null -s -XDELETE http://localhost:9200/logstash-$(date --date='3 day ago' +'%Y.%m.%d')
删除es中3天前的那个索引,完全静默模式,无输出
curl -o /dev/null -s -w '%{http_code}\n' "http://www.baidu.com"
200
检查站点可用性
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" "http://www.baidu.com"
time_connect: 0.296
time_starttransfer: 0.334
time_total: 0.334
监控网页的响应时间
ldconfig命令_动态库注册

2018-04-08更新

/sbin/ldconfig用于注册动态库。扫描的路径配置于/etc/ld.so.conf,默认包括/libx32、/usr/lib、/usr/lib64、/lib、/lib6,从而创建动态装入程序所需的连接和缓存文件,缓存文件默认为/etc/ld.so.cache,此文件保存排好序的动态链接库名字列表
ldconfig
ldconfig -v
注意:向/lib、/usr/lib等默认目录加东西,不需要修改ld.so.conf,但要调一下ldconfig,否则这个库会找不到
向非默认目录添加动态库时,需要修改ld.so.conf文件,添加新增的路径(临时也可以export全局变量LD_LIBRARY_PATH)
ldconfig只与运行程序时有关,和编译没有关系
库文件头中含有库名相关信息,所以修改文件名冒充其它库是行不通的
ssh端口转发
目标:将发往本机192.168.1.50 80端口访问转发到192.168.1.77的80端口
ssh -p 22 -C -f -N -g -L 80:192.168.1.77:80 root@192.168.1.77
ssh -p 22 -C -f -N -g -L 127.0.0.1:80:0.0.0.0:80 root@192.168.1.77  # 本地监听地址:本地端口:远端监听地址:远端端口  可以为127.0.0.0
在对端会有一个/usr/sbin/sshd的子进程 sshd: root

效果:访问192.168.1.50:80则真实是访问192.168.1.77:80
参数:
-p 22 指定远程服务器上的端口
-C 允许数据压缩
-f 建立成功后在后台运行
-N 不执行远程指令
-g 允许远程主机连接主机的转发端口
-L 80:192.168.1.77:80 将本机80端口转发到远端192.168.1.77的指定端口80
ssh socks5代理

2019-09-29更新

 

ssh -f -C2qTnN -D 5000 root@xxx.xxx.xxx.xxx
# 建议设置为密钥认证 免密码输入
-f 后台模式,在后台运行
-C 使用压缩
-2 强制使用 ssh协议第2版
-q 静默模式
-T 禁止分配伪终端
-n 重定向stdin到/dev/null
-N 不执行远程脚本或命令,仅仅做端口转发,常与-f连用

-D socks5代理

-L 建立本地SSH隧道
-R 建立远程SSH隧道

 

ssh tun vpn隧道

2019-09-29更新

 

在remote端可能需要打开这些
/etc/ssh/sshd_config
AllowTcpForwarding yes
PermitTunnel yes
echo 1 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/sshd restart

On the client:
所属网络为 172.16.0.0/24
yum install tunctl
tunctl -n             # 创建tun接口 默认为tun0
tunctl -t tun3 -n # 创建名为tun3的tun接口
tunctl -d tun0     # 删除名为tun0的tun接口
ssh -p22 -f -w 0:1 192.168.0.100 true    # -w 本端tun:远端tun
# ip tuntap add dev tun0 mod tun
ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252     #本端ip为10.1.1.2
route add -net 192.168.0.0/24 gw 10.1.1.2

On the server:
所属网络为 192.168.0.0/24
ip tuntap add dev tun1 mod tun
ip tuntap del dev tun1 mod tun
ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252     #本端ip为10.1.1.1
route add -net 172.16.30.0/24 gw 10.1.1.1
netstat -rn

 

ssh反向隧道

2018-04-19更新

#源主机A(192.168.158.100)需要映射的主机
#中转主机B(192.168.158.139)公网主机,代理主机
#目标映射A主机22/80端口到B主机22001端口

#源主机

#安装autossh
wget https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/a/autossh-1.4e-1.el7.x86_64.rpm
rpm -ivh autossh-1.4e-1.el7.x86_64.rpm
#源主机到中转主机的免密登录
ssh-keygen
ssh-copy-id root@192.168.158.139
ssh root@192.168.158.139 (验证)
#中转主机
vim /etc/ssh/sshd_config
GatewayPorts yes
systemctl restart sshd
说明,不打开该项映射过来的端口将只监听于环回口127.0.0.1,打开监听于0.0.0.0
#源主机
autossh -M 12345   -NfR 0.0.0.0:22001:localhost:22 root@192.168.158.139
autossh -M 12345 -CNfR 0.0.0.0:22001:localhost:80 root@192.168.158.139

##-M后设置遂道ip -N只建立连接不打开shell -f建立成功后在后台运行 -R端口映射对端IP:对端端口:本端IP:本端需要映射的端口 -C允许压缩数据
##ssh -L 12345:127.0.0.1:12345 -R 12345:127.0.0.1:12346   -NR 0.0.0.0:22001:localhost:22 root@192.168.158.139
##ssh -L 12345:127.0.0.1:12345 -R 12345:127.0.0.1:12346 -CNR 0.0.0.0:22001:localhost:80 root@192.168.158.139
##-L将本机的某个端口转发到远端指定机器的指定端口 -R将远端主机的某个端口转发到本地端指定机器的指定端口

##-N不执行远程指令 -R
#中转主机
此时中转主机将新添加两个端口监听0.0.0.0:22001和0.0.0.0:12345,其中22001就是映射过来的源主机的22端口
查找某目录中所有文件是否包含某字符串

2018-05-07更新

find .|xargs grep -ri "IBM"
#查找当前目录下所有文件中是否包含字符串"IBM"不区分大小写
#grep -r 递归 -i 不区分大小写 -l 只列出文件名 -e 正则表达式 -v 取反
find . -type f -name "*.txt" | xargs grep "phpzixue.cn"
#当前目录 -type 表示类型 f 表示普通文件
grep 'log' /home/admin -r -n
#目录下查找所有符合关键字的文件
grep 'shopbase' /home/admin -r -n --include *.{vm,java}    #指定文件后缀
grep 'shopbase' /home/admin -r -n --exclude *.{vm,java}   #反匹配
seq 10 | grep 5 -C 3   #上下匹配3行
telnet命令的优雅退出

2018-05-08更新

telnet 192.168.1.110 22
Ctrl+C是不能退出的  Ctrl+]退出
redis命令执行

2018-05-10更新

redis-cli -a password -n dbnumber flushdb
清空数据库dbnumber比如0
redis-cli -h 192.168.1.100 -p 6379 -a passwd -n db info
定时任务
30 5 11 5 * /usr/bin/redis-cli -a passwd -n 1 flushdb
logrotate命令

2018-05-10更新

/usr/sbin/logrotate -fv /etc/logrotate.d/php-fpm
-f 强制执行 -v显示详细信息 -d debug模式
error: skipping "/var/log/nginx/2018-05-15.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
解决:添加su root root,第一个root是用户,第二个root是组
autogen的使用

2018-05-23更新

autogen是自动准备编译的工具,如需使用,需要安装以下包:
yum install autoconf libtool intltool automake
linux帐号更改密码及过期时间设置

2018-05-28更新

更改帐号的密码
passwd username
#更新密码忽略密码规则
echo "xxxxxxx" | passwd --stdin username
#查看过期时间
chage -l username
#设置密码过期时间,从设置帐号日期开始计算,60天后过期
chage -M 60 username
#设置密码永不过期
chage -M 99999 username
#设置帐号过期时间为2018-10-01
chage -E 2018-10-01 username
CentOS7重置密码

2018-05-28更新

#在vmlinuz段最后添加rd.break Ctrl+X启动
rd.break
#在linux16/linux/linuxefi所在参数行尾添加以下内容
init=/bin/sh
#此时,可使用mount查看挂载情况,/dev/mapper/rhel-root on /sysroot type xfs并且仅有ro权限
#重新mount,拥有rw权限
mount -o remount,rw /sysroot
#改变根
chroot /sysroot
echo "rot" | passwd --stdin root
#修改前最好备份原来的密码/etc/shadow
#使selinux生效,系统在重启时就会对整个文件系统进行relabeling
touch /.autorelabel
exit
reboot
汉化翻译PO/MO互转

2018-06-06更新

po文件本来是用来翻译程序源代码里的字符串的,mo是编译后的目标文件
yum install gettext
mo -> po逆向
msgunfmt -o src_wingide.po src_wingide.mo
po -> mo正向
msgfmt -o src_wingide.mo src_wingide.po
增加swap空间

2018-07-15更新

dd if=/dev/zero of=/swapfile bs=1M count=1024 #生成大小为1G的文件swapfile
mkswap /swapfile   #格式化为swap
swapon /swapfile   #启用该swap
若要重启生效,添加swapon /swapfile到/etc/rc.loacl中
截取大文本文件某些行

2018-07-24更新

sed -n '2,5p' backup.sql > new.sql
截取文档第2行到第5行(含第2行和第5行)
添加定时任务和覆盖复制

2018-08-22更新

#定时重启supervisor管理的某程序
echo "30 2 * * * /bin/supervisorctl restart myprogram >/dev/null 2>&1" >> /var/spool/cron/root
#系统中有alias rm='rm -i'  alias cp='cp -i' 所以即使带上-f参数,也需要确认,但是可以这么做
echo "y" | cp -f /root/workerman.service /usr/lib/systemd/system/
删除特殊字符文件名文件

2018-08-23更新

#有时,使用rm删除文件时,可能遇到文件名显示成?不能删除的情况,可以这样操作
#查看文件inode号 假如是17705967
ls -i
#删除
find ./ -inum 17705967 -exec rm '{}' \;
#另 l. 命令可显示当前目录下所有隐藏文件
shell中单/双/反引号和反斜杠的区别

2018-08-24更新

#单引号
忽略掉所有特殊字符,引号中的内容会保持原样
#双引号
不会忽略$,/,`,即变量和反斜杠会被解释为特殊的内容
#反引号
反引号或者$(...)结构,变量替换
#反斜杠
转义,如“\n”代表换行;echo -e "\n"
位于行尾时,作为续行符
ping添加当前时间

2018-09-03更新

ping 10.10.0.20 | awk '{now=strftime( "%Y-%m-%d %H:%M:%S", systime() ); printf("%s : %s\n",now,$0);fflush();}'
输出如下:
2018-09-01 13:22:06 : 64 bytes from 10.10.0.20: icmp_seq=70 ttl=60 time=1.62 ms
cat << EOF生成配置文件

2018-09-10更新

模式:
cat << EOF > output.sh
EOF
cat > output.sh << EOF
EOF
说明:
EOF只是一个标识delimiter,可替换为任意字符
起始的EOF前后空格会被忽略
结尾的EOF要顶格,前后均不能有任何字符
若内容中有变量,可以有以下处理办法
四种:\EOF或者"EOF"或者'EOF' 或者在\$ 将$转义
为普通用户授管理员权限

2018-09-13更新

sudo vim /etc/sudoers
修改文件
# User privilege specification
root ALL=(ALL) ALL
username ALL=(ALL) ALL
wq! #保存退出
普通用户执行管理员命令须使用sudo
查看/编辑一个压缩文件内容而无需解压

2018-09-20更新

使用vim,注意vi没有这个功能
vim test.tar.gz
#可以查看压缩档内容,如果是文本文档,还可以编辑
less test.tar.gz
#分屏显示 带属性
tar tf test.tar.gz
tar tfv test.tar.gz #v参数可显示文件属性
#仅列出压缩档内文件列表
zip -sf test.zip
unzip -l test.zip
zipinfo test.zip
rar v test.rar
unrar l test.rar
systemd中的环境变量

2018-10-19更新

/etc/profile中配置的环境变量仅对通过pam登录的用户生效,systemd不读这些配置
会出现手动启动正常,使用systemd启动异常的问题
解决办法:
查看PATH的值
echo $PATH
添加到service文件中
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/java_maven_env/jdk1.8.0_161/bin:/opt/java_maven_env/jdk1.8.0_161/jre/bin
或者
写入到/etc/systemd/system.conf或/etc/systemd/user.conf文件中,但需重启系统
 nethogs-linux程序网络使用情况

2018-10-22更新

netthogs可以显示每个程序的网络传输情况
安装nethogs工具
yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/n/nethogs-0.8.5-1.el7.x86_64.rpm
依赖libpcap
语法:
nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
-d num,更新频率,默认1秒
运行中的操作:
q,退出;s,按发送流量排序;r,按接收流量排序;m,在KB、B、MB、KB/s之间切换
查看分区类型

2018-11-30更新

#查看分区类型
df -T
parted -l
blkid
lsblk -f  //会以树状图显示 很友好
lsof 列出打开文件

2019-01-30更新

# 安装lsof
yum install lsof
# 查看单个进程打开的文件句柄数 取前2位
# 获取链接统计数据
netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr| head -n 2
## lsof 列出 -n 不解析主机名显示为ip -> awk 流处理 $2 取PID号  -> sort 排序 -> uniq 消除重复行 -c 统计重复行出现次数
## -> sort排序 -n 按数字排序 -r 逆序 -> head 取前几行 -n 行数
更改默认shell

2019-01-31更新

# /bin/bash是默认shell
# chsh <用户名> -s <新shell>
chsh test -s /bin/sh
查看系统变量

2019-01-31更新

# 查看系统变量
set
# 取消变量或取消变量赋值
unset <变量名>
测试文件及调试脚本

2019-01-31更新

# 测试文件
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true
# 使用 -x 参数
bash -x test.sh
+ a=haha
+ b=hehe
+ echo haha
haha
+ echo hehe
hehe
娱乐

2019-02-12更新

telnet towel.blinkenlights.nl  # 星球大战
curl wttr.in  # 获取当地三日内天气
Java程序内存泄漏分析

2019-02-13更新

# 获取要分析java进程号
ps -ef|grep java   # 假如PID为3454
# 查看Full GC 情况
jstat -gc 3454 1s      # 1s表示每秒刷新一次 重点查看FGC数量是否变化
# 保存线程栈现场
jstack 3454 >jstack.log
## 分析栈
## 查看线程数量
jstack.log中 nid 即是线程编号,为十六进制,对应于top -H -p PID  中的线程编号,为十进制
grep 'java.lang.Thread.State' jstack.log | wc -l
## 查看线程状态
grep 'java.lang.Thread.State' jstack.log | grep -v 'java.lang.State' | sort | uniq -c | sort -n
# 保存堆现场
jmap -dump:format=b,file=heap.hprof 3454      # format=b导出二进制格式 注意文件后缀需为hprof
## 分析堆
下载工具MAT MemoryAnalyzer
https://www.eclipse.org/mat/downloads.php
top查看线程情况

2019-02-15更新

top -H -p PID  查看某进程下各线程的运行状况
-H Threads
top常用操作
top -> x -> b -> shift+<>切换显示列    可对加亮的列降序排列
C -> 显示行编号
promethues 维度过高指标

2019-02-26更新

维度过高的指标是坏指标,会大量占用存储空间和计算资源,甚至搞死prometheus实例
count by (__name__)({__name__=~".+"}) > 10000
zstd 比gzip好用的压缩工具

2019-03-04更新

# zstd 压缩解压速度比gzip快约3位 极限压缩时可以压得更小
# 安装 没有依赖项
yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/z/zstd-1.3.8-1.el7.x86_64.rpm
# 压缩
zstd -3 filename.tar   # 生成压缩文件名为 filename.tar.zst  压缩级别默认3 ,极限19
# 解压
zstd -d filename.tar.zst 或 unzstd filename.tar.zst
# 与tar结合使用 -I --use-compress-program
# 压缩
tar -I zstd -cf filename.tar.zst filename/
# 解压
tar -I zstd -xf filename.tar.zst
获取出口IP地址

2019-05-08更新

curl https://www.ipaddress.com/ |grep "My IPv4 Address"   # 推荐
curl icanhazip.com
curl www.trackip.net/i|grep "<span>"
curl ifconfig.me
curl ifconfig.me/all.xml  # xml格式
curl ipinfo.io/ip
curl ipinfo.io/json  # json格式,包含地理位置信息
curl ifconfig.me/all.json  # json格式 含forwarded字段
curl www.trackip.net/ip?json  # json格式 含时间
curl ipecho.net/plain  # 部分地方不能访问
# 使用wget
wget http://ipecho.net/plain -O - -q ; echo
bg fg 前后台切换

2019-03-22更新

Ctrl+C 发送SIGINT信号,强制中断程序执行
Ctrl+D 不发送信号,发送 EOF
Ctrl+Z 把任务中断,挂起进程并放入后台
关闭session,logout,发送SIGHUP信号
nohup 忽略SIGHUP信号
& 程序放在后台运行
前后台切换
jobs 显示后台的所有作业
fg %N 将编号为N的作业放到前台运行
bg %N 将编号为N的作业放到后台运行
bg fg对最后一个进程操作

几种情况的对比:
使用&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫
nohup和&配合来启动程序:
同时免疫SIGINT和SIGHUP信号

ps 查看进程

2019-03-25更新

ps -ef  #查看所有进程
ps -auxf  #查看进程状态
netstat -rn  # 查看路由表
centos 7 静态路由

2019-05-15更新

# 显示路由表
ip route show
netstat -rn
# 添加临时静态路由
sudo ip route add 10.10.0.0/16 via 10.10.50.1 dev enp1s0
# 删除临时静态路由
sudo ip route del 10.10.0.0/16
# 添加永久静态路由
永久静态路由需要写到 /etc/sysconfig/network-scripts/route-interface 文件中
vi /etc/sysconfig/network-scripts/route-enp1s0
10.10.0.0/16 via 10.10.50.1 dev enp1s0
# 重启设备或网络或重启机器
systemctl restart network
coat 彩色的cat

2019-05-28更新

# 和cat类似,但每一行一种颜色,方便查看
curl -o coat https://raw.githubusercontent.com/oldratlee/useful-scripts/master/coat
chmod +x coat
./coat filename
echo -e "he\nha\n"|./coat
./coat --help  # 查看帮助
显示控制台的全部文字彩色组合效果

2019-05-28更新

curl -o console-text-color-themes.sh https://raw.githubusercontent.com/oldratlee/useful-scripts/master/console-text-color-themes.sh
bash console-text-color-themes.sh
用法:
查找需要使用的样式,如 1;36;41
再自己的代码中使用:
echo -e "\033[1;36;41mSample Text\033[0m"
rm -rf / 的正确方式

2019-06-04更新

要处理一台虚拟机,尝试使用 rm -rf / 其实并不会执行
[root@my-server ~]# rm -fr /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
[root@my-server ~]# rm -fr / --no-preserve-root
查看文件句柄和手动释放内存

2019-09-01更新

# 最大文件句柄数
cat /proc/sys/fs/file-max
# 查看系统文件句柄使用情况 [系统实际以该值为准]
cat /proc/sys/fs/file-nr
# 手动释放内存
echo 3 > /proc/sys/vm/drop_caches
X11-forwarding

2020-01-08更新

这是一个安全的shell特性,它允许通过现有的SSH shell会话转发X11连接,用于在服务器上运行X11程序
而ssh-client通过用户的X11-server显示图形窗口

#1、在windows主机上,需要安装Xming(XServer)
官网:http://www.straightrunning.com/XmingNotes/
软件下载:https://sourceforge.net/projects/xming/
软件下载:https://sourceforge.net/projects/xming/files/Xming/6.9.0.31/
安装完成后,右下角图标上可以查看通道编号,如 Xming Server:1.0
#2、在CRT等SSH软件上设置X11转发 PortForwarding->Remote/X11
填写:localhost:1.0 或 127.0.0.1:1.0 注意编号应与server上的编号相同
#3、在目录linux上安装xorg-x11-xauth软件包
yum -y install xorg-x11-xauth
#4、重连测试
yum -y install firefox gedit
gedit &
firefox &

 

 

 

转载请注明:轻风博客 » Linux常用命令,持续添加中

喜欢 (0)or分享 (0)