Linux,是现代服务器操作系统的事实标准。无论是Web服务器、数据库服务器、云服务器,还是嵌入式设备、移动设备(Android),都能看到Linux的身影。作为一个程序员,尤其是后端程序员,掌握Linux常用命令,是必备的技能。
我自己,从大学开始接触Linux,到现在工作,每天都在和Linux打交道。从最初的害怕命令行,到现在的熟练使用,Linux命令,已经成了我工作中不可或缺的工具。无论是管理服务器、部署应用、排查问题,还是处理文件、分析日志、编写脚本,Linux命令都能大大提高效率。
今天,分享Linux常用命令详解,从文件操作、系统管理、网络操作、文本处理,到Shell脚本,帮你从入门到精通,掌握Linux命令。
Linux简介
Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux的核心,是Linux内核(Kernel),由林纳斯·托瓦兹(Linus Torvalds)在1991年创建。加上GNU项目的各种工具和软件,组成了完整的Linux操作系统(严格来说,应该叫GNU/Linux)。
Linux的特点:
- 开源免费:源代码开放,免费使用
- 稳定可靠:服务器可以连续运行几年不重启
- 安全:多用户权限机制,病毒少
- 多用户多任务:支持多个用户同时登录,同时运行多个任务
- 强大的命令行:命令行功能强大,效率高
- 广泛的硬件支持:支持各种硬件架构
- 丰富的软件生态:有大量的开源软件
常见的Linux发行版:
- 服务器端:CentOS、Red Hat Enterprise Linux(RHEL)、Ubuntu Server、Debian、SUSE
- 桌面端:Ubuntu Desktop、Fedora、Linux Mint、Debian、Arch Linux
- 移动端:Android(基于Linux内核)
2015年,服务器端最流行的是CentOS(尤其是CentOS 6/7)和Ubuntu Server。我自己,服务器主要用CentOS,开发机用Ubuntu。
一、文件和目录操作
文件和目录操作,是Linux最基础、最常用的命令。
1. ls:列出目录内容
ls # 列出当前目录内容
ls -l # 长格式列出,显示详细信息
ls -a # 显示所有文件,包括隐藏文件
ls -la # 长格式显示所有文件
ls -lh # 长格式,文件大小以人类可读格式显示(K/M/G)
ls -lt # 按修改时间排序,最新的在前
ls -R # 递归列出子目录内容
ls /etc # 列出/etc目录内容ls -l输出的含义:
-rw-r--r-- 1 root root 4096 Sep 25 10:00 filename- 第一位:文件类型(-普通文件,d目录,l符号链接,b块设备,c字符设备)
- 第2-4位:所有者权限(r读,w写,x执行)
- 第5-7位:所属组权限
- 第8-10位:其他用户权限
- 第11位:硬链接数
- 所有者
- 所属组
- 文件大小
- 最后修改时间
- 文件名
2. cd:切换目录
cd /etc # 切换到/etc目录
cd .. # 切换到上一级目录
cd - # 切换到上一次所在的目录
cd ~ # 切换到当前用户的家目录
cd # 不带参数,也是切换到家目录
cd /var/log # 切换到/var/log目录3. pwd:显示当前目录
pwd # 显示当前所在目录的绝对路径4. mkdir:创建目录
mkdir dirname # 创建目录
mkdir -p a/b/c # 递归创建多级目录
mkdir -m 755 dir # 创建目录并设置权限5. rmdir:删除空目录
rmdir dirname # 删除空目录(只能删除空目录)
rmdir -p a/b/c # 递归删除空目录6. rm:删除文件或目录
rm filename # 删除文件
rm -r dirname # 递归删除目录及其内容
rm -f filename # 强制删除,不提示
rm -rf dirname # 强制递归删除目录(危险!慎用!)
rm -i filename # 删除前提示确认注意:rm -rf 是非常危险的命令,删除后不可恢复!使用时一定要确认路径正确,尤其是rm -rf / 会删除整个系统!
7. cp:复制文件或目录
cp file1 file2 # 复制file1为file2
cp file /dir/ # 复制文件到目录
cp -r dir1 dir2 # 递归复制目录
cp -p file1 file2 # 复制时保留文件属性(权限、时间等)
cp -a dir1 dir2 # 归档复制,保留所有属性,递归复制
cp -i file1 file2 # 覆盖前提示8. mv:移动或重命名
mv file1 file2 # 重命名(file1改为file2)
mv file /dir/ # 移动文件到目录
mv dir1 dir2 # 重命名目录或移动目录
mv -i file1 file2 # 覆盖前提示
mv -f file1 file2 # 强制移动,不提示9. touch:创建空文件或修改时间戳
touch filename # 创建空文件(如果文件不存在)
touch file1 file2 # 创建多个空文件
touch -a filename # 只修改访问时间
touch -m filename # 只修改修改时间
touch -t 201509251000 filename # 设置指定时间10. find:查找文件
find /path -name "*.txt" # 按文件名查找
find /path -iname "*.txt" # 按文件名查找(不区分大小写)
find /path -type f # 查找普通文件
find /path -type d # 查找目录
find /path -size +10M # 查找大于10M的文件
find /path -size -1M # 查找小于1M的文件
find /path -mtime -7 # 查找7天内修改过的文件
find /path -mtime +30 # 查找30天前修改过的文件
find /path -user root # 查找属于root用户的文件
find /path -perm 755 # 查找权限为755的文件
find /path -name "*.log" -exec rm {} \; # 查找并删除(危险!)
find /path -name "*.txt" -exec cp {} /backup/ \; # 查找并复制11. ln:创建链接
ln file link # 创建硬链接
ln -s file link # 创建符号链接(软链接)
ln -sf file link # 强制创建符号链接,覆盖已存在的硬链接和软链接的区别:
- 硬链接:指向同一个inode,删除原文件不影响硬链接,不能跨文件系统,不能链接目录
- 软链接:类似Windows的快捷方式,指向文件路径,删除原文件软链接失效,能跨文件系统,能链接目录
12. chmod:修改文件权限
chmod 755 filename # 设置权限为rwxr-xr-x
chmod +x filename # 给所有用户添加执行权限
chmod u+x filename # 给所有者添加执行权限
chmod g+w filename # 给所属组添加写权限
chmod o-r filename # 给其他用户去掉读权限
chmod -R 755 dir # 递归修改目录下所有文件的权限权限数字表示:
- r(读)= 4
- w(写)= 2
- x(执行)= 1
- 7 = rwx(4+2+1)
- 6 = rw-(4+2)
- 5 = r-x(4+1)
- 4 = r--
- 0 = ---
13. chown:修改文件所有者
chown user filename # 修改文件所有者
chown user:group filename # 修改所有者和所属组
chown -R user dir # 递归修改目录下所有文件的所有者14. chgrp:修改文件所属组
chgrp group filename # 修改文件所属组
chgrp -R group dir # 递归修改15. file:查看文件类型
file filename # 查看文件类型16. stat:查看文件详细信息
stat filename # 查看文件的详细信息(inode、权限、大小、时间等)二、查看文件内容
1. cat:查看文件内容
cat filename # 查看文件内容
cat -n filename # 显示行号
cat -b filename # 显示行号(空行不编号)
cat file1 file2 # 合并显示多个文件
cat > filename # 创建文件并输入内容(Ctrl+D结束)
cat >> filename # 追加内容到文件2. more:分页查看文件
more filename # 分页查看文件
# 操作:空格下一页,Enter下一行,q退出,/搜索3. less:分页查看文件(更强大)
less filename # 分页查看文件
# 操作:空格下一页,b上一页,Enter下一行,k上一行,q退出,/搜索,n下一个匹配,N上一个匹配,g跳到开头,G跳到结尾
less -N filename # 显示行号less比more更强大,支持上下翻页,搜索,大文件查看效率高。
4. head:查看文件开头
head filename # 查看文件前10行
head -n 20 filename # 查看文件前20行
head -c 100 filename # 查看文件前100字节5. tail:查看文件结尾
tail filename # 查看文件最后10行
tail -n 20 filename # 查看文件最后20行
tail -f filename # 实时跟踪文件新增内容(查看日志常用)
tail -F filename # 实时跟踪,文件被截断或重命名后重新打开
tail -n +100 filename # 从第100行开始显示到结尾tail -f 是查看日志最常用的命令,可以实时看到日志的新增内容。
6. wc:统计文件
wc filename # 统计行数、单词数、字节数
wc -l filename # 统计行数
wc -w filename # 统计单词数
wc -c filename # 统计字节数
wc -m filename # 统计字符数7. sort:排序文件内容
sort filename # 按字母顺序排序
sort -r filename # 逆序排序
sort -n filename # 按数字排序
sort -u filename # 排序并去重
sort -k 2 filename # 按第2列排序
sort -t ',' -k 2 filename # 以逗号分隔,按第2列排序8. uniq:去重
uniq filename # 去除相邻的重复行(需要先排序)
uniq -c filename # 去重并显示重复次数
uniq -d filename # 只显示重复的行
uniq -u filename # 只显示不重复的行注意:uniq只能去除相邻的重复行,所以通常和sort配合使用:sort filename | uniq
9. grep:文本搜索
grep "pattern" filename # 在文件中搜索匹配的行
grep -i "pattern" filename # 不区分大小写搜索
grep -v "pattern" filename # 显示不匹配的行
grep -n "pattern" filename # 显示行号
grep -c "pattern" filename # 统计匹配的行数
grep -r "pattern" /dir # 递归搜索目录下所有文件
grep -l "pattern" /dir/* # 只显示包含匹配的文件名
grep -A 3 "pattern" filename # 显示匹配行及后3行
grep -B 3 "pattern" filename # 显示匹配行及前3行
grep -C 3 "pattern" filename # 显示匹配行及前后各3行
grep -E "pattern1|pattern2" filename # 扩展正则,匹配pattern1或pattern2
grep "pattern" file1 file2 # 在多个文件中搜索grep是Linux中最常用的文本搜索工具,功能强大,支持正则表达式。
10. awk:文本处理工具
awk是一个强大的文本处理工具,可以进行复杂的文本分析和处理。
awk '{print $1}' filename # 打印每行的第1列
awk '{print $1, $3}' filename # 打印第1列和第3列
awk -F ':' '{print $1}' /etc/passwd # 以冒号分隔,打印第1列
awk '{print NR, $0}' filename # 打印行号和整行
awk '{sum += $1} END {print sum}' filename # 求和第1列
awk 'NR>10' filename # 打印第10行之后的内容
awk '/pattern/' filename # 打印匹配pattern的行(类似grep)
awk '$3 > 100' filename # 打印第3列大于100的行
awk '{if($3>100) print $1}' filename # 条件判断awk的基本结构:awk '模式 {动作}' 文件
- 常用内置变量:$0整行,$1第1列,NF列数,NR行号,FS字段分隔符,OFS输出字段分隔符
- BEGIN:处理前执行,END:处理后执行
11. sed:流编辑器
sed是一个流编辑器,可以对文本进行替换、删除、插入等操作。
sed 's/old/new/' filename # 替换每行第一个匹配
sed 's/old/new/g' filename # 全局替换
sed 's/old/new/2' filename # 替换每行第2个匹配
sed '2s/old/new/' filename # 只替换第2行
sed -i 's/old/new/g' filename # 直接修改文件(危险!)
sed '2d' filename # 删除第2行
sed '2,5d' filename # 删除第2到5行
sed '/pattern/d' filename # 删除匹配的行
sed '2a\new line' filename # 在第2行后追加
sed '2i\new line' filename # 在第2行前插入
sed '2c\new line' filename # 替换第2行
sed -n '2,5p' filename # 打印第2到5行
sed -n '/pattern/p' filename # 打印匹配的行(类似grep)注意:sed -i 会直接修改文件,使用前最好备份。
三、系统管理
1. uname:查看系统信息
uname # 显示内核名称
uname -a # 显示所有系统信息
uname -r # 显示内核版本
uname -m # 显示机器硬件架构2. hostname:查看/设置主机名
hostname # 查看主机名
hostname newname # 临时设置主机名(重启失效)3. whoami:显示当前用户名
whoami # 显示当前登录的用户名4. who:显示登录用户
who # 显示当前登录的用户
who -a # 显示详细信息5. w:显示登录用户及操作
w # 显示登录用户及其正在执行的操作6. date:显示/设置时间
date # 显示当前时间
date +"%Y-%m-%d %H:%M:%S" # 格式化显示时间
date -s "2015-09-25 10:00:00" # 设置时间(需要root)
date +%s # 显示时间戳(秒)7. cal:显示日历
cal # 显示当前月日历
cal 2015 # 显示2015年日历
cal 9 2015 # 显示2015年9月日历8. uptime:显示系统运行时间
uptime # 显示系统运行时间、用户数、平均负载输出示例:10:00:00 up 10 days, 2:30, 2 users, load average: 0.10, 0.20, 0.30
- 系统运行了10天2小时30分
- 当前2个用户登录
- 1分钟、5分钟、15分钟平均负载分别为0.10、0.20、0.30
9. free:查看内存使用
free # 查看内存使用情况(KB)
free -m # 以MB为单位
free -g # 以GB为单位
free -h # 人类可读格式输出包括:total(总内存)、used(已使用)、free(空闲)、shared(共享)、buff/cache(缓存)、available(可用)
10. df:查看磁盘使用
df # 查看磁盘使用情况
df -h # 人类可读格式(K/M/G)
df -T # 显示文件系统类型
df -i # 显示inode使用情况11. du:查看目录/文件大小
du # 显示当前目录下各子目录大小
du -h # 人类可读格式
du -sh /dir # 显示目录总大小
du -sh /* # 显示根目录下各目录大小
du -h --max-depth=1 # 显示1层深度的目录大小12. top:实时显示系统进程
top # 实时显示系统进程和资源使用
# 操作:q退出,P按CPU排序,M按内存排序,T按时间排序,k杀死进程,renice调整优先级
top -c # 显示完整命令
top -u username # 只显示某用户的进程
top -p PID # 只显示指定PID的进程top是最常用的系统监控工具,可以实时查看CPU、内存、进程等信息。
13. ps:查看进程
ps # 显示当前终端的进程
ps aux # 显示所有进程(BSD风格)
ps -ef # 显示所有进程(System V风格)
ps -ef | grep nginx # 查找nginx进程
ps -u username # 显示某用户的进程
ps -p PID # 显示指定PID的进程ps aux输出列:USER(用户)、PID(进程ID)、%CPU(CPU使用率)、%MEM(内存使用率)、VSZ(虚拟内存)、RSS(物理内存)、TTY(终端)、STAT(状态)、START(启动时间)、TIME(CPU时间)、COMMAND(命令)
进程状态:R运行,S睡眠,D不可中断睡眠,T停止,Z僵尸,X死亡
14. kill:杀死进程
kill PID # 发送TERM信号终止进程
kill -9 PID # 发送KILL信号强制杀死进程
kill -l # 列出所有信号
killall nginx # 按名称杀死所有nginx进程
pkill nginx # 按名称匹配杀死进程常用信号:1(HUP挂起/重载)、2(INT中断,Ctrl+C)、9(KILL强制杀死)、15(TERM终止,默认)、18(CONT继续)、19(STOP停止)
15. shutdown:关机
shutdown -h now # 立即关机
shutdown -h +10 # 10分钟后关机
shutdown -h 22:00 # 22:00关机
shutdown -r now # 立即重启
shutdown -c # 取消关机其他关机/重启命令:
halt # 关机
poweroff # 关机
reboot # 重启
init 0 # 关机
init 6 # 重启16. useradd:添加用户
useradd username # 添加用户
useradd -m username # 添加用户并创建家目录
useradd -s /bin/bash username # 指定shell
useradd -g group username # 指定所属组
useradd -G group1,group2 username # 指定附加组17. passwd:修改密码
passwd # 修改当前用户密码
passwd username # 修改指定用户密码(需要root)18. userdel:删除用户
userdel username # 删除用户
userdel -r username # 删除用户并删除家目录19. usermod:修改用户
usermod -aG group username # 将用户添加到组
usermod -s /bin/bash username # 修改用户shell
usermod -l newname oldname # 修改用户名20. groupadd/groupdel/groupmod:组管理
groupadd groupname # 添加组
groupdel groupname # 删除组
groupmod -n newname oldname # 修改组名21. su:切换用户
su # 切换到root(需要root密码)
su - # 切换到root并加载环境变量
su username # 切换到指定用户
su - username # 切换到指定用户并加载环境变量22. sudo:以root权限执行
sudo command # 以root权限执行命令
sudo -u user command # 以指定用户权限执行
sudo -i # 切换到root shell
sudo -l # 列出当前用户的sudo权限23. crontab:定时任务
crontab -l # 列出当前用户的定时任务
crontab -e # 编辑当前用户的定时任务
crontab -r # 删除当前用户的定时任务
crontab -u user -l # 列出指定用户的定时任务crontab格式:分 时 日 月 周 命令
- 分:0-59
- 时:0-23
- 日:1-31
- 月:1-12
- 周:0-7(0和7都是周日)
示例:
0 2 * * * /path/to/script.sh # 每天凌晨2点执行
*/5 * * * * /path/to/script.sh # 每5分钟执行
0 0 * * 0 /path/to/script.sh # 每周日凌晨0点执行
0 0 1 * * /path/to/script.sh # 每月1号凌晨0点执行四、网络操作
1. ifconfig:查看/配置网络接口
ifconfig # 查看所有网络接口
ifconfig eth0 # 查看eth0接口
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 设置IP(临时)
ifconfig eth0 up # 启用接口
ifconfig eth0 down # 禁用接口注意:CentOS 7以后,ifconfig默认不安装,需要安装net-tools包,推荐使用ip命令。
2. ip:网络配置工具(新一代)
ip addr # 查看所有网络接口和IP
ip addr show eth0 # 查看eth0接口
ip link # 查看网络链路状态
ip link set eth0 up # 启用接口
ip link set eth0 down # 禁用接口
ip route # 查看路由表
ip route add default via 192.168.1.1 # 添加默认网关
ip neigh # 查看ARP表3. ping:测试网络连通性
ping 192.168.1.1 # ping指定IP
ping www.baidu.com # ping域名
ping -c 4 192.168.1.1 # 发送4个包后停止
ping -i 2 192.168.1.1 # 每隔2秒发一个包
ping -s 1024 192.168.1.1 # 指定包大小1024字节4. netstat:查看网络连接
netstat # 查看所有网络连接
netstat -t # 只显示TCP连接
netstat -u # 只显示UDP连接
netstat -l # 只显示监听端口
netstat -tl # 显示TCP监听端口
netstat -tulnp # 显示所有监听端口和进程(常用!)
netstat -an # 显示所有连接和端口,不解析名称
netstat -rn # 显示路由表
netstat -i # 显示网络接口统计netstat -tulnp 是最常用的,查看所有监听的TCP/UDP端口及对应的进程。
注意:CentOS 7以后,netstat默认不安装,推荐使用ss命令。
5. ss:查看网络连接(新一代)
ss # 查看所有连接
ss -t # 只显示TCP
ss -u # 只显示UDP
ss -l # 只显示监听
ss -tl # 显示TCP监听
ss -tulnp # 显示所有监听端口和进程
ss -s # 显示连接统计6. curl:命令行HTTP客户端
curl http://example.com # 发送GET请求
curl -I http://example.com # 只显示响应头
curl -i http://example.com # 显示响应头和内容
curl -o file.html http://example.com # 下载保存为文件
curl -O http://example.com/file.zip # 下载保存为原文件名
curl -X POST http://example.com/api # 发送POST请求
curl -d "key=value" http://example.com # POST发送数据
curl -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com # 发送JSON
curl -u user:pass http://example.com # 基本认证
curl -L http://example.com # 跟随重定向
curl -k https://example.com # 忽略SSL证书验证
curl -v http://example.com # 显示详细过程
curl --connect-timeout 10 http://example.com # 连接超时10秒curl是非常强大的命令行HTTP客户端,调试API、下载文件都非常方便。
7. wget:命令行下载工具
wget http://example.com/file.zip # 下载文件
wget -O newname.zip http://example.com/file.zip # 下载并重命名
wget -c http://example.com/file.zip # 断点续传
wget -b http://example.com/file.zip # 后台下载
wget -i urls.txt # 从文件读取URL批量下载
wget --limit-rate=100k http://example.com/file.zip # 限速下载
wget -np -r -l 1 http://example.com # 递归下载网站8. ssh:远程登录
ssh user@192.168.1.100 # 登录远程主机
ssh -p 2222 user@192.168.1.100 # 指定端口
ssh -i key.pem user@192.168.1.100 # 指定私钥
ssh -o StrictHostKeyChecking=no user@192.168.1.100 # 不检查主机密钥9. scp:远程复制文件
scp file.txt user@192.168.1.100:/path/ # 本地文件复制到远程
scp user@192.168.1.100:/path/file.txt ./ # 远程文件复制到本地
scp -r dir user@192.168.1.100:/path/ # 递归复制目录
scp -P 2222 file.txt user@192.168.1.100:/path/ # 指定端口10. rsync:远程同步(更强大)
rsync -avz /local/dir/ user@192.168.1.100:/remote/dir/ # 同步本地到远程
rsync -avz user@192.168.1.100:/remote/dir/ /local/dir/ # 同步远程到本地
rsync -avz --delete /local/dir/ user@192.168.1.100:/remote/dir/ # 同步并删除目标多余文件
rsync -avz --progress /local/dir/ user@192.168.1.100:/remote/dir/ # 显示进度rsync参数:-a归档模式,-v详细输出,-z压缩传输,--delete删除目标多余文件,--progress显示进度
11. dig/nslookup:DNS查询
dig www.baidu.com # 查询域名DNS
dig www.baidu.com A # 查询A记录
dig www.baidu.com MX # 查询MX记录
dig www.baidu.com NS # 查询NS记录
dig -x 192.168.1.1 # 反向查询
nslookup www.baidu.com # 查询DNS
nslookup 192.168.1.1 # 反向查询12. traceroute:路由追踪
traceroute www.baidu.com # 追踪到目标的路由
traceroute -n www.baidu.com # 不解析域名,只显示IP13. tcpdump:抓包工具
tcpdump # 抓取所有网络包
tcpdump -i eth0 # 指定网卡
tcpdump port 80 # 抓取80端口的包
tcpdump host 192.168.1.1 # 抓取指定主机的包
tcpdump -i eth0 -w file.pcap # 保存到文件
tcpdump -r file.pcap # 读取文件
tcpdump -nn -i eth0 port 80 # 不解析,显示IP和端口14. iptables:防火墙
iptables -L # 查看规则
iptables -L -n # 不解析,显示IP
iptables -F # 清空规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许80端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许22端口
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许指定网段
iptables -A INPUT -j DROP # 丢弃其他所有(注意顺序!)
iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 删除规则
service iptables save # 保存规则(CentOS 6)
iptables-save > /etc/sysconfig/iptables # 保存规则注意:配置iptables时,一定要先允许SSH端口(22),否则可能把自己锁在外面!CentOS 7默认使用firewalld。
15. firewall-cmd:firewalld防火墙(CentOS 7)
firewall-cmd --state # 查看状态
firewall-cmd --list-all # 查看所有规则
firewall-cmd --list-ports # 查看开放端口
firewall-cmd --permanent --add-port=80/tcp # 永久开放80端口
firewall-cmd --permanent --remove-port=80/tcp # 永久关闭80端口
firewall-cmd --permanent --add-service=http # 永久开放http服务
firewall-cmd --reload # 重新加载配置五、软件包管理
1. RPM包管理(CentOS/RHEL)
rpm -ivh package.rpm # 安装rpm包
rpm -e package # 卸载包
rpm -qa # 查询所有已安装包
rpm -qa | grep nginx # 查询是否安装了nginx
rpm -qi package # 查看包信息
rpm -ql package # 查看包安装的文件
rpm -qf /path/to/file # 查看文件属于哪个包
rpm -Uvh package.rpm # 升级包2. YUM包管理(CentOS/RHEL)
yum install package # 安装包
yum install -y package # 安装包,自动确认
yum remove package # 卸载包
yum update package # 更新包
yum update # 更新所有包
yum list installed # 列出已安装包
yum list available # 列出可安装包
yum list all # 列出所有包
yum info package # 查看包信息
yum search keyword # 搜索包
yum clean all # 清除缓存
yum makecache # 生成缓存
yum provides /path/to/file # 查看文件属于哪个包
yum groupinstall "Group Name" # 安装包组3. DNF包管理(CentOS 8+/Fedora)
DNF是YUM的下一代,用法和YUM基本一致:
dnf install package
dnf remove package
dnf update
dnf search keyword4. APT包管理(Debian/Ubuntu)
apt-get update # 更新软件源
apt-get install package # 安装包
apt-get install -y package # 安装包,自动确认
apt-get remove package # 卸载包(保留配置)
apt-get purge package # 卸载包(删除配置)
apt-get update # 更新包列表
apt-get upgrade # 升级所有包
apt-get dist-upgrade # 升级系统
apt-cache search keyword # 搜索包
apt-cache show package # 查看包信息
dpkg -l # 列出已安装包
dpkg -i package.deb # 安装deb包
dpkg -r package # 卸载包六、压缩和解压
1. tar:打包压缩
tar -cvf archive.tar /dir # 打包(不压缩)
tar -xvf archive.tar # 解包
tar -czvf archive.tar.gz /dir # 打包并gzip压缩
tar -xzvf archive.tar.gz # 解压tar.gz
tar -cjvf archive.tar.bz2 /dir # 打包并bzip2压缩
tar -xjvf archive.tar.bz2 # 解压tar.bz2
tar -cJvf archive.tar.xz /dir # 打包并xz压缩
tar -xJvf archive.tar.xz # 解压tar.xz
tar -tzvf archive.tar.gz # 查看压缩包内容
tar -xzvf archive.tar.gz -C /dir # 解压到指定目录
tar -czvf archive.tar.gz --exclude='*.log' /dir # 排除某些文件tar参数:-c创建,-x解压,-t查看,-v详细输出,-f指定文件名,-z gzip,-j bzip2,-J xz,-C指定目录,--exclude排除
2. gzip/gunzip:gzip压缩
gzip file # 压缩文件(生成file.gz,原文件删除)
gzip -d file.gz # 解压
gunzip file.gz # 解压
gzip -c file > file.gz # 压缩,保留原文件
gzip -r dir # 压缩目录下所有文件3. zip/unzip:zip压缩
zip archive.zip file1 file2 # 压缩文件
zip -r archive.zip /dir # 递归压缩目录
zip -r archive.zip /dir -x "*.log" # 排除文件
unzip archive.zip # 解压
unzip archive.zip -d /dir # 解压到指定目录
unzip -l archive.zip # 查看压缩包内容
unzip -t archive.zip # 测试压缩包完整性4. bzip2/bunzip2
bzip2 file # 压缩(生成file.bz2)
bunzip2 file.bz2 # 解压
bzip2 -d file.bz2 # 解压5. xz/unxz
xz file # 压缩(生成file.xz,压缩率最高)
unxz file.xz # 解压
xz -d file.xz # 解压七、其他常用命令
1. echo:输出
echo "Hello World" # 输出字符串
echo -e "line1\nline2" # 支持转义字符
echo $PATH # 输出环境变量
echo "text" > file # 覆盖写入文件
echo "text" >> file # 追加写入文件2. history:查看命令历史
history # 查看所有历史命令
history 10 # 查看最近10条
!100 # 执行第100条命令
!! # 执行上一条命令
!ls # 执行最近一条以ls开头的命令
history -c # 清空历史3. clear:清屏
clear # 清屏(快捷键Ctrl+L)4. man:查看帮助
man ls # 查看ls命令的手册
man -k keyword # 搜索相关命令
man 5 passwd # 查看第5节(配置文件)5. alias:别名
alias # 查看所有别名
alias ll='ls -la' # 设置别名
unalias ll # 取消别名可以把常用别名写入~/.bashrc,永久生效。
6. which:查找命令位置
which nginx # 查找nginx命令位置
which php # 查找php命令位置7. whereis:查找命令、源码、man手册
whereis nginx # 查找nginx的二进制、源码、man手册8. locate:查找文件(基于数据库)
locate filename # 快速查找文件
updatedb # 更新文件数据库locate比find快,但依赖数据库,新文件可能搜不到,需要updatedb更新。
9. watch:周期性执行命令
watch -n 1 'netstat -tulnp' # 每秒执行一次
watch -d 'ls -la' # 高亮变化10. nohup:后台运行
nohup command & # 后台运行,忽略挂断信号
nohup command > log.txt 2>&1 & # 后台运行并重定向输出11. &:后台运行
command & # 后台运行
jobs # 查看后台任务
fg %1 # 将后台任务调到前台
bg %1 # 将暂停的任务放到后台12. xargs:参数传递
cat urls.txt | xargs wget # 批量下载
find . -name "*.log" | xargs rm # 批量删除(危险!)
echo "a b c" | xargs mkdir # 创建多个目录13. cut:截取文本
cut -d ':' -f 1 /etc/passwd # 以冒号分隔,取第1列
cut -c 1-5 filename # 取每行第1-5个字符14. tr:字符转换
echo "hello" | tr 'a-z' 'A-Z' # 转大写
echo "HELLO" | tr 'A-Z' 'a-z' # 转小写
echo "a:b:c" | tr ':' '\n' # 冒号替换为换行
cat file | tr -d '\r' # 删除Windows换行符15. tee:输出到屏幕和文件
command | tee file.txt # 输出到屏幕并写入文件
command | tee -a file.txt # 追加16. diff:比较文件
diff file1 file2 # 比较两个文件
diff -u file1 file2 # 统一格式输出
diff -r dir1 dir2 # 递归比较目录17. patch:打补丁
patch < patch.diff # 打补丁
patch -p1 < patch.diff # 打补丁(忽略1层目录)
patch -R < patch.diff # 撤销补丁18. lnstat:网络统计
lnstat # 网络统计信息19. vmstat:虚拟内存统计
vmstat # 虚拟内存、进程、CPU统计
vmstat 1 # 每秒刷新
vmstat 1 5 # 每秒刷新,共5次20. iostat:IO统计
iostat # CPU和IO统计
iostat -x # 详细IO统计
iostat 1 # 每秒刷新21. sar:系统活动报告
sar # 查看CPU历史统计
sar -u 1 5 # 每秒采样,共5次
sar -r # 内存统计
sar -n DEV # 网络统计
sar -b # IO统计sar需要安装sysstat包,可以查看历史系统性能数据。
八、Shell脚本基础
Shell脚本,是将一系列Linux命令写入一个文件,批量执行。掌握Shell脚本,能大大提高自动化运维的效率。
1. 第一个脚本
#!/bin/bash
# 这是注释
echo "Hello World!"- 第一行
#!/bin/bash指定解释器 #开头是注释- 保存为hello.sh,执行
chmod +x hello.sh添加执行权限,./hello.sh执行
2. 变量
#!/bin/bash
name="Zhang San" # 定义变量(等号两边不能有空格)
echo $name # 使用变量
echo ${name} # 也可以这样
echo "My name is $name" # 双引号内解析变量
echo 'My name is $name' # 单引号内不解析变量
# 特殊变量
echo $0 # 脚本名
echo $1 # 第一个参数
echo $2 # 第二个参数
echo $# # 参数个数
echo $@ # 所有参数
echo $? # 上一条命令的退出状态(0成功,非0失败)
echo $$ # 当前进程PID3. 条件判断
#!/bin/bash
# if语句
if [ $1 -gt 18 ]; then
echo "成年人"
elif [ $1 -gt 12 ]; then
echo "青少年"
else
echo "儿童"
fi
# 常用比较运算符
# 数字:-eq等于,-ne不等于,-gt大于,-lt小于,-ge大于等于,-le小于等于
# 字符串:=等于,!=不等于,-z空串,-n非空串
# 文件:-e存在,-f普通文件,-d目录,-r可读,-w可写,-x可执行
# 逻辑运算
if [ $a -gt 10 ] && [ $a -lt 20 ]; then
echo "a在10到20之间"
fi
if [ $a -eq 1 ] || [ $a -eq 2 ]; then
echo "a是1或2"
fi
# case语句
case $1 in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
*)
echo "用法: $0 {start|stop|restart}"
;;
esac4. 循环
#!/bin/bash
# for循环
for i in 1 2 3 4 5; do
echo $i
done
for i in {1..10}; do
echo $i
done
for file in *.txt; do
echo $file
done
for ((i=0; i<10; i++)); do
echo $i
done
# while循环
i=0
while [ $i -lt 10 ]; do
echo $i
i=$((i+1))
done
# until循环(条件为假时执行)
i=0
until [ $i -ge 10 ]; do
echo $i
i=$((i+1))
done
# break和continue
for i in {1..10}; do
if [ $i -eq 5 ]; then
break # 跳出循环
fi
echo $i
done
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue # 跳过本次循环
fi
echo $i
done5. 函数
#!/bin/bash
# 定义函数
function greet() {
echo "Hello, $1!"
return 0 # 返回值(0-255)
}
# 调用函数
greet "Zhang San"
# 函数返回值
function add() {
return $(($1 + $2))
}
add 3 5
echo "3+5=$?"
# 局部变量
function test() {
local name="local" # 局部变量
echo $name
}6. 数组
#!/bin/bash
# 定义数组
arr=("apple" "banana" "orange")
# 访问元素
echo ${arr[0]} # 第一个元素
echo ${arr[@]} # 所有元素
echo ${#arr[@]} # 数组长度
echo ${!arr[@]} # 所有索引
# 遍历数组
for item in ${arr[@]}; do
echo $item
done
# 修改元素
arr[0]="pear"
# 添加元素
arr+=("grape")7. 常用脚本示例
备份脚本:
#!/bin/bash
# 备份网站文件
BACKUP_DIR="/backup"
SRC_DIR="/var/www/html"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czvf $BACKUP_DIR/backup_$DATE.tar.gz $SRC_DIR
# 删除7天前的备份
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
echo "备份完成: backup_$DATE.tar.gz"监控脚本:
#!/bin/bash
# 监控磁盘使用率
THRESHOLD=80
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read line; do
usage=$(echo $line | awk '{print $5}' | cut -d'%' -f1)
partition=$(echo $line | awk '{print $6}')
if [ $usage -ge $THRESHOLD ]; then
echo "警告: $partition 使用率 $usage% 超过阈值 $THRESHOLD%"
# 可以发送邮件告警
fi
done批量处理:
#!/bin/bash
# 批量修改文件扩展名
for file in *.txt; do
mv "$file" "${file%.txt}.md"
done九、实用技巧
1. 命令快捷键
- Ctrl + C:终止当前命令
- Ctrl + Z:暂停当前命令(放到后台)
- Ctrl + D:退出当前Shell(EOF)
- Ctrl + L:清屏
- Ctrl + A:光标移到行首
- Ctrl + E:光标移到行尾
- Ctrl + U:删除光标前所有字符
- Ctrl + K:删除光标后所有字符
- Ctrl + W:删除光标前一个单词
- Ctrl + R:搜索历史命令
- Tab:自动补全命令或文件名
- !!:执行上一条命令
- !$:上一条命令的最后一个参数
2. 管道和重定向
# 管道:将前一个命令的输出作为后一个命令的输入
cat file.txt | grep "error" | wc -l
# 重定向
command > file # 标准输出覆盖写入文件
command >> file # 标准输出追加写入文件
command < file # 从文件读取输入
command 2> file # 标准错误覆盖写入
command 2>> file # 标准错误追加
command &> file # 标准输出和错误都写入
command > file 2>&1 # 标准错误重定向到标准输出3. 命令替换
# 两种方式
date1=$(date +%Y%m%d)
date2=`date +%Y%m%d`
echo $date1 $date24. 后台执行
command & # 后台执行
nohup command & # 后台执行,忽略挂断
command > log 2>&1 & # 后台执行并重定向输出5. 查看系统版本
cat /etc/redhat-release # CentOS/RHEL
cat /etc/os-release # 通用
cat /etc/issue # Debian/Ubuntu
uname -a # 内核信息6. 查看CPU信息
cat /proc/cpuinfo # CPU详细信息
lscpu # CPU架构信息
nproc # CPU核心数7. 查看内存信息
cat /proc/meminfo # 内存详细信息
free -h # 内存使用8. 查看开机启动项
chkconfig --list # CentOS 6
systemctl list-unit-files # CentOS 79. 服务管理
# CentOS 6
service nginx start
service nginx stop
service nginx restart
service nginx status
chkconfig nginx on # 开机启动
chkconfig nginx off # 取消开机启动
# CentOS 7
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
systemctl enable nginx # 开机启动
systemctl disable nginx # 取消开机启动10. 日志查看
# 系统日志
tail -f /var/log/messages # CentOS系统日志
tail -f /var/log/syslog # Ubuntu系统日志
tail -f /var/log/secure # 安全日志
tail -f /var/log/cron # 定时任务日志
# 服务日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
tail -f /var/log/mysqld.log总结
Linux命令,是程序员和运维人员的必备技能。掌握常用的Linux命令,能大大提高工作效率,也能更好地管理和维护服务器。
核心要点:
- 文件和目录操作:ls、cd、pwd、mkdir、rm、cp、mv、touch、find、ln、chmod、chown
- 查看文件内容:cat、more、less、head、tail、wc、sort、uniq、grep、awk、sed
- 系统管理:uname、hostname、whoami、date、uptime、free、df、du、top、ps、kill、shutdown、用户管理、crontab
- 网络操作:ifconfig/ip、ping、netstat/ss、curl、wget、ssh、scp、rsync、dig、traceroute、tcpdump、iptables/firewalld
- 软件包管理:rpm/yum/dnf(CentOS)、apt/dpkg(Ubuntu)
- 压缩解压:tar、gzip、zip、bzip2、xz
- 其他:echo、history、man、alias、which、whereis、locate、watch、nohup、xargs、cut、tr、tee、diff、vmstat、iostat、sar
- Shell脚本:变量、条件判断、循环、函数、数组、常用脚本示例
- 实用技巧:快捷键、管道重定向、命令替换、后台执行、系统信息查看、服务管理、日志查看
Linux命令,博大精深,需要在实际使用中不断学习和积累。不要死记硬背,要理解每个命令的作用和用法,在实际工作中多使用,多练习,自然就能熟练掌握。
"工欲善其事,必先利其器。"希望这篇文章,能帮你掌握Linux常用命令,让你的工作更加高效和轻松。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录