Linux系统中包含数百个命令,其中一些是日常运维和开发中不可或缺的工具。本文将详细介绍150个常用命令,涵盖文件管理、文本处理、进程控制、系统监控、用户管理等多个领域,为初学者和开发者提供实用指南和最佳实践。
Linux作为一款开源操作系统,其命令行工具是高效管理与开发的核心。无论是日常运维还是软件开发,掌握一系列核心命令对于提升工作效率、保障系统稳定性都至关重要。本文将从文件操作、文本处理、系统监控、网络工具、用户管理和进程控制等多个维度,深入解析这些命令的功能、使用场景及最佳实践,为初学者和开发者提供系统性的参考。
文件与目录操作命令
文件与目录是Linux系统中最基本的元素,管理它们的命令是日常操作的核心。以下是一些常用的文件和目录操作命令,它们在系统维护和开发中频繁使用。
ls:列出目录内容
ls命令用于列出目录中的文件和子目录。它提供了丰富的参数,如-l用于显示详细信息,-a显示隐藏文件。
ls -l # 显示详细列表
ls -a # 显示所有文件,包括隐藏文件
cd:切换目录
cd用于切换当前工作目录。使用~可以切换到用户的家目录,.表示当前目录,..表示上一级目录。
cd /home/user # 切换至绝对路径
cd .. # 切换至上一级目录
cd ~ # 切换至用户家目录
mkdir:创建目录
mkdir用于创建新的目录。可以一次创建多个目录,也可以使用-p递归创建嵌套目录。
mkdir new_dir # 创建单个目录
mkdir -p dir1/dir2/dir3 # 递归创建多级目录
touch:创建空文件或更新文件时间
touch命令可以创建一个空文件,或者更新已有文件的访问时间和修改时间。它是开发和运维中处理文件状态的重要工具。
touch new_file # 创建新文件
touch existing_file # 更新文件时间
rm:删除文件或目录
rm用于删除文件或目录。若删除目录,需使用-r参数进行递归删除,同时使用-f参数防止提示信息。
rm file.txt # 删除文件
rm -r dir # 删除目录及其内容
rm -rf dir # 强制删除目录及其内容
rmdir:删除空目录
rmdir用于删除空目录。若目录不为空,需使用rm -r或其他工具进行删除。
rmdir empty_dir # 删除空目录
find:查找文件
find命令用于在指定目录下查找文件或目录。它支持多种条件匹配,例如文件名、大小、修改时间等。
find /path/to/dir -name "file.txt" # 查找文件名匹配的文件
find /path/to/dir -size +10M # 查找大于10MB的文件
tree:以树状图显示目录结构
tree命令可以以树状结构显示目录中的所有文件和子目录,帮助用户快速浏览目录内容。在某些系统中可能需要安装。
tree /path/to/dir # 显示指定目录的树状结构
basename 和 dirname:处理文件路径
basename用于获取文件名,dirname用于获取文件路径的目录部分。这两个命令常用于脚本编写中,以处理文件路径信息。
basename /path/to/file.txt # 输出 file.txt
dirname /path/to/file.txt # 输出 /path/to
查看文件及内容处理命令
在Linux中,查看和处理文件内容是开发和运维的常见任务。以下是一些用于查看文件及处理内容的命令。
cat 和 tac:查看或反向显示文件内容
cat可以显示文件内容,而tac则以反向方式显示文件内容。两者是查看文件内容的基本工具。
cat file.txt # 显示文件内容
tac file.txt # 反向显示文件内容
more 和 less:分页查看文件内容
more和less用于逐页查看文件内容,less提供了更灵活的浏览功能,如上下翻页、搜索等。
more file.txt # 一页一页显示文件
less file.txt # 更灵活的文件浏览方式
head 和 tail:查看文件头部或尾部
head和tail分别用于查看文件的前几行和后几行。tail -f常用于实时监控日志文件。
head -n 5 file.txt # 查看文件前5行
tail -n 5 file.txt # 查看文件后5行
tail -f file.txt # 实时监控日志文件
cut、split 和 paste:文本处理工具
cut用于按指定分隔符切割文件内容,split用于按指定大小或行数分割文件,paste用于将文件合并为列。
cut -d',' -f1 file.txt # 按逗号分隔,显示第一列
split file.txt -l 10 # 按10行分割文件
paste file1.txt file2.txt # 将两个文件合并为列
sort 和 uniq:排序与去重
sort用于对文本文件内容进行排序,uniq用于去除重复行。两者常用于数据处理和日志分析。
sort file.txt # 排序文件内容
uniq file.txt # 去除重复行
wc:统计文件行数、单词数和字节数
wc是一个非常实用的命令,用于统计文件的行数、单词数和字节数,是开发和运维中常用的分析工具。
wc -l file.txt # 统计行数
wc -w file.txt # 统计单词数
wc -c file.txt # 统计字节数
iconv 和 dos2unix:文件编码转换
iconv用于将文件从一种编码转换为另一种编码,dos2unix则专门用于将Windows格式文件转换为Unix格式。
iconv -f ISO-8859-1 -t UTF-8 file.txt # 转换文件编码
dos2unix file.txt # 转换Windows格式为Unix格式
diff 和 vimdiff:比较文件内容
diff用于比较两个文件之间的差异,vimdiff则提供了一个可视化方式来比较文件内容,适用于代码审查和文件修复。
diff file1.txt file2.txt # 比较两个文件的差异
vimdiff file1.txt file2.txt # 可视化比较两个文件
rev、grep/egrep 和 tr:文本处理与搜索
rev用于将文件内容反向显示,grep和egrep用于文本搜索,tr用于字符转换或删除。
rev file.txt # 反向显示文件内容
grep "pattern" file.txt # 搜索文件中包含指定模式的行
tr 'a-z' 'A-Z' file.txt # 将文件内容转换为大写
网络操作命令
网络是现代系统运行的基础,掌握网络操作命令对于系统管理和开发任务至关重要。
ping、traceroute 和 nslookup
ping用于测试主机间的网络连通性,traceroute用于追踪数据包的路径,nslookup用于查询DNS信息。
ping example.com # 测试网络连通性
traceroute example.com # 显示数据包路径
nslookup example.com # 查询域名解析信息
ssh、scp 和 telnet
ssh用于安全远程登录,scp用于安全复制文件,telnet用于不安全的远程连接。
ssh user@example.com # 远程登录
scp file.txt user@example.com:/path/to/dest # 安全复制文件
telnet example.com 22 # 远程连接(不安全)
wget:从网络下载文件
wget是一个功能强大的网络下载工具,可以递归下载网页内容,适用于自动化部署和数据采集。
wget http://example.com/file.txt # 下载文件
wget -r http://example.com/ # 递归下载整个网站
nmap:网络扫描工具
nmap是一个功能丰富的网络扫描和安全分析工具,用于探测网络中的主机和服务。
nmap 192.168.1.0/24 # 扫描本地网络中的主机
nmap -sV example.com # 探测目标主机的开放端口和服务版本
netstat 和 ss:网络状态监控
netstat用于显示网络连接、路由表和接口信息,而ss是其更快、更高效的替代工具。
netstat -tuln # 显示所有监听的TCP和UDP端口
ss -tuln # 更快速的网络状态查看方式
ifconfig、ifup 和 ifdown
ifconfig用于查看和设置网络接口配置,ifup和ifdown用于启动和关闭网卡。
ifconfig eth0 # 查看eth0网卡配置
ifup eth0 # 启动eth0网卡
ifdown eth0 # 关闭eth0网卡
route:网络路由管理
route命令用于查看和设置Linux系统的路由表,是网络配置的重要工具。
route -n # 显示路由表
route add -host 192.168.1.100 dev eth0 # 添加路由规则
系统管理与性能监视命令
Linux系统管理离不开对系统状态和性能的监控,以下是一些常用系统管理与性能监视命令。
uname 和 hostname
uname用于显示系统信息,而hostname用于查看或设置系统主机名。
uname -a # 显示完整的系统信息
hostname # 查看当前主机名
uptime 和 dmesg
uptime用于显示系统运行时间和负载情况,dmesg用于查看系统日志和启动信息。
uptime # 显示系统运行时间和负载
dmesg # 查看内核日志和系统启动信息
df 和 du
df用于查看磁盘空间使用情况,du用于查看目录或文件占用的磁盘空间。
df -h # 查看磁盘空间(以人类可读格式)
du -sh /path/to/dir # 查看目录大小
top 和 free
top用于实时监控系统资源使用情况,free用于查看内存使用情况。
top # 实时监控进程和系统资源
free -h # 查看内存使用情况
vmstat 和 iostat
vmstat用于查看虚拟内存和系统状态信息,iostat用于监控磁盘I/O和CPU使用率。
vmstat 1 # 每秒刷新一次系统状态
iostat -x 1 # 查看磁盘I/O和CPU使用情况
sar:系统活动报告
sar是System Activity Reporter,可以记录和分析系统的性能数据,包括CPU、内存、磁盘和网络使用情况。
sar -u 1 # 查看CPU使用情况
sar -r 1 # 查看内存使用情况
strace 和 ltrace:进程追踪工具
strace用于追踪进程调用系统调用的情况,ltrace用于追踪库函数调用。
strace -f ./my_program # 跟踪进程的系统调用
ltrace ./my_program # 跟踪进程的库函数调用
ipcs 和 ipcrm:进程间通信管理
ipcs用于显示进程间通信设施的状态,ipcrm用于删除这些设施。
ipcs -m # 显示共享内存信息
ipcrm -m # 删除共享内存
用户管理命令
Linux系统是多用户多任务系统,用户管理是系统安全和权限控制的基础。以下是一些用户管理命令。
useradd、usermod 和 userdel
useradd用于创建新用户,usermod用于修改用户属性,userdel用于删除用户。
useradd newuser # 创建新用户
usermod -aG sudo newuser # 将用户添加到sudo组
userdel newuser # 删除用户
groupadd:创建用户组
groupadd用于创建新的用户组,是权限管理的重要工具。
groupadd developers # 创建开发者组
passwd 和 chage:密码管理
passwd用于更改用户密码,chage用于管理密码的有效期。
passwd newuser # 更改用户密码
chage -M 90 newuser # 设置密码有效期为90天
id、su 和 visudo:用户身份与权限管理
id用于显示用户ID和所属群组,su用于切换用户身份,visudo用于编辑/etc/sudoers文件。
id user # 显示用户信息
su - user # 切换用户身份
visudo # 编辑sudo权限文件
sudo:权限提升
sudo允许普通用户以管理员身份执行命令,避免直接使用root账户。
sudo apt update # 以管理员权限执行命令
系统权限及授权命令
Linux系统中权限管理至关重要,以下是一些用于权限控制的命令。
chmod 和 chown:文件权限控制
chmod用于修改文件或目录的权限,chown用于修改文件或目录的拥有者。
chmod 755 file.txt # 修改文件权限
chown user:group file.txt # 修改文件拥有者和群组
chgrp:修改群组
chgrp用于修改文件或目录所属的群组,常用于权限集中管理。
chgrp developers file.txt # 将文件所属群组设为developers
umask:设置默认权限
umask用于设置文件和目录的默认权限掩码,避免权限配置错误。
umask 022 # 设置默认权限掩码为022
系统关机与重启命令
Linux系统提供了多种方式来进行关机、重启和查看系统信息。
shutdown、halt、poweroff 和 logout
shutdown用于安全关机,halt用于停止系统,poweroff用于关闭系统并切断电源,logout和exit用于退出当前会话。
shutdown -h now # 立即关机
halt # 停止系统
poweroff # 关闭系统并切断电源
logout # 退出当前会话
exit # 退出当前会话
进程管理相关命令
Linux中的进程管理是系统资源调度和性能优化的核心。以下是一些常用进程管理命令。
bg、fg 和 jobs
bg用于将进程放入后台运行,fg用于将后台进程调至前台运行,jobs用于查看后台运行的进程列表。
bg %1 # 将进程1放入后台运行
fg %1 # 将进程1调至前台
jobs # 查看后台运行的进程
kill、killall 和 pkill
kill用于终止指定进程,killall用于终止所有同名进程,pkill则通过进程名终止进程。
kill 1234 # 终止进程ID为1234的进程
killall my_program # 终止所有名为my_program的进程
pkill my_program # 通过进程名终止进程
运维工具与系统优化
Linux运维中常用的工具包括Docker和监控工具,它们在系统部署和性能优化中发挥着重要作用。
Docker:容器化开发与部署
Docker是一个容器化平台,可以快速部署、测试和管理应用程序。通过Docker,开发者可以实现环境隔离和快速部署。
docker run hello-world # 运行一个Docker容器
docker ps # 查看运行中的容器
docker logs container_id # 查看容器日志
监控工具:top、htop、iotop 和 nmon
top是一个基础的性能监控工具,htop和iotop提供了更友好的界面和更详细的资源监控功能,nmon则是用于实时系统性能监控的工具。
top # 查看实时进程和资源使用情况
htop # 可视化性能监控工具
iotop # 监控磁盘I/O
nmon # 实时系统性能监控工具
日志分析工具:journalctl、logrotate 和 grep
journalctl用于查看系统日志,logrotate用于自动轮转日志文件,grep可以用于筛选日志中的关键信息。
journalctl -u sshd # 查看sshd服务的日志
logrotate /etc/logrotate.conf # 执行日志轮转配置
grep "error" /var/log/syslog # 筛选日志中的错误信息
Shell脚本与自动化
Shell脚本是Linux系统中实现自动化运维和提高效率的重要工具。掌握基本的脚本编写技巧,可以显著提升工作效率。
基础Shell脚本语法
Shell脚本通常以.sh为扩展名,使用#!/bin/bash指定解释器。脚本中可以使用变量、条件判断和循环等控制结构。
#!/bin/bash
echo "Hello, World!"
echo、printf 和 history
echo用于输出文本,printf用于格式化输出,history用于查看历史命令。
echo "This is a message" # 输出消息
printf "Formatted: %s\n" "Hello" # 格式化输出
history # 查看历史命令
alias 和 unalias:命令别名
alias用于设置命令别名,unalias用于删除别名。别名可以帮助简化复杂命令,提高操作效率。
alias ll='ls -l' # 设置别名ll为ls -l
unalias ll # 删除别名
watch:周期性执行命令
watch命令用于周期性地执行指定命令,并将输出以全屏方式显示,常用于监控系统状态。
watch -n 1 free # 每秒查看内存使用情况
Linux编程与系统调用
Linux系统编程涉及进程、线程、信号、IO模型等多个核心概念,掌握这些技术是开发高性能系统的关键。
进程与线程管理
在Linux系统编程中,进程和线程是基本的执行单元。使用fork()和exec()可以创建和执行新进程,pthread用于创建线程。
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
printf("Child process\n");
} else {
printf("Parent process\n");
}
return 0;
}
信号处理
Linux中的信号是进程间通信的一种方式,常用的信号包括SIGINT(Ctrl+C)、SIGKILL(强制终止进程)等。使用signal()函数处理信号。
#include <signal.h>
#include <stdio.h>
void handle_sigint(int sig) {
printf("Received SIGINT\n");
}
int main() {
signal(SIGINT, handle_sigint);
while (1) {
sleep(1);
}
return 0;
}
IO模型与文件操作
Linux中的IO模型包括阻塞IO、非阻塞IO、多路复用IO和异步IO。read()和write()函数用于文件读写,open()和close()用于文件操作。
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int fd = open("file.txt", O_WRONLY);
if (fd == -1) {
perror("open");
return 1;
}
write(fd, "Hello, World!", 13);
close(fd);
return 0;
}
系统调用与资源管理
Linux提供了丰富的系统调用接口,用于操作文件、进程、内存等系统资源。掌握这些调用对系统性能优化至关重要。
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("file.txt", O_CREAT | O_WRONLY, 0644);
if (fd == -1) {
perror("open");
return 1;
}
write(fd, "Hello, World!", 13);
close(fd);
return 0;
}
最佳实践与建议
为了提高Linux系统的稳定性和安全性,开发者和运维人员应遵循以下最佳实践:
- 权限最小化:避免将普通用户权限提升至root,使用
sudo进行权限管理。 - 日志轮转:使用
logrotate进行日志管理,避免日志过大影响系统性能。 - 命令别名:使用
alias来简化常用命令,防止误操作。 - 自动化脚本:编写自动化脚本以提高运维效率,减少重复操作。
- 监控与调优:使用
top、free、iostat等工具监控系统性能,优化资源使用。 - 容器化部署:使用Docker进行应用部署,实现快速、可移植的开发环境。
关键字列表
Linux, 命令, 文件管理, 进程管理, 系统监控, Shell脚本, Docker, 网络工具, 权限控制, 信号处理