Linux(Ubuntu)常用命令整合,使用频率高达99%

文件与目录操作

  • ls: 列出目录内容。

ls: 列出当前目录下的文件和文件夹(不包括以 . 开头的隐藏文件)。

ls -l: 以长格式详细列出文件和文件夹的权限、所有者、大小、修改时间等信息。

ls -a: 列出所有文件,包括隐藏文件(以 . 开头)。

ls -lh: 结合 -l 和 -h,以长格式列出,并将文件大小以人类可读的方式(K, M, G)显示。

  • cd: 切换当前工作目录。

cd /home/user: 切换到 /home/user 目录。

cd ..: 切换到上级目录。

cd ~ 或 cd: 切换到用户的主目录。

cd -: 切换到上一次所在的目录。

  • pwd: 显示当前所在的工作目录的绝对路径。

pwd: 输出类似 /home/user/my_project。

  • mkdir: 创建新的目录。

mkdir new_dir: 在当前目录下创建名为 new_dir 的目录。

mkdir -p path/to/new_dir: 递归创建多级目录。如果 path 和 to 目录不存在,会先创建它们,再创建 new_dir。

  • rmdir: 删除空的目录。

rmdir empty_dir: 只有当 empty_dir 目录为空时才能成功删除它。

注意:要删除非空目录,请使用 rm -r dir_name。

  • cp: 复制文件或目录。

cp file1.txt file2.txt: 将 file1.txt 复制一份并命名为 file2.txt。

cp -r source_dir target_dir: 递归复制整个目录 source_dir 到 target_dir。

cp -i file1.txt file2.txt: 在覆盖 file2.txt 之前询问确认(interactive)。

  • mv: 移动文件或目录,或者重命名文件或目录。

mv file.txt /path/to/new/location/: 将 file.txt 移动到指定路径。

mv old_name.txt new_name.txt: 将 old_name.txt 重命名为 new_name.txt。

mv dir1 dir2: 将目录 dir1 重命名为 dir2(如果 dir2 不存在),或者将 dir1 移动到 dir2 目录下(如果 dir2 存在)。

  • rm: 删除文件或目录。

rm file.txt: 删除名为 file.txt 的文件。

rm -r directory_name: 递归删除 directory_name 目录及其内部的所有内容(极其危险,请谨慎使用)。

rm -f file.txt: 强制删除 file.txt,不提示确认(force)。

rm -rf directory_name: 强制递归删除目录,非常危险的命令,几乎不给反悔的机会。

  • touch: 更新文件的访问时间和修改时间为当前时间。如果文件不存在,则创建一个空文件。

touch new_file.txt: 如果 new_file.txt 不存在,则创建它;如果存在,则更新其时间戳。

touch -d "2 days ago" file.txt: 将 file.txt 的时间戳设置为两天前。

  • find: 在指定目录及其子目录中查找文件或目录。

find /home/user -name "*.log": 在 /home/user 目录下查找所有以 .log 结尾的文件。

find . -type d -name "test*": 在当前目录 (.) 下查找所有以 test 开头的目录 (-type d)。

find /var/log -mtime -7: 查找 /var/log 目录下最近7天内被修改过的文件。

文件内容查看与编辑

  • cat: 连接文件内容并打印到标准输出。

cat file.txt: 显示 file.txt 的全部内容。

cat file1.txt file2.txt > combined.txt: 将 file1.txt 和 file2.txt 的内容合并,并保存到 combined.txt。

cat > newfile.txt: 创建一个新文件 newfile.txt,并将键盘输入的内容写入其中(按 Ctrl+D 结束输入)。

  • less / more: 分页查看文件内容。

less large_log_file.log: 分页查看大日志文件。less 功能更强,可以向上翻页(按 Up 或 b 键),q 退出。

more README.md: 也是分页查看,但只能向下翻页(按空格键),不如 less 方便。

  • head / tail: 查看文件的开头或结尾部分。

head -n 10 file.txt: 查看 file.txt 的前10行。

tail -n 20 file.log: 查看 file.log 的最后20行。

tail -n +100 file.txt: 从第100行开始,显示 file.txt 的剩余所有内容。

tail -f: 实时追踪文件末尾新增的内容,非常适合监控日志。

tail -f /var/log/nginx/access.log: 实时显示 Nginx 访问日志的新条目,直到手动按 Ctrl+C 停止。

  • vim : 文本编辑器。
# 完整操作流程vim hello.py(启动 vim 编辑 hello.py文件)按  i  进入插入模式输入内容 ("Hello, Vim!")按 Esc返回普通模式按 :进入命令行模式输入 :wq! 并按回车,保存并退出 Vim# 快速清空文件内容ggdG

基本操作

# 移动光标h:左移一个字符。j:下移一行。k:上移一行。l:右移一个字符。w:跳到下一个单词的开头。b:跳到上一个单词的开头。0 (零):移动到行首。$ :移动到行尾。gg:移动到文件开头。G:移动到文件结尾。<N>G:移动到第 N 行(例如 5G 移动到第 5 行)。
# 删除 (Delete)x:删除光标处的字符。dd:删除整行(剪切)。<N>dd:删除从当前行开始的 N 行(例如 5dd 删除5行)。dw:删除一个单词。d $ :删除到行尾。d0:删除到行首。
:w:保存文件。:q:退出 Vim:wq 或 :x:保存并退出。:q!:强制退出,不保存任何更改。:w filename:将当前内容另存为 filename。
  • nano : 文本编辑器。
启动:nano filename.txt:打开或创建 filename.txt编辑:直接输入/删除文本。保存:Ctrl + O:保存文件。按 Enter 确认文件名。退出:Ctrl + X:退出。如有修改未保存,按 Y 保存,N 不保存。
 

文件权限管理

  • sudo

sudo = Super User DO(以超级用户身份执行)

它是 Linux/Unix 系统中用于临时获取管理员权限执行命令的工具,让你无需登录 root 账户就能完成系统管理操作。

  • chmod: 改变文件或目录的读、写、执行权限。

添加执行权限

# 递归地将指定路径下的所有文件和目录的权限设置为拥有者可读、可写、可执行chmod -R 755 [目录或文件路径]

给文件执行权限

# 给指定路径的文件或目录,对所有用户类别都增加执行权限chmod +x [目录或文件路径]

权限操作符有三种

符号
含义
作用
+ 添加
给指定用户加上某项权限
- 移除
给指定用户去掉某项权限
= 设置/覆盖 精确设定权限,其他权限会被清除

基本权限含义

符号
含义
数值
r
可读(read)
4
w
可写(write)
2
x
可执行(execute)
1
-
无权限
0

快速对照表

需求
数字写法
符号写法(推荐)
权限字符串
只读(所有人)
444 chmod a=r file -r--r--r--
可读写(仅自己)
600 chmod u=rw,go= file -rw-------
可读写(自己+组)
660 chmod ug=rw,o= file -rw-rw----
可读写(所有人)
666 chmod a=rw file -rw-rw-rw-
可执行(标准脚本)
755 chmod u=rwx,go=rx file -rwxr-xr-x
完全控制(仅自己)
700 chmod u=rwx,go= file -rwx------
  • chown: 改变文件或目录的所有者。

sudo chown newuser file.txt: 将 file.txt 的所有者改为 newuser 用户。

sudo chown user:group directory/: 将 directory 的所有者改为 user,所属组改为 group。

  • chgrp: 改变文件或目录的所属用户组。

sudo chgrp developers project_folder/: 将 project_folder 目录的所属组改为 developers。

搜索与过滤

  • grep: 在文件内容中搜索匹配特定模式的行。

grep "error" application.log: 在 application.log 中搜索包含 "error" 的行。

grep -i "Error" file.txt: 忽略大小写搜索 "Error"。

grep -r "TODO" ./src/: 在 ./src/ 目录及其子目录下递归搜索包含 "TODO" 的所有文件和行。

grep -n "pattern" file.txt: 显示匹配行的同时显示行号。

ps aux | grep nginx: 使用管道符 | 将 ps aux 的输出作为 grep 的输入,查找正在运行的 nginx 进程。

  • which: 查找命令的完整路径。

which python3: 输出 Python3 解释器的路径,如 /usr/bin/python3。

whereis: 快速查找二进制程序、源代码、帮助文档的位置。

whereis ls: 输出 ls 命令的二进制文件、源码、手册页的位置。

  • locate: 通过预先构建的数据库快速查找文件路径。

locate *.conf: 查找系统中所有以 .conf 结尾的配置文件路径。注意:数据库通常每天更新一次,刚创建的文件可能找不到,可以手动用 sudo updatedb 更新。

进程管理

  • ps: 显示当前运行的进程快照。

ps aux: 显示所有用户的详细进程信息(a=all, u=user format, x=processes without a terminal)。

ps -ef: 显示所有进程的完整格式列表。

# 列出系统中所有用户的Java进程# | 管道符,将前一个命令的输出作为后一个命令的输入ps aux | grep java
# 格式清晰,容易阅读,同样能看到启动命令和用户ps -ef | grep java
# 直接输出PID列表,非常简洁,常用于脚本中获取PIDpgrep -f java
#找到Java进程的PID后ps -p <PID> -f
  • top / htop: 实时显示系统进程和资源使用情况。

top: 运行 top,进入一个实时刷新的界面,显示 CPU、内存占用最高的进程。按 q 退出。

htop: 运行更友好的 top 版本,通常可以用方向键选择进程并直接操作(如终止),颜色也更丰富。如果未安装,通常可以通过包管理器安装。

# 只输出一次(快照)top -b -n 1# 输出两次,间隔2秒top -b -n 2 -d 2# 输出java进程top | grep java
  • kill / killall: 终止进程。

kill 1234: 向 PID 为 1234 的进程发送默认的 TERM 信号,请求其正常退出。

kill -9 1234: 向 PID 为 1234 的进程发送 KILL 信号,强制终止该进程(-9 是 SIGKILL 信号)。

killall firefox: 终止所有名为 firefox 的进程。

kill -9 <PID>
  • nohup: 使命令忽略挂起信号,在终端关闭后继续运行。

nohup ./long_running_script.sh &: 启动一个长时间运行的脚本,并将其放入后台。即使关闭终端,脚本也会继续运行。输出会被重定向到 nohup.out 文件。

后台运行命令

# 后台运行,并且有nohup.out输出nohup xxx &# 后台运行, 不输出任何日志nohup xxx > /dev/null &# 后台运行, 并将错误信息做标准输出到日志中 nohup xxx >out.log 2>&1 &

网络操作

  • ping: 测试网络连通性。

ping google.com: 持续向 Google 发送 ICMP 请求包,测试网络延迟和连通性。按 Ctrl+C 停止。

ping -c 4 example.com: 只发送 4 个包,然后停止。

  • curl: 命令行数据传输工具。

curl http://example.com: 获取并打印网页内容到终端。

curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com: 发送一个 POST 请求到 API,携带 JSON 数据。

curl -O https://example.com/file.zip: 下载 file.zip 并保存到当前目录。

# 查看网络ipcurl cip.cc
  • wget: 非交互式网络下载器。

wget https://example.com/file.tar.gz: 下载文件。

wget -c https://example.com/large_file.iso: 断点续传下载大文件。

  • netstat: 显示网络连接、路由表等信息。

netstat -tuln: 列出所有监听的 TCP (-t) 和 UDP (-u) 端口 (-l),并以数字形式显示地址和端口号 (-n)。

netstat -anp | grep :80: 查看哪个进程 (-p) 正在监听 80 端口。

  • ss: netstat 的现代替代品。

ss -tuln: 功能与 netstat -tuln 类似,但速度更快。

ss -p state listening: 查看所有监听状态的套接字及其关联的进程。

  • ssh: 安全地登录远程服务器。

ssh username@hostname_or_ip: 例如 ssh user@192.168.1.100,连接到远程服务器。

ssh -p 2222 user@server.com: 连接到使用非标准端口(2222)的 SSH 服务。

  • scp / rsync: 安全复制文件。

scp

scp local_file.txt user@remote_host:/path/to/destination/: 将本地文件复制到远程服务器。

scp -r local_directory/ user@remote_host:/remote/path/: 递归复制整个目录。

rsync

rsync -avz source_dir/ destination_dir/: 高效地同步两个目录,-a 归档模式,-v 详细输出,-z 压缩传输。

# 同步本地目录到远程rsync -avz /path/to/local/directory/ username@remote_server_ip:/path/to/remote/directory/# 同步单个文件到远程rsync -avz /path/to/local/file.txt username@remote_server_ip:/path/to/remote/directory/# 指定端口 rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_server_ip:/path/to/remote/directory/

压缩与解压

  • tar: 打包/解包归档文件。

压缩 (递归打包目录):

tar -czf archive.tar.gz folder_to_compress/: 递归创建 .tar.gz 压缩包。

tar -cjf archive.tar.bz2 folder_to_compress/: 递归创建 .tar.bz2 压缩包。

解压:

tar -zxvf archive.tar.gz: 解压 .tar.gz 文件。

tar -xjf archive.tar.bz2: 解压 .tar.bz2 文件。

  • zip / unzip: 处理 .zip 格式。

压缩 (递归打包目录):

zip -r archive.zip folder_to_compress/: 递归创建 .zip 压缩包。

解压:

unzip archive.zip: 解压 .zip 文件到当前目录。

unzip -l example.zip:如果你只是想查看`.zip`文件中的内容

  • gzip / gunzip: 压缩/解压 .gz 文件

压缩:

gzip file.txt:将 file.txt 压缩为 file.txt.gz (原文件被删除)。

gzip -r directory/:递归压缩 directory/ 下的所有文件。

解压:

gunzip file.txt.gz:将 file.txt.gz 解压为 file.txt (压缩文件被删除)。

gunzip -r directory/:递归解压 directory/ 下的所有 .gz 文件。

系统与环境信息

  • df: 报告磁盘空间使用情况 (常用选项: -h)

df: 显示所有挂载的文件系统的总体磁盘使用情况。

df -h: 以人类可读的格式(K, M, G, T)显示磁盘使用情况。

du: 估计文件或目录的空间使用情况 (常用选项: -sh, -h)

du directory/: 显示 directory/ 下每个子目录和文件的大小。

du -s directory/: 只显示 directory/ 总共占用的空间大小。

du -sh directory/: 以人类可读的格式显示 directory/ 的总大小。

  • free: 显示内存使用情况 (常用选项: -h)

free: 显示物理内存和交换空间的使用情况(单位为 KiB)。

free -h: 以人类可读的格式(M, G)显示内存使用情况。

  • uname: 显示系统信息 (常用选项: -a, -r)

uname: 显示操作系统名称。

uname -r: 显示内核版本。

uname -a: 显示所有系统信息(内核名、网络节点名、内核版本、内核发布时间、机器类型、处理器类型、硬件平台、操作系统)。

  • env: 显示所有环境变量

env: 列出当前所有的环境变量及其值。

  • echo: 打印变量或字符串

echo "Hello World": 打印字符串 "Hello World"。

echo  $ HOME: 打印 HOME 环境变量的值。

  • history: 查看执行过的命令历史

history: 显示当前会话或从历史文件加载的命令历史列表。

history 10: 只显示最近的10条命令。

  • export: 设置环境变量

export MY_VAR="value": 设置一个名为 MY_VAR 的环境变量,其值为 "value"。

export PATH= $ PATH:/new/directory: 将 /new/directory 添加到 PATH 环境变量中。

  • time: 测量命令执行的时间

time command_to_run: 执行 command_to_run 并报告其执行所花费的用户态时间、内核态时间和实际流逝时间。

date: 显示或设置系统日期和时间

date: 显示当前的日期和时间。

date "+%Y-%m-%d %H:%M:%S": 按照指定格式打印当前日期时间。

设置系统时区为北京时间(Asia/Shanghai):

# 查看当前时区timedatectl# 列出所有可用时区timedatectl list-timezones | grep Shanghai# 设置时区为北京时间timedatectl set-timezone Asia/Shanghai# 验证设置timedatectl

同步系统时间:

# 安装 ntpdateapt install ntpdate# 立即同步时间(手动一次)ntpdate -u ntp.aliyun.com# 常用国内 NTP 服务器ntp.aliyun.com        # 阿里云ntp.tencent.com       # 腾讯云cn.pool.ntp.org       # 国内 NTP 池time.windows.com      # 微软
自动后台同步:
# 启动时间同步服务systemctl start systemd-timesyncdsystemctl enable systemd-timesyncd# 配置 NTP 服务器(可选)nano /etc/systemd/timesyncd.conf
  • 查看系统,CPU信息
# 查看系统内核信息uname -a# 查看系统内核版本cat /proc/version# 查看当前用户环境变量envcat /proc/cpuinfo# 查看有几个逻辑cpu, 包括cpu型号cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c# 查看有几颗cpu,每颗分别是几核cat /proc/cpuinfo | grep physical | uniq -c
  • SSH Key 

# 生成 SSH Key 对ssh-keygen -t ed25519 -C "your_email@example.com"# 完成后,在本地的 ~/.ssh/目录下生成了两个文件:# id_ed25519: 你的私钥,必须严格保密,不要分享给别人。# id_ed25519.pub: 你的公钥,可以安全地提供给服务器。

将公钥复制到远程服务器

将你的公钥内容添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

最简单的方法是使用 ssh-copy-id 命令:

# 复制到远程服务器ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote_server_ip# -i ~/.ssh/id_ed25519.pub: 指定你要复制的公钥文件。# username: 你在远程服务器上的用户名。# remote_server_ip: 远程服务器的 IP 地址或域名。

系统会要求你输入一次远程服务器的密码(这是最后一次需要输密码)。

输入密码后,ssh-copy-id会自动将你的公钥追加到远程服务的 ~/.ssh/authorized_keys文件中。以后就可以直接用 ssh username@remote_server_ip 登录,无需密码

  • 软链接

创建

ln -s 目标文件 链接名
查看

ls -l# 输出示例:# lrwxrwxrwx 1 user user 9 Feb  6 10:00 doc_link -> document.txt# ↑ 开头的 l 表示这是软连接
删除
# 正确做法:只删除链接本身rm doc_link# ⚠️ 危险!如果加了 / 会删除原目录内容rm doc_link/     # ❌ 不要这样做!
常用
# 安装多个 Python 版本/usr/bin/python3.8/usr/bin/python3.9/usr/bin/python3.11# 通过软连接灵活切换默认版本ln -sf /usr/bin/python3.11 /usr/bin/python# 想换版本?一键切换ln -sf /usr/bin/python3.9 /usr/bin/python
阅读剩余
THE END