刚接触Linux不用慌,日常运维90%的场景用到的操作都整理在这了,不用死记硬背,用到的时候翻就行。
远程连服务器直接用ssh,默认端口22,改了端口的话加-p参数指定:
# 连接服务器,xxx替换成你的服务器公网IP
ssh root@xxx.xxx.xxx.xxx
# 自定义端口的连接方式
ssh root@xxx.xxx.xxx.xxx -p 2222
连上之后就是Shell命令行环境,先记几个能极大提升效率的快捷键:
- 上下方向键调取之前执行过的命令
- 命令/路径输前几个字符按Tab自动补全,补全不了按两次Tab会列出所有匹配项
- Ctrl+C 直接终止当前正在运行的命令
- Ctrl+L 清屏,相当于clear命令
- Ctrl+R 搜索历史执行过的命令
这是日常用得最多的操作,记几个高频的就行。
# 查看当前所在路径
pwd
# 查看某个命令对应的可执行文件路径
which nginx
看目录下的文件,直接用组合参数就行,不用单独记单个参数:
# 显示当前目录所有文件(含隐藏文件)、详细信息、易读的大小格式
ls -lah
目录跳转:
# 跳转到根目录
cd /
# 跳转到当前用户家目录,直接cd不加参数也一样
cd ~
# 跳转到上一级目录
cd ..
# 跳转到上一次所在的目录
cd -
# 跳转到指定绝对路径
cd /var/log/nginx
看目录大小:
# 查看当前目录总大小,易读格式
du -sh
# 查看当前目录下所有文件和子目录的大小
du -ah
文件读写操作,小文件用cat,大文件/日志用less,要实时看日志就用tail -f:
# 查看文件内容,加-n显示行号
cat -n test.txt
# 分页查看大文件,空格翻页,b回退一页,q退出,/后面输入关键词可搜索
less test.log
# 查看文件前20行
head -n 20 test.log
# 查看文件最后20行
tail -n 20 test.log
# 实时滚动查看日志更新,-s指定刷新间隔秒数
tail -f -s 1 test.log
创建文件和目录:
# 创建空文件
touch new.txt
# 创建单层目录
mkdir test_dir
# 递归创建多级目录
mkdir -p a/b/c/d
复制、移动、重命名:
# 复制文件
cp source.txt target.txt
# 复制目录必须加-r参数递归
cp -r source_dir target_dir
# 移动文件/目录,或者重命名
mv old_name new_name
mv test.txt /opt/
删除操作要格外注意,Linux没有回收站,删了基本找不回来:
# 删除文件,加-f不提示直接删
rm -f test.txt
# 删除目录必须加-r递归,执行前一定要确认路径!绝对不能敲rm -rf /
rm -rf test_dir
软链接相当于Windows的快捷方式,用得最多:
# 创建软链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
Linux是多用户系统,root是超级管理员,拥有所有权限,普通用户执行需要高权限的命令前面加sudo即可。
# 切换到root用户
sudo su
# 切换到普通用户
su test_user
# 新建用户
useradd test_user
# 给用户设置密码
passwd test_user
# 删除用户,加-r同时删除家目录
userdel -r test_user
群组相关操作:
# 新建群组
groupadd test_group
# 查看用户所在的所有群组
groups test_user
# 给用户追加新群组,必须加-a参数,不然会覆盖之前的所有群组
usermod -aG test_group test_user
权限修改,用ll或者ls -l可以看到文件/目录的权限,格式是类型 所有者权限 群组权限 其他用户权限,r=4,w=2,x=1,比如755就是所有者有读写执行权限,群组和其他用户只有读和执行权限。
# 修改文件权限,755对应rwxr-xr-x
chmod 755 test.txt
# 递归修改目录下所有文件的权限
chmod -R 755 test_dir
# 修改文件的所有者和所属群组
chown test_user:test_group test.txt
# 递归修改目录所有者
chown -R test_user:test_group test_dir
CentOS系列默认用yum管理软件包,Debian/Ubuntu对应apt,用法大同小异。
# 搜索软件包
yum search nginx
# 安装软件包,-y直接确认不用交互
yum install nginx -y
# 卸载软件包
yum remove nginx -y
# 更新所有可升级的软件包
yum update -y
默认官方源下载速度慢,建议换成国内阿里云源:
# 备份原有源配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里云源配置,对应CentOS7版本,其他版本改一下链接里的版本号即可
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 生成缓存
yum makecache
yum源里没有的软件可以用源码编译安装,通用三步:
# 第一步:配置,检查依赖是否齐全
./configure
# 第二步:编译
make
# 第三步:安装
make install
日常查日志、处理数据常用的几个命令,配合管道符|可以实现很复杂的操作。
# 递归搜索当前目录下所有文件中包含"error"的行,-n显示行号
grep -rn "error" ./
# 反选,显示不包含"debug"的行
grep -v "debug" test.log
# 按数字从小到大排序
sort -n test.txt
# 倒序排序
sort -nr test.txt
# 统计文件行数,常用来看日志有多少条
wc -l test.log
# 去重,必须先排序再去重,不然只能去掉连续重复的行
sort test.txt | uniq
# 按逗号分隔文件内容,取第一列
cut -d ',' -f 1 test.csv
重定向可以把命令输出写到文件里:
# 覆盖写入文件,文件存在会直接覆盖,要注意不要误写重要文件
ls > list.txt
# 追加写入文件,不会覆盖原有内容
ls >> list.txt
# 把错误输出单独写到日志里
cat not_exist_file 2> error.log
# 标准输出和错误输出都写到同一个文件
cat test.sh > all.log 2>&1
管道符|把前一个命令的输出作为后一个命令的输入,最常用的场景是找进程:
# 查找所有nginx相关的进程
ps -ef | grep nginx
看系统整体负载和当前登录用户:
w
输出的load average三个值分别是1分钟、5分钟、15分钟的系统平均负载,超过CPU核心数就说明系统压力大了。
# 查看所有进程快照
ps -ef
# 查看进程的CPU、内存占用情况
ps -aux
# 动态查看进程列表,按CPU使用率排序,q退出
top
# 结束进程,xxx替换成进程PID,杀不掉的话加-9强制结束(可能丢数据,谨慎用)
kill xxx
kill -9 xxx
系统服务用systemctl管理:
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 查看服务运行状态
systemctl status nginx
# 重载服务配置,不用重启服务
systemctl reload nginx
# 设置服务开机自启
systemctl enable nginx
# 取消服务开机自启
systemctl disable nginx
最常用的是tar格式,zip用来处理Windows传过来的压缩包:
# 打包并压缩成tar.gz格式
tar -zcvf test.tar.gz test_dir/
# 解压tar.gz格式压缩包
tar -zxvf test.tar.gz
# 查看压缩包内容,不解压
tar -tf test.tar.gz
# 压缩成zip格式,-r递归压缩目录
zip -r test.zip test_dir/
# 解压zip包
unzip test.zip
# 查看zip包内容,不解压
unzip -l test.zip
# 查看网卡和IP信息,没有的话先装net-tools
yum install net-tools -y
ifconfig
ssh免密登录配置,不用每次输密码,管理多台服务器特别方便:
# 本地生成密钥对,一路回车就行
ssh-keygen
# 把公钥传到服务器,之后登录就不用输密码了
ssh-copy-id root@xxx.xxx.xxx.xxx
还可以在本地~/.ssh/config里配置别名,举个例子:
Host test
HostName 192.168.1.10
Port 22
User root
配置完之后直接输ssh test就能登录,不用记IP和端口。
# 下载文件,-c断点续传,断网了不用重新下
wget -c https://xxx.com/xxx.tar.gz
# 本地文件传到服务器,传目录加-r
scp test.txt root@xxx.xxx.xxx.xxx:/opt/
# 增量同步目录,备份常用,加--delete会删除目标目录里源没有的文件,谨慎用
rsync -arv test_dir/ root@xxx.xxx.xxx.xxx:/opt/backup/
Vim是Linux默认的文本编辑器,不用记太复杂的操作,能满足日常改配置的需求就行。 Vim默认进入的是交互模式,按i/a/o进入插入模式可以写内容,按Esc回到交互模式,按:进入命令模式。 交互模式常用操作:
- dd 删除当前行,前面加数字可以删多行,比如2dd删2行
- yy 复制当前行,前面加数字复制多行
- p 粘贴复制/剪切的内容
- u 撤销上一步操作
- Ctrl+r 重做撤销的操作
- gg 跳转到文件第一行
- G 跳转到文件最后一行
- /关键词 搜索内容,n跳转到下一个匹配项,N跳转到上一个
命令模式常用操作:
# 保存并退出
:wq
# 不保存强制退出
:q!
# 显示行号
:set nu
# 隐藏行号
:set nonu
# 全文替换旧字符串为新字符串
:%s/old_str/new_str/g
# 横向分屏打开另一个文件
:sp another.txt
# 纵向分屏打开另一个文件
:vsp another.txt
# 切换分屏窗口,按两次Ctrl+w就行
Ctrl+w Ctrl+w
# 关闭当前分屏
Ctrl+w q
想要永久生效的配置(比如默认显示行号),可以写在用户家目录的.vimrc文件里。