Linux基础命令详解:从入门到精通
本文整理了Linux系统中最常用的基础命令,每个命令都配有详细说明和具体示例,帮助你快速掌握Linux操作技巧。文章中用的终端是XShell,系统是Centos
📁 1. ls - 列出目录(文件夹)内容
功能:显示当前目录下的文件和子目录信息
常用选项:
-a
:显示隐藏文件(以.
开头的文件)-l
:详细信息格式(权限/所有者/大小等)-F
:用符号标记文件类型(*/@/=
等)
$ ls# 列出当前目录内容
file.txtdir$ ls -a# 显示所有文件(含隐藏文件)
....hiddenfile.txt$ ls -lF# 详细格式并标记类型
-rw-r--r-- 1 user group 0 Jan 12 file.txt*
drwxr-xr-x 2 user group 4096 Jan 12 dir/
图片中出现ls -l
的输出:
每个字段的含义:
字段位置 | 含义说明 | 示例解释 |
---|---|---|
第1位 | 文件类型 | - :普通文件;d :目录;l :符号链接;b :块设备(如硬盘) |
第2-10位 | 权限位(3组) | 每组3位,对应所有者(u)、组(g)、**其他用户(o)**的权限:r (读,4)、w (写,2)、x (执行,1)示例 rw-r--r-- :- 所有者:读+写(rw-) - 组用户:读(r–) - 其他用户:读(r–) |
第11位 | 硬链接数 | 1 :该文件有1个硬链接(可理解为“引用计数”) |
第12位 | 所有者 | user :文件所属用户 |
第13位 | 所属组 | group :文件所属用户组 |
第14位 | 文件大小 | 1024 :字节(加-h 选项显示为1K ,更易读) |
第15-17位 | 修改时间 | Jan 12 14:30 :文件最后修改时间 |
第18位起 | 文件名/目录名 | file.txt :文件名;dir/ :目录(-F 选项标记) |
注意:这些都属于文件的属性信息
文件 = 文件的内容 + 文件的属性
所以就比如在windows上新建一个空文件,并不是真的不占磁盘空间
📍 2. pwd - 显示当前路径
功能:打印当前工作目录的绝对路径
$ pwd
/home/user/documents
📂 3. cd - 切换目录
功能:更改当前工作目录
特殊路径:
..
:上级目录~
:用户家目录-
:返回上次目录
语法:cd 目录名
$ cd /var/log# 切换到绝对路径
$ cd ..# 返回上级目录
$ cd ~/downloads # 进入家目录的downloads
$ cd -# 返回上次所在目录
cd 可以理解为我们的鼠标的那个箭头,cd 某个目录就可以进入到这个目录里
补充:路径的认识
Linux系统中,磁盘上的文件和目录被组成⼀棵目录树,每个节点都是目录或文件
• 其中普通文件⼀定是目录树的叶子节点
• 目录可能是叶子(空目录), 也可能是路上节点
• 理解路径存在的意义: 树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯⼀性的方案来进行定位文件。其中任何⼀个节点,都只有⼀个父节点,所以,从根目录开始,定位指定文件,路径具有唯⼀性
• 绝对路径:⼀般从/开始,不依赖其他目录的定位文件的方式
• 相对路径:相对于当前用户所处目录,定位文件的路径方式
• 绝对路径⼀般不会随着用户的路径变化而丧失唯⼀性,⼀般在特定服务的配置文件中经常被使用
• 相对路径因为它的便捷性,⼀般在命令行中使用较多
如图,退到根目录就无法再退了
$ tree //查看当前树目录结构
//系统默认是没有的,需要安装
centos:yum install -y tree
ubuntu: apt install -y tree
如果遇到文件很多刷屏停不下来就按 ctrl + c,随便一说 clear 这个指令可以清屏
✏️ 4. touch - 创建空文件/更新时间戳
功能:
- 创建新文件
- 更新文件访问/修改时间
语法:touch [选项]… 文件…
$ touch newfile.txt# 创建空文件
$ touch -a file.txt# 只更新访问时间
$ touch -m file.txt# 只更新修改时间
📂 5. mkdir - 创建目录
语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
选项:-p
:递归创建多级目录
$ mkdir new_dir# 创建单级目录
$ mkdir -p a/b/c/d# 创建多级目录
目录结构:
a/
└── b/
└── c/
└── d/
🗑️ 6. rmdir & rm - 删除文件/目录
rmdir:删除空目录
$ rmdir empty_dir# 删除空目录
$ rmdir -p a/b/c# 递归删除空目录
rm:删除文件/目录
选项:
-r
:递归删除-f
:强制删除-i
:交互确认
$ rm file.txt# 删除文件
$ rm -r mydir# 递归删除目录
$ rm -ri dir# 交互式递归删除
📚 7. man - 查看帮助手册
功能:查看命令/系统调用的文档
章节:
1
:普通命令2
:系统调用3
:库函数
$ man ls# 查看ls命令帮助
$ man 2 fork# 查看fork系统调用
$ man 3 printf# 查看C库函数printf
man手册有九章(不同系统可能会有差别)
📄 8. cp - 复制文件/目录
语法:cp [选项] 源文件或目录 目标文件或目录
选项:
-r
:递归复制目录-i
:覆盖前确认-f
:强制覆盖
cp指令用于复制文件或目录
如同时指定两个以上的文件或目录,且最后的目的地是⼀个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中
$ cp file.txt file_backup.txt# 复制文件
$ cp *.txt target_dir/# 复制所有txt文件
$ cp -r dir new_dir# 递归复制目录
理论补充:
Linux"一切皆文件",该理论将系统中的 设备(如键盘、显示器与普通文件统一抽象为文件对象,通过文件操作(读/写)实现设备交互。具体来说:
向显示器打印内容 → 向 显示器文件(标准输出,stdout)写入数据;
从键盘读取输入 → 从 键盘文件(标准输入,stdin)读取数据。
图片通过多个Linux命令示例,展示了"一切皆文件"理论的实际应用,以及输入/输出重定向的使用场景:
1. 标准输出:直接向显示器文件写入
- 示例1:
echo "hello world"
作用:将字符串"hello 你好"输出到显示器(标准输出stdout)。
逻辑:对应理论中"向显示器文件写入"的操作。- 示例2:
printf "hello world, %d, %f\n" 3 3.14
作用:格式化输出字符串(%d表示整数,%f表示浮点数),结果为hello world, 3, 3.140000
。
逻辑:与echo类似,均向显示器文件写入数据,但printf支持更灵活的格式控制。
2. 输出重定向:改变写入目标(从显示器到文件)
Linux中用**>
(覆盖写入)和>>
**(追加写入)实现输出重定向,将原本应输出到显示器的内容写入指定文件。- 示例3:覆盖写入(>)
命令:echo "hello world" > myfile.txt
作用:将"hello 你好"写入myfile.txt
文件(而非显示器)。
关键特性:先清空文件再写入(图片注释:“写入的时候,都是先清空再写!!”)。
验证:-ls -l
:查看文件列表,显示myfile.txt
的大小为12字节(包含字符串和换行符);-cat myfile.txt
:查看文件内容,确认"hello world"已写入。- 示例4:清空文件(>)
命令:> myfile.txt
作用:直接用>
重定向符清空myfile.txt
(无源内容时,>
会截断文件)。
验证:-ls -l
:显示myfile.txt
大小为0字节;-cat myfile.txt
:无输出(文件为空)。- 示例5:追加写入(>>)
命令:echo "aaaaaaaaaaaaaabbbb" >> myfile.txt
作用:将字符串追加到hello.txt
末尾(不清空原有内容)。
验证:-cat myfile.txt
:显示两行相同的字符串(首次追加+再次执行命令的结果),说明 >>保留原有内容(图片注释:“追加重定向!!”)。
3. 输入重定向:改变读取来源(从键盘到文件)
Linux中用<
实现输入重定向,将命令的输入源从键盘(标准输入stdin)改为指定文件。- 示例6:
cat < myfile.txt
作用:将hello.txt
作为cat
命令的输入,显示文件内容(等同于直接执行cat hello.txt
)。
逻辑:对应理论中"从文件读取数据"的操作,替代了从键盘输入的默认行为(图片注释:“输入重定向!!”)。
🚚 9. mv - 移动/重命名
语法:mv [选项] 源文件或目录 目标文件或目录
功能:
- 移动文件/目录
- 重命名文件/目录
$ mv file.txt new_name.txt# 重命名
$ mv file.txt dir/# 移动到目录
$ mv dir1/ dir2/# 移动目录
📖 10. cat - 查看文件内容
语法:cat [选项] [文件]
选项:
-n
:显示行号-b
:非空行编号-s
:压缩连续空行
$ cat file.txt# 显示文件内容
$ cat -n file.txt# 显示行号
$ cat -s file.txt# 压缩连续空行
🔍 11. more/less - 分页查看
more:向下分页查看
语法:more [选项]
选项:
- -n 指定输出行数
- q 退出more
$ more -10 large_file.log# 每次显示10行
less:交互式查看(支持上下翻页)
语法:less [参数] 文件
选项:
- -i 忽略搜索时的大小写
- -N 显示每行的行号
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前⼀个搜索(与 / 或 ? 有关)
- N:反向重复前⼀个搜索(与 / 或 ? 有关)
- q:quit
$ less large_file.log
# 在less中:
#/keyword → 向下搜索
#?keyword → 向上搜索
#q → 退出
🔝 12. head/tail - 查看文件首尾
head:显示文件开头
语法:head [参数]… [文件]…
选项:
- -n<行数> 显示的行数
$ head -5 file.txt# 显示前5行
tail:显示文件结尾
语法:tail 必要参数 [文件]
选项
- -f 循环读取
- -n<行数> 显示行数
$ tail -5 file.txt# 显示最后5行
$ tail -f log.txt# 实时追踪日志变化
那假设现在我有100行内容,我要求打印第50到60行该怎么办呢?(没有直接打印中间行的内容的命令)
补充知识:
管道命令(|): 图片中常出现命令1 | 命令2
的组合,功能是将前一个命令的输出作为后一个命令的输入,实现更复杂的操作。
高频示例(图片中的常见场景):
- 过滤文件:列出当前目录所有
.txt
文件(结合ls
和grep
)
$ ls -l | grep ".txt"# 用grep过滤出包含".txt"的行
-rw-r--r-- 1 user group 1.0K Jan 12 14:30 file.txt
-rw-r--r-- 1 user group 2.0K Jan 12 14:30 data.txt
- 统计日志行数:统计
log.txt
中包含“error”的行数(结合cat
、grep
、wc
)
$ cat log.txt | grep "error" | wc -l# wc -l统计行数
5# 表示有5行包含"error"
- 查找并处理文件:找到所有
.sh
脚本并显示其内容(结合find
和cat
)
$ find . -name "*.sh" | xargs cat# xargs将find结果作为cat的输入
通过管道我们就可以实现各种流水线操作了
⏰ 13. date - 显示/设置时间
格式控制:
%Y
:年(2023)%m
:月(01-12)%d
:日(01-31)%H
:小时(00-23)
$ date# 默认格式
Wed Jan 11 18:22:50 CST 2023$ date +"%Y-%m-%d %H:%M"# 自定义格式
2023-01-11 18:30$ date -d @1673432636# 时间戳转时间
Wed Jan 11 18:23:56 CST 2023
补充知识:
时间戳
时间戳(Timestamp)是表示时间的数字格式,通常指从某个基准时间点到当前时间的总时长(单位:秒、毫秒、微秒等)。它是计算机系统中处理时间的核心方式,具有跨时区、易计算、格式统一的优势。
一、核心概念
1. 基准时间点(Epoch Time)
最常用的基准是Unix时间戳的起点:
1970年1月1日00:00:00 UTC(协调世界时,即格林尼治标准时间GMT)。
所有Unix/Linux系统均以该时间点为起点计算时间戳。
2. 时间戳的类型
- 秒级时间戳(最常见):从Epoch到当前的总秒数(如
1721487600
,对应2024-07-20 19:00:00 UTC)。 - 毫秒级时间戳:秒级时间戳+3位毫秒(如
1721487600123
,对应2024-07-20 19:00:00.123 UTC)。 - 微秒级时间戳:秒级时间戳+6位微秒(如
1721487600123456
,对应2024-07-20 19:00:00.123456 UTC)。
二、Linux中生成与转换时间戳
Linux中最常用的工具是date
命令(GNU版本,支持丰富的时间格式),以下是关键操作:
1. 生成当前时间戳
- 秒级时间戳(
%s
):
date +%s
# 输出示例:1721487600
- 毫秒级时间戳(
%s%3N
,%3N
表示取3位毫秒):
date +%s%3N
# 输出示例:1721487600123
- 微秒级时间戳(
%s%6N
,%6N
表示取6位微秒):
date +%s%6N
# 输出示例:1721487600123456
2. 将时间戳转换为可读时间
用date -d @<时间戳>
(@
后跟秒级时间戳),会自动转换为系统时区的本地时间(如北京时间UTC+8)。
- 示例1:转换秒级时间戳:
date -d @1721487600
# 输出示例(北京时间):Sat Jul 20 19:00:00 CST 2024
- 示例2:转换为指定格式(如
YYYY-MM-DD HH:MM:SS
):
date -d @1721487600 +"%Y-%m-%d %H:%M:%S"
# 输出示例:2024-07-20 19:00:00
3. 生成指定时间的时间戳
用date -d "<指定时间>" +%s
,将可读时间转换为秒级时间戳。
- 示例1:转换当前日期的指定时间:
date -d "2024-07-20 19:00:00" +%s
# 输出示例:1721487600
- 示例2:转换相对时间(如“3天前”):
date -d "3 days ago" +%s
# 输出3天前的秒级时间戳
📅 14. cal - 显示日历
语法:cal 参数 [年份]
选项:
-3
:显示上月/本月/下月-y
:显示全年日历
$ cal# 本月日历
$ cal -3# 三个月日历
$ cal 2023# 2023全年日历
🔎 15. find - 文件搜索
语法:find pathname -options
选项:
- -name 按照文件名查找文件
- …
示例:按名称/类型搜索
$ find /home -name "*.txt"# 搜索所有txt文件
$ find . -type d -name "dir*"# 搜索目录
🔍 16. which/whereis - 查找命令路径
which:查找可执行文件位置
$ which ls
/usr/bin/ls
还记得之前说的Linux下“一切皆文件”吗?
是的,我们未来学的大部分指令本质都是Linux系统下固定目录下(/usr/bin/)的可执行文件
值得注意的是:我们自己写的可执行程序是无法像指令通过名字直接使用的,除非把文件写道/usr/bin/ 目录下,但是不建议这么做,会污染系统的命名池
whereis:查找二进制/源码/手册
$ whereis python
python: /usr/bin/python /usr/lib/python2.7 /usr/include/python2.7
️ 17. alias - 命令别名
功能:创建命令快捷方式
$ alias ll='ls -alF'# 创建别名
$ ll# 使用别名
$ unalias ll# 删除别名
注意:别名是内存级的,重新登入别名就没用了
🔍 18. grep - 文本搜索
语法: grep [选项] 搜寻字符串 文件
选项:
-i
:忽略大小写-n
:显示行号-v
:反向匹配
$ grep "error" log.txt# 搜索包含error的行
$ grep -i "warning" log.txt# 忽略大小写
$ grep -n "start" config.conf# 显示行号
📦 19. tar - 打包压缩
语法: tar [-cxtzjvf] 文件与目录 …
参数:
- -c :建立⼀个压缩文件的参数指令(create 的意思);
- -x :解开⼀个压缩文件的参数指令!
- -t :查看 tarfile 里面的文件!
- -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
- -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
- -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
- -f :使⽤档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
- -C : 解压到指定目录
常用组合:
- 打包:
tar -cvf archive.tar dir/
- 解包:
tar -xvf archive.tar
- 压缩:
tar -zcvf archive.tar.gz dir/
- 解压:
tar -zxvf archive.tar.gz
$ tar -czvf backup.tar.gz /home# 压缩目录
$ tar -tzvf backup.tar.gz# 查看压缩包内容
$ tar -xzvf backup.tar.gz -C restore/# 解压到指定目录
后缀可以简写成
.tgz
20.zip/unzip
语法: zip 压缩⽂件.zip 目录或文件
功能:将目录或文件压缩成zip格式
选项:
- -r:递归处理,将指定目录下的所有文件和子目录⼀并处理
将test2⽬录压缩: zip test2.zip test2/*
解压到tmp⽬录: unzip test2.zip -d /tmp
21. rzsz
rzsz
是Linux/Unix系统中轻量级文件传输工具集,基于Zmodem协议(一种可靠的异步文件传输协议),用于通过终端会话(如SSH、串口)实现本地与远程服务器之间的文件上传(rz
)和下载(sz
)。它无需额外安装FTP/SCP服务,操作简单,是系统管理员和开发者常用的小文件传输工具。
一、核心概念
- 协议基础:Zmodem协议,支持断点续传、错误校验、高速传输(比早期的Xmodem/Ymodem更高效)。
- 核心命令:
rz
(Receive Zmodem):本地→远程(从本地计算机上传文件到远程服务器);sz
(Send Zmodem):远程→本地(从远程服务器下载文件到本地计算机)。
二、安装方法
rzsz
通常需要手动安装(部分Linux发行版默认不包含),以下是常见发行版的安装命令:
- Ubuntu/Debian:
sudo apt update && sudo apt install lrzsz
- CentOS/RHEL(7及以下):
sudo yum install lrzsz
- CentOS/RHEL 8+/Fedora:
sudo dnf install lrzsz
三、常用命令及示例
1. 上传文件(rz
)
作用:从本地计算机选择文件,上传到远程服务器的当前目录。
基本用法:
rz
运行效果:本地终端会弹出文件选择窗口(需终端支持,如PuTTY、Xshell、Terminal),选择要上传的文件后,自动开始传输。
常用参数:
-b
:二进制模式(必选,用于传输非文本文件,如图片、压缩包、可执行文件,避免文件损坏);-y
:覆盖模式(若远程服务器已存在同名文件,直接覆盖,无需确认);-e
:强制Zmodem协议(用于兼容性问题,如终端未自动识别Zmodem)。
示例(二进制模式上传,覆盖现有文件):
rz -b -y
2. 下载文件(sz
)
作用:从远程服务器选择文件/目录,下载到本地计算机的指定路径。
基本用法(下载单个文件):
sz 文件名
下载目录(需递归):
sz -r 目录名# -r:递归传输目录下的所有文件
运行效果:本地终端会弹出保存路径窗口,选择保存位置后,自动开始传输。
常用参数:
-b
:二进制模式(同rz
,传输非文本文件必选);-y
:覆盖模式(覆盖本地已存在的同名文件);-r
:递归传输目录(下载目录时必选)。
示例(二进制模式下载目录,覆盖本地文件):
sz -b -y -r /home/user/docs# 下载远程服务器的docs目录到本地
四、注意事项
-
终端支持:
rzsz
依赖支持Zmodem协议的终端,常见终端如:
-Windows:PuTTY(需开启“Connection→SSH→Zmodem”选项)、Xshell、SecureCRT;
-macOS:Terminal(默认支持)、iTerm2;
-Linux:GNOME Terminal(默认支持)、Konsole。
若终端不支持Zmodem,rzsz
无法弹出文件选择窗口,需用rz -e
或sz -e
强制使用,并通过命令行指定文件(但不推荐)。 -
传输模式:
- 文本文件(如
.txt
、.conf
):可使用默认的ASCII模式(无需-b
); - 非文本文件(如
.zip
、.jpg
、.exe
):必须使用二进制模式(-b
参数),否则会导致文件损坏(如图片无法打开、压缩包无法解压)。
- 权限问题:
- 上传文件时,远程服务器的当前目录需有写入权限(如
chmod 777 /tmp
); - 下载文件时,本地计算机的保存路径需有写入权限(如
~/Downloads
目录通常有写入权限)。
-
断点续传:
Zmodem协议支持断点续传,若传输中断(如网络断开),重新运行rz
或sz
,会自动续传未完成的部分(需终端支持)。 -
文件名编码:
若文件名包含中文或特殊字符,需确保终端的编码设置正确(如UTF-8),否则可能出现文件名乱码(如䏿–‡.txt
)。解决方法:在终端中设置编码为UTF-8(如PuTTY的“Window→Translation→Remote character set”选择“UTF-8”)。
22. bc指令
bc
是Linux系统中用于浮点运算的便捷工具,支持高精度的数学计算(如加减乘除、平方根、指数等),常用于需要精确浮点结果的场景(如脚本中的数值处理)。
23. uname命令
- 语法:
uname [选项]
- 功能:获取操作系统及硬件的基本信息(如内核版本、主机名、硬件类型等)。
- 补充说明:可显示Linux主机的操作系统版本、硬件名称等关键信息。
- 常用选项:
-a
/--all
:详细输出所有信息,依次为:内核名→主机名→内核版本号→内核版本→硬件名→处理器类型→硬件平台类型→操作系统名称(最常用)。
24. 重要热键
- [Tab]:具有命令补全(输入命令前缀后按Tab,自动补全完整命令)和档案补齐(输入文件/目录前缀后按Tab,自动补全路径)功能,提升操作效率。
- [Ctrl]-c:强制停止当前运行的程序(如终止陷入死循环的脚本)。
- [Ctrl]-d:表示键盘输入结束(EOF,End Of File),常用于退出交互程序(如代替
exit
命令退出Shell)。
25. 关机命令(shutdown)
- 语法:
shutdown [选项]
- 常见选项:
-h
:停止所有系统服务后,立即关机(等价于halt
)。-r
:停止所有系统服务后,重新启动(等价于reboot
)。-t sec
:延迟sec
秒后执行关机/重启操作(如shutdown -t 60 -h
表示60秒后关机)。
掌握这些基础命令后,你已具备Linux日常操作的必备技能。建议在终端中实际尝试每个示例,实践是巩固知识的最佳方式!