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 |
|
|
| w |
|
|
| x |
|
|
| - |
|
|
快速对照表
|
|
|
|
|
|---|---|---|---|
|
|
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):
timedatectltimedatectl list-timezones | grep Shanghaitimedatectl set-timezone Asia/Shanghaitimedatectl
同步系统时间:
# 安装 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