跳至正文
来两杯美式
返回

Linux 命令大全:SSH 免登录、查找、防火墙与运维必会命令

By 来两杯美式
发布于

这是一篇 2020 年 2 月整理的 Linux 命令笔记。内容按当年的视角写就:CentOS 7 系统、firewalld 防火墙、chkconfig 管理开机启动、ImageMagick 处理图片——没有 systemd 全家桶,也没有后来的 fd/ripgrep。命令、写法都保留当年的风格,作为一份可以直接查的运维速查表。

SSH 免登录与修改主机名

配置 root 用户 SSH 免密登录:

  1. 在想要免登录的服务器上,进入 root 文件夹创建 .ssh 目录:mkdir -p ~/.ssh
  2. 把客户端机器的 id_rsa.pub 文件拷贝到服务器的 .ssh 目录下
  3. .ssh 目录下创建 authorized_keys 文件,内容保存 id_rsa.pub 的内容:
mkdir -p ~/.ssh
scp ~/.ssh/id_rsa.pub root@server-ip:~/.ssh/
ssh root@server-ip
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

注意:authorized_keys.ssh 目录的权限必须收紧(600 / 700),否则 SSH 会拒绝信任该密钥。

修改主机名:

vim /etc/hostname   # 将主机名写入文件
reboot              # 重新启动服务器生效

查找:日志、关键字与文件

按时间段查询日志

sed -n '/16:17:20/,/16:17:36/p' test.log   # 输出 16:17:20 到 16:17:36 之间的日志行

grep 查询关键字及上下文

grep '我的业绩' -A10 -B5   # 打印匹配行,以及之后 10 行(-A after)与之前 5 行(-B before)

find 按条件查找文件

参数含义示例
-name按名称精确匹配find /usr -name 'redis-*' -maxdepth 1
-iname忽略大小写匹配find /usr -iname 'a.java'
-maxdepth限制查找目录深度find /usr -name 'redis-*' -maxdepth 1
-ctime修改时间(天)find /usr -ctime 20 找 20 天内有修改的文件
-mtime修改时间(天,前后匹配)find /usr -mtime -2 找更新时间小于 2 天的文件
-mmin修改时间(分钟)find /usr -mmin +2 找更新时间大于 2 分钟的文件
-size按文件大小find /usr -size -10G 小于 10G;find /usr -size +5k 大于 5k
-empty空文件或目录find /usr -empty
-type按类型(d 目录 / f 文件)find /usr -type dfind /usr -type f
-newer比某文件更新时间新find /usr -newer abc
-anewer比某文件访问时间新find /usr -anewer abc

grep 多文件 + awk 结构化查询

grep "imooc" target*              # 在 target 打头的文件中查找包含 imooc 的行
awk -F ',' '$1==500 && $2==999 {print $0}' a.txt

awk 示例说明:以逗号分隔 a.txt 每一行,找出第一列等于 500 且第二列等于 999 的行,$0 表示打印整行。

组合命令

找到指定文件并删除

find . -name 'a_*' -exec rm -rf {} \;
find . -name 'a_*' | xargs rm -rf
rm -rf $(find . -name 'a_*')

三种写法殊途同归,按习惯选用。

找到指定进程号并 kill

ps -ef | grep xxx | grep -v "grep" | awk '{print $2}' | xargs kill -9
kill -9 $(ps -ef | grep xxx | grep -v "grep" | awk '{print $2}')

grep -v "grep" 用于过滤掉 grep 自身那条进程,避免误杀。

端口与防火墙(CentOS 7)

firewall-cmd --query-port=8020/tcp               # 查询端口号是否开放
firewall-cmd --add-port=8020/tcp --permanent     # 开放端口(--permanent 表示永久生效)
firewall-cmd --reload                            # 重启防火墙使配置生效
firewall-cmd --state                             # 查看防火墙状态
systemctl stop firewalld.service                 # 关闭防火墙(重启后会重新启动)
systemctl disable firewalld.service              # 永久关闭:先禁用开机启动

永久关闭防火墙:先 systemctl disable firewalld.service 禁用开机自启,再 systemctl stop firewalld.service 停止当前服务。

磁盘与内存

du -sh /dir              # 查看文件夹总大小
du -sh fileName          # 查看某一个文件的大小
du -h /dir               # 查看文件夹及其内部每个文件的大小
free                     # 查看内存和交换空间使用情况
df -h                    # 查看各个分区磁盘空间使用
cat /proc/meminfo | grep MemTotal   # 查询机器内存
ulimit -u                # 查看当前用户能创建的最大线程数

root 用户一般没有最大线程数限制,所以避免用 root 部署应用——一旦耗尽系统资源,机器可能连远程管控都进不去。

安装包与端口检查

rpm -qa | grep jdk          # 查看是否安装了 JDK
rpm -e --nodeps xxx         # 卸载程序(如卸载 JDK,--nodeps 忽略依赖关系)
netstat -ntpl | grep 22     # 查看 22 端口是否在监听
systemctl restart network.service   # 重启网络服务
chkconfig --list            # 查看开机启动服务列表

开机启动

方式一:chkconfig 设置开机自启

chkconfig fdfs_trackerd on

方式二:编辑 rc.local

vim /etc/rc.d/rc.local
# 加入一行:
/etc/init.d/fdfs_trackerd start

方式三:systemctl(以 docker 为例)

systemctl is-enabled docker.service     # 检查服务是否开机启动
systemctl enable docker.service         # 配置成开机启动
systemctl start docker.service          # 启动服务
systemctl disable docker.service        # 禁止开机启动
systemctl stop docker.service           # 停止
systemctl restart docker.service        # 重启

切换图形/命令行界面

sudo systemctl set-default multi-user.target    # 非图形界面启动
sudo systemctl set-default graphical.target     # 切换回图形界面

其他常用命令

mount /dev/cdrom /mnt/cdrom    # 加载光驱,之后进入 /mnt/cdrom 读取光盘内容
umount /mnt/cdrom              # 卸载光驱
passwd qimeng                  # 修改用户密码
hostname                       # 查看主机名
hostname [name]                # 设置主机名

图片批处理(ImageMagick)

安装:

yum install ImageMagick -y

批量生成缩略图——缩小 25%:

for img in `ls *.jpg` ; do convert -sample 25%x25% $img thumb-$img ; done

指定宽度等比缩放:

for img in `ls *.jpg` ; do convert -sample 200 $img thumb-$img ; done

指定高度等比缩放:

for img in `ls *.jpg` ; do convert -sample x200 $img thumb-$img ; done

批量缩小根目录文件夹中的图片,宽度大于 900px 才缩小,否则不动:

for img in `ls */*.jpg` ; do convert -resize "900 >" $img $img ; done

convert -sample 不做插值、速度快,适合缩略图;convert -resize "900 >" 是「只有宽度超过 900 才缩放」的写法。


速查小结


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
查看系列全部文章
  1. 01.Linux 命令大全:SSH 免登录、查找、防火墙与运维必会命令
  2. 02.Maven 入门到精通:依赖管理、生命周期与多模块项目
  3. 03.Nginx:高性能原理与常用配置(负载均衡 / 跨域 / 防盗链)
  4. 04.Maxwell 数据初始化:maxwell-bootstrap 全量同步实践
  5. 05.mac 系统的 IntelliJ IDEA 快捷键大全

上一篇
设计模式之原型模式,及深浅拷贝
下一篇
软件设计原则:SOLID + KISS / YAGNI / LOD 全景