linux 常用命令集锦
1、查看端口占用情况
(1) lsof -i:端口号
查看 8080 端口被占用情况
图中 显示 进程号为 39910 占用了 8080 端口
(2) ps aux | grep 进程号
查找进程执行的文件
图中显示 是java 进程,整个命令见上图
(3) ll /proc/进程号
确定进程所在的目录
图中 红色区域表示进程所在目录
(4) 根据进程号查看端口信息
netstat -apn | grep 进程号
2、zip 包
(1) zip -r zip包路径 要压缩的文件或目录
压缩 成zip包
如: zip -r test.zip ./* 将当前目录下的所有文件和文件夹全部压缩成test.zip ,-r表示递归压缩子目录下所有文件
生成 的test.zip 在当前目录下。
如:zip -r /opt/config/test.zip ./*
生成 的test.zip 在opt/config目录下。
如:zip -r test.zip /opt/logs/100003172/*
将/opt/logs/100003172下的所有文件包括子目录全部压缩到 test.zip中
如:zip -r test.zip ./*txt
将 /opt/logs/100003172 下的所有 txt 文件压缩到 test.zip 中
如:zip -r test.zip abc 123.txt
将 /opt/logs/100003172 下的 abc 目录 和 123.txt 文件压缩到 test.zip 包中
(2) unzip -o -d 解压缩目录路径 zip包路径
把zip包解压到 解压缩目录路径下
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;
如:unzip -o -d test test.zip
将 当前目录下的test.zip 解压到 当前目录的子目录test下
(3) 参数说明
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
3、gz包
(1) tar 将 gz 包解压到指定目录中
tar -zxvf 压缩包.gz -C 目标目录
PS: 目标目录需要存在,才能解压成功
当没有给出 -C 目标目录 的时候,表示将压缩包内容直接解压到当前目录下
(2) 压缩
tar -zcvf 压缩包.tar.gz 待压缩目录
test.tar.gz 压缩包内的目录结构如下:
PS:若想压缩的时候,将压缩包放在别的目录下,则 “压缩包.tar.gz” 可以填写绝对路径,如:/opt/test.tar.gz ; 这个同样适用于 要压缩的源文件在别的路径下。
更详细的指令可参考:https://www.runoob.com/linux/linux-comm-tar.html
4、文件操作
(1) cat 文件路径
查看文件路径下的文件
如: cat /etc/profile
查看 /etc 目录下的 profile文件内容
(2) 修改文件
a) vi 文件路径
进入编辑 指定路径下的文件模式
如: vi /etc/profile
b) 按 i 开始编辑
如:
看到 Insert 字样表示可以编辑了。
c) 退出编辑模式
按ESC键,然后:
退出vi
:q! 不保存文件,强制退出vi命令
:w 保存文件,不退出vi命令
:wq 保存文件,退出vi命令
中断vi模式时,再进入vi保错的解决办法:
如果不需要保存上次编辑的内容,则直接删除临时文件:rm .my.cnf.swp
(然后系统提示是否确认删除 :rm: remove regular file `.my.cnf.swp'?)
直接输入y,回车,如下图所示
(3) 获取文件最后需改时间
stat -c %Y 文件
5、后台启动进程
使用 nohup ./start.sh &
6、目录文件相关操作
(1) 重命名目录
mv A B
将目录A重命名为B
7、修改环境变量
(1) 直接修改 /etc/profile
- 查看环境变量 (echo $PATH)
可以看到环境变量中的多个值以 : 隔开
- 编辑 /etc/profile文件
- 重新加载文件: source /etc/profile
再次使用 echo $PATH,可以看到新添加的环境变量已添加到系统中
更多可参考:https://www.cnblogs.com/cucuad/p/10114606.html
8、Systmctl
系统服务相关命令
1)systemctl --version 查看 systemctld版本
2)查看 systemctld 和 systemctl 程序相关的目录
whereis systemd
whereis systemctl
3)命令列表
系统中所有服务对应的文件位置: 目录 /usr/lib/systemd/system/ 下
/lib/systemd/system/ 大多数 unit 的配置文件都放在这个目录下。
/run/systemd/system/ 系统运行过程中产生的脚本,比如用户相关的脚本和会话相关的脚本。
/etc/systemd/system/ 这个目录中主要的文件都是指向 /lib/systemd/system/ 目录中的链接文件。
注意,在我们自己创建 unit 配置文件时,既可以把配置文件放在 /lib/systemd/system/ 目录下,也可以放在 /etc/systemd/system/ 目录下。
/etc/default/ 这个目录中放置很多服务默认的配置文件。
/var/lib/ 一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中,比如 docker 相关的数据文件就放在这个目录下。
/run/ 这个目录放置了好多服务运行时的临时数据,比如 lock file 以及 PID file 等等
systemctl list-units ##列出当前已经启动的 unit,如果添加 -all 选项会同时列出没有启动的 unit
systemctl list-units --type=service --all ## 只查看某种类型的 unit
systemctl list-unit-files ##根据 /lib/systemd/system/ 目录内的文件列出所有的 unit
systemctl --failed ## 查看加载失败的服务
systemctl status xxx ##查看指定服务的状态
systemctl stop xxx ##关闭指定服务
systemctl start xxx ##开启指定服务
systemctl restart xxx ##从新启动服务
systemctl enable xxx ##设定指定服务开机开启 是在/etc/systemd/system/multi-user.target.wants/ 这个目录下 做 服务配置文件的软链;
systemctl is-enabled xxx ## 查询指定服务是否是开机自启动
systemctl disable xxx ##设定指定服务开机关闭 是在/etc/systemd/system/multi-user.target.wants/ 这个目录下 删除掉服务配置文件的软链接;
systemctl is-active xxx ## 查询指定服务是否正在运行
systemctl reload xxx ##使指定服务从新加载配置
systemctl reload-daemon ## 从/usr/lib/systemd/system/下加载所有的服务配置文件
systemctl list-dependencies xxx ##查看指定服务的倚赖关系
systemctl mask xxx ##冻结(注销)指定服务,后续无法再启动
systemctl unmask xxx ##启用服务
systemctl set-default multi-user.target ##开机不开启图形
systemctl set-default graphical.target ##开机启动图形
setterm ##文本界面设定color
systemctl show xxx ## 查看指定服务的配置
systemctl poweroff ## 系统关机
systemctl reboot ## 重新开机
systemctl suspend ## 进入暂停模式
systemctl hibernate ## 进入休眠模式
systemctl rescue ## 强制进入救援模式
systemctl emergency ## 强制进入紧急救援模式
systemctl list-sockets ## 查询socket 文件
4) 服务的状态
通过 systemctl status xxx可以 查看服务的状态
第三行描述的是服务状态:
- active (running) 表示服务正在运行中
- inactive (dead) 则表示服务当前没有运行
- active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
- active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
9、查看进程占用情况
1)通过 ps -aux|grep xxx xxx为关键字,查到进程
或者若知道服务名通过 systemctl status xxxx xxx为服务名,查看服务进程号
2)根据进程号查看内存、CPU占用情况
3)查看系统中是否有进程被杀
grep -i 'killed process' /var/log/messages
10、判断输入变量或者参数是否为空的方法
(1) 判断变量
read -p "input a word :" word if [ ! -n "$word" ] ;then echo "you have not input a word!" else echo "the word you input is $word" fi
(2) 判断变量
#!/bin/bash if [ ! -n "$1" ] ;then echo "you have not input a word!" else echo "the word you input is $1" fi
(3) 直接通过变量判断
#!/bin/sh para1= if [ ! $para1 ]; then echo "IS NULL" else echo "NOT NULL" fi
(4) 使用test判断
#!/bin/sh dmin= if test -z "$dmin" then echo "dmin is not set!" else echo "dmin is set !" fi
(5)使用""判断
#!/bin/sh dmin= if [ "$dmin" = "" ] then echo "dmin is not set!" else echo "dmin is set !" fi
(6)判断目录是否存在
dir=/opt/test if [ -d "$dir" ];then echo $dir exist fi
(7)判断文件是否存在
file=/opt/test if [ -d "$file" ];then echo $file exist fi
参考:https://www.jb51.net/article/56550.htm
11、软链接的操作
(1) 创建软链接
ln -s 【目标目录】【软链接地址】 ----- 【目标目录】指软链接指向的目标目录下,【软链接地址】指 “快捷键” 文件名称,该文件是被指令创建的。
如上图,目前要将 .../etc/telegraf 目录 在/etc下创建一个软链接,指向该目录
(2) 修改已有软链接,将其链接其它目标目录
ln -snf 【新目录地址】【软件链接地址】
(3) 删除
rm -rf 【软链接地址】
参考:https://www.cnblogs.com/xzlive/p/11125542.html
12、拷贝
(1) 参数详解
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-r :递归持续复制,用于目录的复制行为
(2) 使用
cp src target ----- src 和 target 均可以是文件或目录
\cp -rf src target ----- 覆盖拷贝
13、手动释放内存
- free -m 看当前内存使用情况
- sync :使用sync命令以确保文件系统的完整性,sync 命令运行 sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
- echo 3 > /proc/sys/vm/drop_caches
1>. /proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。
2>. 关于drop_caches的官方说明如下:
Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.
3>. Linux内核会将它最近访问过的文件页面缓存在内存中一段时间,这个文件缓存被称为pagecache。
14、操作系统版本查看
(1) uname -a
Linux查看版本当前操作系统内核信息
(2) cat /proc/version
Linux查看当前操作系统版本信息
(3) cat /etc/issue 或cat /etc/redhat-release
Linux查看版本当前操作系统发行版信息
(4) cat /etc/system-relase
Linux查看
(4) 欧拉操作系统
- 重启网卡服务
1 | nmcli c reload;nmcli networking off;nmcli networking on ; |
15、查看 CPU 信息
cat /proc/cpuinfo
processor 逻辑处理器的id。
physical id 正式的物理处理器的id。
core id cpu里面的每个核心的id。
cpu cores 每个cpu物理处理器中的内核数量。
siblings 每个cpu物理处理器中的逻辑处理器的数量。
参考:
https://blog.csdn.net/qingfengxd1/article/details/92806428
16、更改 shell 脚本编码
在 linux 服务器上执行脚本的时候,有时会提示以上,该异常信息表示 该脚本的编码格式不对,需要更改成 unix,更改方式如下:
- vi start.sh
- 按住 shift + :
- 输入 set ff=unix,按回车
- 再按住 shift + :
- 输入 set ff,按回车,可以看到其现在的编码格式已经被修改成了unix
- 按住 shift +:
- 输入wq 进行退出
17、查看CPU相关信息命令
(1) lscpu
18、服务器名称相关操作
(1) 修改服务器 hostname
#修改服务器的 hostname
hostnamectl set-hostname master
#修改后的 hostname 需要能够本地解析出来
echo "127.0.0.1 master">>/etc/hoss
19、netstat
(1) 当netstat 命令显示找不到的时候,需要执行 yum -y install net-tools 进行安装
(2) 查看端口
20、查找文件
(1) find / -name *关键字*
这个会根据 关键字查找含有关键字的所有文件
(2) find / -iname *关键字*
相对于 (1) 不区分大小写进行搜索
21、linux 设置文件句柄数
(1) 查看当前系统设置的文件句柄数
ulimit -n
默认情况下,linux最大文件句柄数为1024个。当你的服务器在大并发达到极限时,就会报出“too many open files”。
(2) 查看 linux 相关的参数
ulimit -a
(3) 修改 linux 系统的文件句柄数
a) 当前进程生效
ulimit -n <65535> <65535> 可以根据实际情况进行修改,此示例表示将当前系统的文件句柄数设置最大允许为 65535
b) 通过修改 /etc/security/limits.conf 永久生效
可以新增如下内容:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
注:
硬限制表明soft限制中所能设定的最大值。 soft限制指的是当前系统生效的设置值。 hard限制值可以被普通用户降低。但是不能增加。 soft限制不能设置的比hard限制更高。 只有root用户才能够增加hard限制值。
soft :软性极限
hard:表示硬性极限
nofile : 一个进程最多能打开的的文件数
nproc : 一个用户最多能创建的进程数
可以最大设到:655350
c) 通过修改 /etc/profile 永久生效
22)shell脚本-标准输入输出
a) >/dev/null 2>&1 的含义:将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃。
详细分析下:
- 符号 > 等价于 1> (系统默认为1,省略了先); 所以">/dev/null"等同于 "1>/dev/null"
- /dev/null 表示空设备文件
- 0 表示stdin标准输入
- 1 表示stdout标准输出
- 2 表示stderr标准错误
- & 表示等同于的意思,2>&1,表示2的输出重定向等同于1
因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”
- >/dev/null 2>&1 命令执行过程为:
- 1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
- 2>&1 :接着,将标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
b) <cmd> 2 >>$log_file 的含义:将标准错误输出重定向到 log_file文件中
c) <cmd> >>$log_file 2>&1 的含义:将标准输出重定向到 log_file文件中,标准错误输出与标出输出一样重定向到 log_file文件中
23)模糊批量查杀多个进程
ps -ef |grep destroy.sh |grep -v grep |awk '{print $2}' |xargs kill -9
通过以上命令,可以把 进程中含有 destroy.sh 字样的所有进程 一次性全部杀掉
24)脚本获取传入参数
a) 获取所有传入的参数
echo $@ #可通过 $@ 获取所有参数
b) 当传入的参数超过10个,如何获取第10个参数
方法一:
# 打印前十个参数 for i in ${1..9}; do echo "Parameter $i: ${!i}" done # 打印第11个及以后的参数 shift 9 #shift 9命令将所有的参数向左移动9个位置,这样原先的${10}就变成了$1,原先的${11}变成了$2,依此类推。然后,通过$@循环来访问剩余的参数。 for arg in "$@"; do echo "Parameter: $arg" done
方法二: 直接使用 ${} 方式
log_file=$1 record_file=$2 source_db_ip=$3 target_db_ip=$4 db_port=$5 db_super_user=postgres source_db_super_pwd=$6 target_db_super_pwd=$7 database_root_dir=$8 db_tool=$database_root_dir/bin data_seq=$9 db_name=issc_isscdb prefix=${10}
25) 延迟时间
a) 延迟毫秒 (usleep 微妙)
usleep 50000 # 延迟50秒 usleep 延迟单位为微妙
b) 延迟秒 (sleep 数字 <单位>)
如果没有指定单位,则默认 延迟 指定 秒
也可以指定单位,如下:
1 2 3 4 5 | sleep 1 # 表示延迟1秒 sleep 1s # 表示延迟1秒 sleep 1m # 表示延迟1分 sleep 1h # 表示延迟1小时 sleep 1d # 表示延迟一天 |
更多命令见:
https://blog.51cto.com/4547985/2177544
6、如何检查Linux下是否安装了某软件(参考 :https://blog.csdn.net/menghefang/java/article/details/88595090)
1、rpm包安装的,可以用 rpm -qa 看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”
2、以deb包安装的,可以用 dpkg -l 看到。如果是查找指定软件包,用 dpkg -l | grep “软件或者包的名字”
3、yum方法安装的,可以用 yum list installed 查找,如果是查找指定包,用 yum list installed | grep “软件名或者包名”
以查看yum安装的zlib为例:
[root@CentOS6 package]# yum list installed | grep "zlib"
zlib.x86_64 1.2.3-29.el6 @anaconda-CentOS-201410241409.x86_64/6.6
zlib-devel.x86_64 1.2.3-29.el6 @base
参考:
https://blog.csdn.net/u012062455/article/details/77228994
(26条消息) centos之Too many open files问题-修改linux最大文件句柄数_weixin_34228662的博客-CSDN博客
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步