Linux 系统基础命令
导读
本文档系统介绍 Linux 操作系统的基础知识及常用命令,涵盖 Linux 发展历史、开源理念、发行版本、远程登录配置、常用指令及权限管理等内容。每个命令均提供语法说明、参数解释与示例,供学习与查阅使用。
1. Linux 背景
1.1 发展史
1.1.1 UNIX 发展史
Linux 与 UNIX 有着密切的关系,介绍 Linux 需从 UNIX 说起。
- 1968 年:通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了 Multics 操作系统,在多任务文件管理和用户连接中综合了许多新概念。
- 1969---1970 年:AT&T 贝尔实验室的 Ken Thompson 和 Dennis Ritchie 在 Multics 设计理念的基础上开发了 UNIX 系统。UNIX 是一个多用户、多任务的操作系统,运行在小型机上,满足科研环境需求。
- 1972 年:贝尔实验室开始发放 UNIX 商业版本,加州大学伯克利分校成为早期授权用户之一,并在系统中增加了许多后来成为标准的特性。
- 1975 年:伯克利发布了 BSD(Berkeley Software Distribution)版本的 UNIX,成为 AT&T UNIX 的主要竞争者,其他独立开发的 UNIX 版本也开始出现。
- 1980 年:微软公司开发了基于 UNIX 的 Xenix 系统。AT&T 发行了 System III,后演变为 System V。
- 1980 年代末:伯克利发布了 BSD Release 4.2,集成了 TCP/IP 网络协议栈,被 Sun Microsystems 等厂商广泛采用。UNIX 不同版本的分化促使了 UNIX 标准化工作的推进。
- 1980 年代中期:出现了两个竞争标准------基于 AT&T UNIX 的版本和 BSD 版本。
- 1980 年代后期:AT&T 成立了 UNIX 系统实验室(USL),致力于综合 UNIX 不同版本并开发标准系统。
- 1991 年:USL 综合了 System V Release 3、Solaris 和 Xenix 的特性,发行了 System V Release 4。与此同时,IBM、惠普等公司成立了 Open Software Foundation(OSF),推出自己的 UNIX 标准,形成了 OSF 版本与 System V Release 4 两个商用标准并存的局面。
- 1993 年:AT&T 将 UNIX 业务出售给 Novell 公司。Novell 发行了基于 System V Release 4 的 UNIXWare。Sun 公司将 System V Release 4 融入 Solaris。Motif 和 Openlook 两个图形用户界面标准合并为通用桌面环境(CDE)。
1.1.2 Linux 发展史
- 1991 年 8 月 25 日:赫尔辛基大学研究生 Linus Benedict Torvalds 在 comp.os.minix 新闻组发布了关于其操作系统的帖子,征求反馈。
- 1991 年 9 月 17 日:Linus 发布了 Linux 内核 0.01 版本(未公开宣传),仅支持 Intel 386 处理器。
- 1991 年 10 月 5 日:Linus 发布了 Linux 内核 0.02 版本,可运行 GNU Bourne Again Shell(bash)和 GNU C 编译器(gcc)。
- 1994 年 1 月 14 日:Linux 内核 1.0 正式发布,标志着内核达到稳定版本。
- 后续版本:Linux 内核版本持续演进,2.x 系列经历了 2.0(1996)、2.2(1997)、2.4(2001)、2.6(2003)等多个重要版本;3.x 系列(2011)引入内核同质化、新调度器和内存管理机制;4.x 系列(2015)引入 namespaces 增强、BPF 虚拟机等;5.x 系列(2019)引入 io_uring 异步 I/O、eBPF 成熟化等;6.x 系列(2022)支持 NVMe 带内认证、OpenRISC 和 LoongArch 架构等;7.0 版本(2026 年 4 月)确立 Rust 语言在内核中的长期支持地位。
1.2 开源
Linux 是一种自由和开放源代码的类 UNIX 操作系统。该操作系统的内核由 Linus Torvalds 于 1991 年首次发布。严格而言,"Linux"指操作系统内核本身,而"Linux 操作系统"通常指基于 Linux 内核的完整系统,包括用户空间应用程序、GUI 组件及其他工具。
GNU 通用公共许可证(GNU General Public License,简称 GNU GPL 或 GPL)是由自由软件基金会(FSF)发布的广泛使用的自由软件许可协议,最初由 Richard Stallman 为 GNU 计划而撰写。GPL 赋予用户运行、学习、共享和修改软件的自由,并要求基于 GPL 软件开发的衍生产品在发布时必须采用 GPL 许可证并公开源代码。目前主要版本为 GPLv2(1991 年发布)和 GPLv3(2007 年发布)。
Linux 是自由软件和开源软件发展中的代表性项目。遵循 GNU 通用公共许可证,任何个人和机构均可自由使用、修改和再发布 Linux 的源代码。随着 Linux 操作系统的发展,大量开源软件和实用工具在 Linux 平台上得到应用和普及。
1.3 官网
1.4 企业应用现状
1.4.1 Linux 在服务器领域的应用
随着开源软件影响力扩大,Linux 服务器操作系统在服务器操作系统市场中占据重要份额。在政府、金融、电信等国家关键领域均有广泛应用。据 IDC 等机构统计,Linux 在全球服务器操作系统市场(按部署量计)占比约 70%---90%,已成为服务器操作系统领域的主要操作系统之一。
1.4.2 Linux 在桌面领域的应用
国内市场已有中标麒麟 Linux、深度 Linux 等发行版,SUSE、Ubuntu 等也推出了面向桌面的 Linux 系统。Linux 桌面系统在政府、企业等领域得到一定应用。与 Windows 相比,Linux 桌面系统在易用性、软硬件兼容性、应用程序丰富度等方面仍存在差距,但近年来在开源生态推动下持续改进。
1.4.3 Linux 在移动与嵌入式领域的应用
Linux 凭借低成本、高可定制性和良好的移植性,广泛应用于手机、平板电脑、路由器、电视、电子游戏机等嵌入式设备。Android 操作系统基于 Linux 内核开发,是目前全球市场份额领先的移动操作系统。此外,思科在网络设备中使用了定制 Linux,阿里云开发了基于 Linux 的 YunOS 系统,数字视频录像机、舞台灯光控制系统等设备也逐渐采用定制 Linux 版本。
1.4.4 Linux 在云计算与大数据领域的应用
云计算与大数据产业基于开源软件平台快速发展,Linux 在该领域具有显著优势。据 Linux 基金会研究,多数企业已使用 Linux 构建云计算和大数据平台,Linux 已开始取代传统 Unix 成为云计算和大数据平台的主流操作系统选择。
1.5 发行版本
| 发行版 | 说明 |
|---|---|
| Debian | 以稳定性著称,适合服务器部署。 社区驱动,适合系统管理员和高级用户使用。 |
| Ubuntu | 基于 Debian 的发行版,面向桌面和服务器市场。 对新手友好,易于上手,在服务器、云计算领域有广泛应用。 |
| 红帽企业级 Linux(RHEL) | 面向商业市场的 Linux 发行版,由红帽公司维护。 提供 RHCSA/RHCE 等认证体系。支持多种处理器架构,包括 x86 和 x86_64。 |
| CentOS | 基于 RHEL 源代码重新构建的企业级 Linux 发行版,与 RHEL 二进制兼容。 注:CentOS 7 已于 2024 年 6 月结束生命周期(EOL),红帽已将 CentOS 项目转向 CentOS Stream(滚动预览版)。替代方案包括 Rocky Linux、AlmaLinux 等。 |
| Fedora | 红帽公司主导的社区发行版,充当新技术预览平台。 新特性在此先行开发和测试,成熟后纳入 RHEL。 适合希望体验最新技术的用户。 |
| Kali Linux | 基于 Debian 的渗透测试专用发行版,前身是 BackTrack。 内置大量安全测试工具,支持即开即用。使用 APT 包管理器。 |
| 其他发行版 | SUSE Linux Enterprise、openSUSE、Arch Linux、Gentoo 等。 |
1.6 操作系统概念与定位
操作系统的核心目标是管理计算机硬件与软件资源,并为上层应用提供统一接口,使计算机更易于使用。
2. 使用 XShell 远程登录 Linux
2.1 关于 Linux 桌面
在实际服务器运维中,通常不使用图形化界面(GUI),而是通过命令行终端进行操作。
2.2 下载安装 XShell
XShell 是一款远程终端仿真软件。
家庭/学校免费版本:家庭/学校免费 - NetSarang Website
下载安装时可选择免费版本(Home/School)。
2.3 查看 Linux 主机 IP
可通过终端执行以下命令查看 IP 地址:
bash
ip addr show
# 或
ifconfig
2.4 使用 XShell 登录主机
在 XShell 中创建新连接,输入目标 Linux 主机的 IP 地址,选择 SSH 协议(默认端口 22),连接后输入用户名和密码即可登录。
也可在终端中使用 SSH 命令:
bash
ssh username@ip_address
XShell 常用操作:
| 操作 | 快捷键 |
|---|---|
| 复制 | Ctrl+Insert(部分键盘需配合 Fn 键) |
| 粘贴 | Shift+Insert |
| 全屏切换 | Alt+Enter |
注:Ctrl+C / Ctrl+V 在 XShell 默认配置中不可用,需在设置中手动配置。
3. Linux 基本指令
3.1 常用命令速查表
| 命令 | 全称 | 功能简述 |
|---|---|---|
| ls | list | 列出目录内容 |
| pwd | print working directory | 显示当前工作目录 |
| cd | change directory | 切换工作目录 |
| mkdir | make directory | 创建目录 |
| rmdir | remove directory | 删除空目录 |
| rm | remove | 删除文件或目录 |
| cp | copy | 复制文件或目录 |
| mv | move | 移动/重命名文件或目录 |
| cat | concatenate | 查看文件内容 |
| more | --- | 分页查看文件内容 |
| less | --- | 分页查看文件内容(支持前后浏览) |
| head | --- | 显示文件头部内容 |
| tail | --- | 显示文件尾部内容 |
| date | --- | 显示/设置系统时间 |
| cal | calendar | 显示日历 |
| find | --- | 搜索文件 |
| which | --- | 查找命令路径 |
| whereis | where is | 查找命令二进制/源码/手册 |
| alias | --- | 设置命令别名 |
| grep | global regular expression print | 文本搜索 |
| top | --- | 查看系统进程 |
| zip / unzip | --- | 压缩/解压 zip 文件 |
| tar | tape archive | 打包/解包归档文件 |
| bc | basic calculator | 计算器 |
| uname | unix name | 显示系统信息 |
| shutdown | --- | 关机/重启 |
| chmod | change mode | 修改文件权限 |
| chown | change owner | 修改文件所有者 |
| chgrp | change group | 修改文件所属组 |
| umask | user mask | 设置文件创建掩码 |
| file | --- | 辨识文件类型 |
| man | manual | 查看命令手册 |
| ssh | secure shell | 安全远程登录 |
| sudo | superuser do | 以超级用户身份执行命令 |
| ifconfig | interface configuration | 查看/配置网络接口 |
| netstat | network statistics | 查看网络状态 |
| ps | process status | 查看进程状态 |
| df | disk free | 查看磁盘空间 |
| dd | disk copy | 磁盘复制/转换 |
| ln | link | 创建链接 |
| passwd | password | 修改用户密码 |
| su | substitute user | 切换用户 |
| yum | Yellowdog Updater Modified | 包管理工具(RHEL 系) |
| ftp | file transfer protocol | 文件传输协议 |
| ping | --- | 测试网络连通性 |
| vim | vi improved | 文本编辑器 |
3.2 ls(list)指令
语法 :ls 选项 目录或文件
功能:列出目录下的所有子目录与文件。对于文件,将列出文件名及其他信息。
常用选项:
-a:列出目录下的所有文件,包括以.开头的隐含文件。-l:列出文件的详细信息(长格式)。
示例:
bash
[root@VM-0-6-centos ~]# ls
mydir
test.c
test.txt
[root@VM-0-6-centos ~]# ls -a
.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
.c
...
[root@VM-0-6-centos ~]# ls -al
total 80
dr-xr-x---. 8 root root 4096 Jul 7 16:41 .
dr-xr-xr-x. 19 root root 4096 Jul 7 21:11 ..
-rw------- 1 root root 11319 Jul 7 21:11 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x 4 root root 4096 Mar 22 02:55 .cache
...
3.3 pwd(print working directory)命令
语法 :pwd
功能:显示用户当前所在的目录。
常用选项:无。
示例:
bash
[root@VM-0-6-centos ~]# pwd
/root
3.4 cd(change directory)指令
路径基础概念:
- Linux 系统中,磁盘上的文件和目录被组织为树状结构,每个节点都是目录或文件。
- 普通文件一定是目录树的叶子节点。
- 目录可能是叶子(空目录),也可能是中间节点。
- 绝对路径 :从根目录
/开始的路径,不依赖当前目录。例如/root/mydir。 - 相对路径 :相对于当前工作目录的路径。例如
../temp。
语法 :cd 目录名
功能:切换当前工作目录。
常用路径表示:
| 路径表示 | 含义 |
|---|---|
| cd ... | 返回上级目录 |
| cd / | 返回根目录 |
| cd ~ | 返回当前用户家目录 |
| cd - | 返回上次所在目录 |
| cd | 返回当前用户家目录 |
示例:
bash
# 返回上级目录
[root@VM-0-6-centos mydir]# pwd
/root/mydir
[root@VM-0-6-centos mydir]# cd ..
[root@VM-0-6-centos ~]# pwd
/root
# 绝对路径
[root@VM-0-6-centos ~]# cd /root/mydir
[root@VM-0-6-centos mydir]# pwd
/root/mydir
# 相对路径
[root@VM-0-6-centos mydir]# cd ../temp
[root@VM-0-6-centos temp]# pwd
/root/temp
# 快速进入家目录
[root@VM-0-6-centos temp]# cd ~
[root@VM-0-6-centos ~]# pwd
/root
# 返回最近访问的目录
[root@VM-0-6-centos ~]# cd /
[root@VM-0-6-centos /]# pwd
/
[root@VM-0-6-centos /]# cd -
/root
[root@VM-0-6-centos ~]# pwd
/root
3.5 touch 指令
语法 :touch 选项... 文件...
功能:更改文件或目录的时间戳(存取时间和修改时间),或创建空文件。
常用选项:
-a:仅更改存取时间(access time)。-m:仅更改修改时间(modify time)。-c:如果文件不存在,则不创建新文件。
示例:
bash
# 创建空文件
[root@VM-0-6-centos ~]# touch newFile.txt
# 查看文件时间戳
[root@VM-0-6-centos ~]# stat newFile.txt
File: 'newFile.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 395142 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-07-07 22:07:52.742545133 +0800
Modify: 2026-07-07 22:07:52.742545133 +0800
Change: 2026-07-07 22:07:52.742545133 +0800
Birth: -
# 仅修改存取时间
[root@VM-0-6-centos ~]# touch -a newFile.txt
[root@VM-0-6-centos ~]# stat newFile.txt
...
Access: 2026-07-07 22:10:28.222602380 +0800
Modify: 2026-07-07 22:07:52.742545133 +0800
Change: 2026-07-07 22:10:28.222602380 +0800
# 仅修改修改时间
[root@VM-0-6-centos ~]# touch -m newFile.txt
[root@VM-0-6-centos ~]# stat newFile.txt
...
Access: 2026-07-07 22:10:28.222602380 +0800
Modify: 2026-07-07 22:12:03.474638556 +0800
Change: 2026-07-07 22:12:03.474638556 +0800
3.6 mkdir(make directory)指令
语法 :mkdir 选项 dirname...
功能:创建目录。
常用选项:
-p(--parents):递归创建目录,若路径中的某些目录不存在,将自动创建。
示例:
bash
# 创建单个目录
[root@VM-0-6-centos ~]# mkdir dir1
# 递归创建多级目录
[root@VM-0-6-centos ~]# mkdir -p a/b/c/d
# 验证目录结构
[root@VM-0-6-centos ~]# tree a
a
`-- b
`-- c
`-- d
3 directories, 0 files
注:tree 命令用于以树状结构显示目录内容。若未安装,可通过 yum install -y tree(root 用户)或 sudo yum install -y tree(普通用户)安装。
3.7 rmdir(remove directory)与 rm(remove)指令
3.7.1 rmdir 命令
语法 :rmdir 选项 目录名
功能:删除空目录。
常用选项:
-p:当子目录被删除后若父目录也变为空目录,则连带父目录一起删除。
示例:
bash
# 删除空目录
[root@VM-0-6-centos ~]# rmdir dir1
# 递归删除空目录链
[root@VM-0-6-centos ~]# rmdir -p a/b/c/d
注:若路径中存在非空目录,rmdir -p 将失败。
3.7.2 rm 命令
语法 :rm 选项 文件/目录...
功能:删除文件或目录。
常用选项:
-f(--force):忽略不存在的文件,不提示确认。-i(--interactive):删除前逐一询问。-r(-R,--recursive):递归删除目录及其内容。-v(--verbose):显示详细的处理过程。
示例:
bash
# 删除普通文件(交互式)
[root@VM-0-6-centos ~]# rm test.txt
rm: remove regular file 'test.txt'? y
# 删除目录(需加 -r 选项)
[root@VM-0-6-centos ~]# rm -r a
# 强制递归删除(不提示)
[root@VM-0-6-centos ~]# rm -rf mydir
警告:rm -rf 命令会强制递归删除指定路径下的所有文件和目录,且不可恢复。使用时务必确认路径正确。
3.8 man(manual)指令
语法 :man 章节号 命令
功能:查看命令的手册页(联机帮助文档)。
man 手册章节说明:
| 章节号 | 内容类型 | 说明 |
|---|---|---|
| 1 | 普通命令 | 用户命令,如 ls、cp 等 |
| 2 | 系统调用 | 内核提供的系统调用,如 open、write 等 |
| 3 | 库函数 | 标准库函数,如 printf、fread 等 |
| 4 | 特殊文件 | /dev 下的设备文件 |
| 5 | 文件格式 | 配置文件格式,如 passwd 文件字段含义 |
| 6 | 游戏 | 游戏相关 |
| 7 | 附件与变量 | 环境变量等,如 environ |
| 8 | 系统管理命令 | 仅 root 可用的管理命令,如 ifconfig |
| 9 | 内核例程 | 内核级函数 |
示例:
bash
[root@VM-0-6-centos ~]# man printf # 查看普通命令
[root@VM-0-6-centos ~]# man 2 fork # 查看系统调用
[root@VM-0-6-centos ~]# man 3 printf # 查看C库函数
[root@VM-0-6-centos ~]# man 7 environ # 查看环境变量
[root@VM-0-6-centos ~]# man man # 查看man手册本身
3.9 cp(copy)指令
语法 :cp 选项 源文件 目标文件/目录
功能:复制文件或目录。
说明:
- 同时指定两个以上源文件且目标为已存在目录时,所有源文件将被复制到该目录中。
- 若目标文件已存在,默认会覆盖(可加
-i选项启用确认)。
常用选项:
-f(--force):强行复制,若目标文件已存在则直接覆盖。-i(--interactive):覆盖文件前询问用户。-r(-R,--recursive):递归复制目录及其内容。-p:保留文件的属性(权限、时间戳等)。
示例:
bash
# 复制普通文件
[root@VM-0-6-centos ~]# echo 'hello linux' > myfile.txt
[root@VM-0-6-centos ~]# cp myfile.txt myfile-backup.txt
# 复制多个文件到目录
[root@VM-0-6-centos ~]# mkdir dir
[root@VM-0-6-centos ~]# cp *.txt dir
# 递归复制目录
[root@VM-0-6-centos ~]# cp -rf ./source_dir ./dest_dir
3.10 mv(move)指令
语法 :mv 选项 源文件/目录 目标文件/目录
功能:
- 当第二个参数是文件时,将源文件重命名为目标文件名。
- 当第二个参数是目录时,将源文件/目录移动到目标目录中。
常用选项:
-f:强制移动,若目标已存在则直接覆盖,不询问。-i:若目标已存在则询问是否覆盖。-n(--no-clobber):不覆盖已存在的文件。
示例:
bash
# 重命名文件
[root@VM-0-6-centos ~]# touch myfile.txt
[root@VM-0-6-centos ~]# mv myfile.txt yourfile.txt
# 移动文件到目录
[root@VM-0-6-centos ~]# mkdir temp
[root@VM-0-6-centos ~]# mv myfile.txt temp/
# 移动目录
[root@VM-0-6-centos ~]# mv temp/ ../
3.11 cat(concatenate)指令
语法 :cat 选项 文件...
功能:查看文件内容,也可用于连接多个文件。
常用选项:
-n:对输出的所有行编号(包括空行)。
示例:
bash
[root@VM-0-6-centos ~]# echo 'hello linux' > myfile.txt
[root@VM-0-6-centos ~]# cat myfile.txt
hello linux
[root@VM-0-6-centos ~]# cat -n myfile.txt
1 hello linux
3.12 more 指令
语法 :more 选项 文件
功能:分页查看文件内容。
常用选项:
-n:指定每屏显示的行数。q:退出 more。
示例:
bash
[root@VM-0-6-centos ~]# more myfile.txt
hello linux
hello me
hello you
...
# 指定每屏显示10行
[root@VM-0-6-centos ~]# more -10 myfile.txt
hello linux
hello me
...
--More--(68%)
3.13 less 指令
语法 :less 选项 文件
功能:分页查看文件内容。与 more 类似,但支持前后浏览、搜索等功能,且在查看前不加载整个文件。
常用选项:
-N:显示每行的行号。q:退出。
示例:
bash
[root@VM-0-6-centos ~]# less -N myfile.txt
1 hello linux
2 hello me
3 hello you
...
myfile.txt (END)
3.14 head 指令
语法 :head 选项 文件...
功能:显示文件的开头部分。默认显示前 10 行。
常用选项:
-n <行数>:指定显示的行数。
示例:
bash
[root@VM-0-6-centos ~]# head myfile.txt
hello linux
hello me
hello you
hello hello linux
hello me
hello you
hello linux
hello me
hello you
hello linux
[root@VM-0-6-centos ~]# head -5 myfile.txt
hello linux
hello me
hello you
hello hello linux
hello me
3.15 tail 指令
语法 :tail 选项 文件
功能:显示文件末尾内容。常用于查看日志文件。
常用选项:
-f:循环读取(实时监控文件尾部变化,适用于日志跟踪)。-n <行数>:显示指定行数的末尾内容。+<行数>:从指定行号开始显示(配合-n使用,如-n +10从第 10 行开始)。
示例:
bash
[root@VM-0-6-centos ~]# tail myfile.txt
hello linux
hello me
hello you
hello linux
hello me
hello you
hello linux
hello me
hello you
[root@VM-0-6-centos ~]# tail -3 myfile.txt
hello me
hello you
hello linux
# 显示第5到第10行的内容(head + tail 组合)
[root@VM-0-6-centos ~]# head -10 myfile.txt | tail -5
hello you
hello linux
hello me
hello you
hello linux
3.16 date 指令
语法 :date 选项 +格式
功能:显示或设置系统日期和时间。
3.16.1 时间显示格式标记
| 格式标记 | 含义 |
|---|---|
| %H | 小时(00---23) |
| %M | 分钟(00---59) |
| %S | 秒(00---59) |
| %d | 日(01---31) |
| %m | 月份(01---12) |
| %Y | 完整年份(0000---9999) |
| %F | 等同于 %Y-%m-%d |
| %X | 等同于 %H:%M:%S |
| %s | 时间戳(自 Unix 纪元以来的秒数) |
3.16.2 设置时间(需 root 权限)
bash
date -s "2008-05-23 01:01:01" # 设置完整日期和时间
date -s 20080523 # 设置日期,时间设为 00:00:00
date -s 01:01:01 # 仅设置时间
3.16.3 时间戳转换
bash
# 当前时间戳
[root@VM-0-6-centos ~]# date +%s
1783764501
# 时间戳转换为可读时间
[root@VM-0-6-centos ~]# date -d @0 +%Y/%m/%d-%H:%M:%S
1970/01/01-08:00:00
[root@VM-0-6-centos ~]# date -d @1000000000 +%Y/%m/%d-%H:%M:%S
2001/09/09-09:46:40
注:Unix 时间戳(Unix epoch/Unix time/POSIX time)是从 1970 年 1 月 1 日 00:00:00 UTC 开始所经过的秒数,不考虑闰秒。
3.17 cal(calendar)指令
语法 :cal 选项 月份 年份
功能:显示日历。
常用选项:
-3:显示上个月、当月和下个月的月历。-j:显示当年中的第几天。-y:显示当前年份的完整日历。
示例:
bash
# 显示当月日历
[root@VM-0-6-centos ~]# cal
July 2026
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
# 显示指定年份
[root@VM-0-6-centos ~]# cal 1949
# 显示前一个月、当月、下个月
[root@VM-0-6-centos ~]# cal -3
3.18 find 指令
语法 :find 路径 -options
功能:在目录结构中搜索文件并执行指定操作。
常用选项:
-name 文件名:按照文件名查找文件(支持通配符*、?)。-type f/d:按文件类型查找(f=文件,d=目录)。-size +N/-N:按文件大小查找(N 后跟 c=字节,k=KB,M=MB,G=GB)。-mtime +N/-N:按修改时间查找(N 天以前/以内)。-exec 命令 {} \;:对查找结果执行指定命令。
示例:
bash
# 从当前目录搜索文件
[root@VM-0-6-centos ~]# find -name myfile.txt
./myfile.txt
# 在家目录下搜索
[root@VM-0-6-centos ~]# find ~ -name myfile.txt
/root/myfile.txt
# 查找指定大小的文件
[root@VM-0-6-centos ~]# find / -type f -size +10M
# 查找并删除指定文件
[root@VM-0-6-centos ~]# find . -name "*.tmp" -exec rm {} \;
注:在大型文件系统中搜索可能消耗较多资源,建议必要时置于后台执行。
3.19 which 指令
功能:搜索并显示命令的完整路径(在 PATH 环境变量指定的目录中查找)。
示例:
bash
[root@VM-0-6-centos ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@VM-0-6-centos ~]# which pwd
/usr/bin/pwd
注:which 命令默认不显示别名。可使用 type 或 command -v 命令查看别名信息。
3.20 whereis 指令
功能:查找命令的二进制文件、源代码和手册页位置。
示例:
bash
[root@VM-0-6-centos ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@VM-0-6-centos ~]# whereis libc.so
libc: /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz
注:.so 为 shared object(动态共享库)文件扩展名。
3.21 alias 指令
功能:设置或查看命令别名。
示例:
bash
# 设置别名
[root@VM-0-6-centos ~]# alias hello='ls -a -l'
# 查看别名定义
[root@VM-0-6-centos ~]# alias hello
alias hello='ls -a -l'
# 使用别名
[root@VM-0-6-centos ~]# hello
total 84
...
# 取消别名
[root@VM-0-6-centos ~]# unalias hello
注:别名仅在当前会话中有效。如需永久生效,需将 alias 命令写入 ~/.bashrc 文件。
3.22 grep(global regular expression print)指令
语法 :grep 选项 搜索模式 文件...
功能:在文件中搜索匹配指定模式的行,并将匹配行打印出来。
常用选项:
-i:忽略大小写。-n:显示匹配行的行号。-v:反向选择,显示不匹配的行。-c:仅显示匹配行的数量。-r/-R:递归搜索目录。-l:仅显示匹配文件的名字。
示例:
bash
# 基本查找
[root@VM-0-6-centos ~]# grep 'hello Linux' tmp.txt
hello Linux
hello Linux
...
# 忽略大小写
[root@VM-0-6-centos ~]# grep -i 'hello Linux' tmp.txt
hEllo Linux
hello Linux
heLlo Linux
Hello Linux
...
# 显示行号
[root@VM-0-6-centos ~]# grep -n 'hello Linux' tmp.txt
2:hello Linux
5:hello Linux
...
# 反向选择(显示不匹配的行)
[root@VM-0-6-centos ~]# grep -v 'hello Linux' tmp.txt
hEllo Linux
heLlo Linux
Hello Linux
hellO Linux
# 组合选项:忽略大小写 + 显示行号 + 反向选择
[root@VM-0-6-centos ~]# grep -nvi 'hello linux' tmp.txt
1:hEllo Linux
3:heLlo Linux
4:Hello Linux
6:hellO Linux
3.23 top 指令
语法 :top 选项
功能:实时显示系统中进程的资源使用情况(CPU、内存等)。
常用选项:
-d <秒数>:指定刷新间隔(默认 3 秒)。-n <次数>:指定刷新次数后自动退出。-p <PID>:仅监控指定进程 ID。
示例:
bash
# 每1秒刷新,共刷新5次后退出
[root@VM-0-6-centos ~]# top -d 1 -n 5
# 退出 top:按 q 键
注:top 运行期间可通过交互式命令操作,常用快捷键包括:P(按 CPU 排序)、M(按内存排序)、k(杀死进程)、q(退出)。
3.24 zip / unzip 指令
语法 :zip 选项 目标.zip 源文件/目录
功能:将文件或目录压缩为 zip 格式。
常用选项:
-r:递归处理,将指定目录下的所有文件和子目录一并压缩。
示例:
bash
# 压缩文件
zip test.zip test.txt
# 压缩目录
zip -r test.zip test/
# 解压到指定目录
unzip test.zip -d /root/
sz/rz 文件传输:
该工具用于在 Windows 与远程 Linux 主机之间通过 SSH 协议传输文件。
bash
# 安装 lrzsz 包
sudo yum install -y lrzsz
# 从 Linux 发送文件到 Windows
sz test.zip
# 从 Windows 接收文件到 Linux
rz
3.25 tar(tape archive)指令
语法 :tar 选项 归档文件名 源文件或目录
常用选项:
| 选项 | 含义 |
|---|---|
-c |
创建归档文件(create) |
-x |
解包归档文件(extract) |
-t |
列出归档文件内容(list) |
-z |
通过 gzip 压缩/解压缩 |
-j |
通过 bzip2 压缩/解压缩 |
-v |
显示处理过程详情(verbose) |
-f |
指定归档文件名(file) |
-C |
解压到指定目录 |
示例:
bash
# 仅打包(不压缩)
[root@linux ~]# tar -cvf /tmp/etc.tar /etc
# 打包并 gzip 压缩
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc
# 打包并 bzip2 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc
# 查看压缩包内容
[root@linux ~]# tar -tzvf /tmp/etc.tar.gz
# 解压到指定目录
[root@linux ~]# tar -xzvf /tmp/etc.tar.gz -C /usr/local/src
# 仅解压压缩包中的特定文件
[root@linux ~]# tar -xzvf /tmp/etc.tar.gz etc/passwd
3.26 bc(basic calculator)指令
功能:进行任意精度算术运算,支持浮点运算。
示例:
bash
[root@VM-0-6-centos ~]# echo "3.14 * 2.5" | bc
7.850
[root@VM-0-6-centos ~]# echo "scale=4; 10/3" | bc
3.3333
3.27 uname(unix name)指令
语法 :uname 选项
功能:显示系统相关信息。
常用选项:
-a(--all):显示所有信息(内核名称、主机名、内核版本号、内核版本、硬件名、处理器类型、硬件平台类型、操作系统名称)。-r:仅显示内核释放级别。-v:显示内核版本。-n:显示主机名。-o:显示操作系统名称。
示例:
bash
[root@VM-0-6-centos ~]# uname -a
Linux VM-0-6-centos 3.10.0-1160.el7.x86_64 #1 SMP Tue Apr 11 17:01:00 UTC 2023
# 查看操作系统版本
[root@VM-0-6-centos ~]# lsb_release -a
3.28 快捷键
| 快捷键 | 功能 |
|---|---|
| Tab | 命令补全 / 文件名补全(快速连按两下可列出所有补全选项) |
| Ctrl + c | 终止当前运行的程序 |
| Ctrl + d | 键盘输入结束(EOF),也可用于退出当前用户会话 |
| 上/下键 | 查看历史命令 |
| Ctrl + r | 搜索历史命令 |
| Ctrl + l | 清屏 |
| Ctrl + a | 光标跳到行首 |
| Ctrl + e | 光标跳到行尾 |
| Ctrl + u | 删除光标前的整行内容 |
| Ctrl + w | 删除光标前的一个单词 |
3.29 关机与重启
语法 :shutdown 选项 时间
常见选项:
-h:将系统服务停掉后关机(halt)。-r:将系统服务停掉后重新启动(reboot)。-t sec:在关机/重启前等待 sec 秒。now:立即执行。
示例:
bash
# 立即关机
shutdown -h now
# 10分钟后重启
shutdown -r +10
# 在指定时间关机
shutdown -h 23:00
其他关机/重启命令:halt(立即停止系统)、reboot(立即重启)、poweroff(关闭电源)。
3.30 Shell 命令与运行原理
Linux 严格意义上指操作系统内核(kernel),用户不能直接使用 kernel,而是通过 shell(命令行解释器)与 kernel 沟通。
Shell 的主要功能:
- 将用户输入的命令翻译给内核处理。
- 将内核的处理结果翻译给用户。
用户类型:
| 用户类型 | 说明 | 命令提示符 |
|---|---|---|
| 超级用户(root) | 拥有系统最高权限,可执行所有操作 | # |
| 普通用户 | 权限受限,只能执行授权范围内的操作 | $ |
切换用户:
bash
# 从 root 切换到普通用户 user
su user
# 从普通用户切换到 root(需输入 root 密码)
su root
# 或简写为
su
# 以指定用户身份执行命令(需 sudo 权限)
sudo -u 用户名 命令
4. Linux 权限管理
4.1 文件访问者分类
| 分类 | 缩写 | 说明 |
|---|---|---|
| 文件所有者 | u(user) | 文件和目录的所有者 |
| 所有者所在组的用户 | g(group) | 文件和目录的所有者所在的组的用户 |
| 其他用户 | o(others) | 既不是所有者也不在所属组中的其他用户 |
4.2 文件类型
| 类型标识 | 文件类型 | 说明 |
|---|---|---|
| d | 目录(directory) | 文件夹 |
| - | 普通文件 | 常规文件 |
| l | 软链接(symbolic link) | 类似 Windows 的快捷方式 |
| b | 块设备文件(block device) | 例如硬盘、光驱等 |
| p | 管道文件(pipe) | 命名管道 |
| c | 字符设备文件(character device) | 例如屏幕等串口设备 |
| s | 套接口文件(socket) | 进程间通信套接口 |
4.3 基本权限
| 权限字符 | 权限名称 | 对文件的含义 | 对目录的含义 |
|---|---|---|---|
| r / - | 读(Read) | 具有读取文件内容的权限 | 具有浏览该目录信息的权限 |
| w / - | 写(Write) | 具有修改文件内容的权限 | 具有删除、移动目录内文件的权限 |
| x / - | 执行(Execute) | 具有执行文件的权限 | 具有进入目录的权限 |
注:- 表示不具有该权限。
4.3.1 权限符号说明
在 Linux 文件权限的字符表示中(如 ls -l 输出),权限部分由 10 个字符组成,格式为:[文件类型][所有者权限][所属组权限][其他用户权限]。以下对其中涉及的符号进行详细说明。
文件类型标识(第 1 位)
ls -l 输出的第一个字符表示文件类型:
| 标识符 | 文件类型 | 说明 |
|---|---|---|
- |
普通文件 | 常规文件 |
d |
目录(directory) | 文件夹 |
l |
软链接(symbolic link) | 类似 Windows 的快捷方式 |
c |
字符设备文件(character device) | 例如屏幕等串口设备 |
b |
块设备文件(block device) | 例如硬盘、光驱等 |
p |
管道文件(pipe) | 命名管道 |
s |
套接口文件(socket) | 进程间通信套接口 |
权限位表示(第 2---10 位)
权限位分为三组,每组 3 个字符,分别对应所有者、所属组和其他用户的权限。每个权限位只有两种状态:
- 显示字母(
r、w、x):表示该权限已开启r= Read(读权限),表示具有读取文件内容或浏览目录信息的权限w= Write(写权限),表示具有修改文件内容或管理目录内文件的权限x= Execute(执行权限),表示具有执行文件或进入目录的权限
- 显示
-:表示该权限未开启/被剥夺,-是占位符,表示"无"
关于 r / - 中 / 的说明
在文档中出现的 r / - 表述中,/ 并非 Linux 系统符号,而是文字表述中用于表示"或"关系的分隔符,读作"或",意思是:该权限位上可能出现 r(权限开启)或 -(权限未开启)两种情况之一。例如 r-x 表示:有读权限(r),没有写权限(-),有执行权限(x)。
需要注意的是,/ 在 Linux 中还有另一个重要含义:它是文件路径中的路径分隔符 ,也是根目录的标识。例如:
/root:root 用户的家目录/etc/passwd:系统用户配置文件(绝对路径)/home/user/file.txt:用户家目录下的文件(绝对路径)
路径分隔符 / 与权限位中的 r、- 没有任何关系,二者属于完全不同的概念。
权限表示示例
bash
[root@VM-0-6-centos ~]# ls -l
-rwxr-xr-x 1 alice staff 5120 Oct 1 10:00 script.sh
drwxr-xr-x 2 alice staff 4096 Oct 1 10:00 mydir/
# script.sh 是普通文件(-),所有者有 rwx(读写执行),
# 同组和其他用户有 r-x(读和执行)
# mydir/ 是目录(d),权限结构与上面相同
4.4 文件权限表示方式
4.4.1 字符表示法
权限用 10 个字符表示,格式为:文件类型所有者所属组其他用户
示例:drwxr-xr-x
- 第 1 位:文件类型(d = 目录,- = 普通文件,l = 链接等)
- 第 2---4 位:所有者权限(rwx)
- 第 5---7 位:所属组权限(r-x)
- 第 8---10 位:其他用户权限(r-x)
4.4.2 八进制数值表示法
| 权限 | 数值 |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
| - | 0 |
示例:644 = rw-r--r--(所有者读写,组读,其他读)
4.5 chmod 命令
功能:设置文件的访问权限。
格式 :chmod 选项 权限 文件名
常用选项:
-R:递归修改目录及其内容的权限。
注:只有文件的拥有者和 root 用户才可以改变文件的权限。
4.5.1 字符方式设置权限
格式:用户表示符+/-/=权限字符
权限运算符:
| 运算符 | 含义 |
|---|---|
| + | 增加权限 |
| - | 取消权限 |
| = | 赋予指定权限(取消其他权限) |
用户表示符:
| 符号 | 含义 |
|---|---|
| u | 拥有者(user) |
| g | 拥有者同组用户(group) |
| o | 其它用户(others) |
| a | 所有用户(all) |
示例:
bash
chmod u+w /home/abc.txt # 给所有者增加写权限
chmod o-x /home/abc.txt # 去掉其他用户的执行权限
chmod a=x /home/abc.txt # 所有用户仅设置执行权限
4.5.2 八进制方式设置权限
示例:
bash
chmod 664 /home/abc.txt # rw-rw-r--
chmod 640 /home/abc.txt # rw-r-----
chmod 755 /home/abc.txt # rwxr-xr-x
chmod 700 /home/abc.txt # rwx------
4.6 chown 命令
功能:修改文件的拥有者。
格式 :chown 选项 用户名 文件名
常用选项:
-R:递归修改目录及其内容的拥有者。
示例:
bash
chown user1 f1.txt # 修改文件拥有者
chown -R user1 filegroup1/ # 递归修改目录拥有者
chown user1:group1 file.txt # 同时修改拥有者和所属组
4.7 chgrp 命令
功能:修改文件或目录的所属组。
格式 :chgrp 选项 用户组名 文件名
常用选项:
-R:递归修改文件或目录的所属组。
示例:
bash
chgrp users /abc/f2
chgrp -R developers /project/
4.8 umask 命令
功能:查看或修改文件创建权限掩码。
说明:
- 新建文件默认权限为 0666(即
-rw-rw-rw-)。 - 新建目录默认权限为 0777(即
drwxrwxrwx)。 - 实际创建的权限 = 默认权限 & (~umask)。
- 超级用户默认掩码值为 0022,普通用户默认为 0002。
格式 :umask 权限值
示例:
bash
umask # 查看当前掩码
umask 044 # 设置掩码为 044(新建文件权限为 622,新建目录权限为 733)
4.9 file 指令
功能:辨识文件类型。
语法 :file 选项 文件或目录...
常用选项:
-c:详细显示指令执行过程,便于排错。-z:尝试解读压缩文件的内容。
示例:
bash
[root@VM-0-6-centos ~]# file myfile.txt
myfile.txt: ASCII text
[root@VM-0-6-centos ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64
4.10 sudo 权限分配
(1)修改 /etc/sudoers 文件分配权限
bash
# 使用 visudo 编辑(推荐,可语法检查)
visudo
# 或
chmod 740 /etc/sudoers
vim /etc/sudoers
格式:接受权限的用户 主机=(执行命令的用户) 命令
(2)使用 sudo 调用授权命令
bash
sudo -u 用户名 命令
# 例如:
sudo -u root /usr/sbin/useradd u2
4.11 目录权限说明
| 权限类型 | 说明 |
|---|---|
| 可执行权限(x) | 若目录没有可执行权限,则无法 cd 到目录中 |
| 可读权限(r) | 若目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容 |
| 可写权限(w) | 若目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件 |
注:即使用户不具有某文件的写权限,只要对所在目录具有写权限,即可删除该文件。
4.12 粘滞位(Sticky Bit)
为解决上述问题,Linux 引入了粘滞位(sticky bit)机制。
当目录被设置粘滞位后(使用 chmod +t),则该目录下的文件只能由以下用户删除:
- 超级管理员(root)
- 该目录的所有者
- 该文件的所有者
示例:
bash
# 给 /home 目录设置粘滞位
[root@VM-0-6-centos /]# chmod +t /home
# 验证(权限末尾出现 t)
[root@VM-0-6-centos /]# ls -ld /home
drwxrwxrwt. 4 root root 4096 Jul 16 00:25 /home
# 普通用户尝试删除他人文件将被拒绝
[sjx@VM-0-6-centos /]$ rm /home/my.txt
rm: remove write-protected regular empty file '/home/my.txt'? y
rm: cannot remove '/home/my.txt': Operation not permitted
注:/tmp 目录默认设置了粘滞位,确保用户只能删除自己创建的文件。
4.13 特殊权限位
除基本权限外,Linux 还有三种特殊权限位:
| 权限位 | 设置命令 | 说明 |
|---|---|---|
| SUID(set user ID) | chmod u+s 文件 或 chmod 4xxx 文件 |
执行时以文件拥有者身份运行 |
| SGID(set group ID) | chmod g+s 文件 或 chmod 2xxx 文件 |
执行时以文件所属组身份运行;对目录设置后,新建文件继承目录的组 |
| 粘滞位(sticky bit) | chmod +t 文件 或 chmod 1xxx 文件 |
仅对目录有效,限制用户删除他人文件 |
示例:
bash
# 设置 SUID(如 passwd 命令)
chmod u+s /usr/bin/passwd
ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
# 设置 SGID 到目录
chmod g+s /shared_dir
4.14 权限总结
- 文件的 r(读)、w(写)、x(执行)权限分别控制读取、修改和执行文件的能力。
- 目录的 x(执行)权限控制是否能进入该目录(cd),r(读)权限控制是否能列出目录内容(ls),w(写)权限控制是否能创建/删除目录中的文件。
- 若目录没有 x 权限,则无法 cd 进入该目录,即使有 r 权限也无法浏览内容。
- 若目录有 x 权限但没有 r 权限,用户可以 cd 进入目录,但无法使用 ls 列出文件列表(需知道确切文件名才能访问)。
- 粘滞位(sticky bit)用于公共目录(如 /tmp),防止用户删除他人文件。
- SUID/SGID 特殊权限位用于特定场景下的权限提升,使用时需谨慎。
UU
Linux 基础指令
导读
本文档系统介绍 Linux 操作系统的基础知识及常用命令,涵盖 Linux 发展历史、开源理念、发行版本、远程登录配置、常用指令及权限管理等内容。每个命令均提供语法说明、参数解释与示例,供学习与查阅使用。
1. Linux 背景
1.1 发展史
1.1.1 UNIX 发展史
Linux 与 UNIX 有着密切的关系,介绍 Linux 需从 UNIX 说起。
- 1968 年:通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了 Multics 操作系统,在多任务文件管理和用户连接中综合了许多新概念。
- 1969---1970 年:AT&T 贝尔实验室的 Ken Thompson 和 Dennis Ritchie 在 Multics 设计理念的基础上开发了 UNIX 系统。UNIX 是一个多用户、多任务的操作系统,运行在小型机上,满足科研环境需求。
- 1972 年:贝尔实验室开始发放 UNIX 商业版本,加州大学伯克利分校成为早期授权用户之一,并在系统中增加了许多后来成为标准的特性。
- 1975 年:伯克利发布了 BSD(Berkeley Software Distribution)版本的 UNIX,成为 AT&T UNIX 的主要竞争者,其他独立开发的 UNIX 版本也开始出现。
- 1980 年:微软公司开发了基于 UNIX 的 Xenix 系统。AT&T 发行了 System III,后演变为 System V。
- 1980 年代末:伯克利发布了 BSD Release 4.2,集成了 TCP/IP 网络协议栈,被 Sun Microsystems 等厂商广泛采用。UNIX 不同版本的分化促使了 UNIX 标准化工作的推进。
- 1980 年代中期:出现了两个竞争标准------基于 AT&T UNIX 的版本和 BSD 版本。
- 1980 年代后期:AT&T 成立了 UNIX 系统实验室(USL),致力于综合 UNIX 不同版本并开发标准系统。
- 1991 年:USL 综合了 System V Release 3、Solaris 和 Xenix 的特性,发行了 System V Release 4。与此同时,IBM、惠普等公司成立了 Open Software Foundation(OSF),推出自己的 UNIX 标准,形成了 OSF 版本与 System V Release 4 两个商用标准并存的局面。
- 1993 年:AT&T 将 UNIX 业务出售给 Novell 公司。Novell 发行了基于 System V Release 4 的 UNIXWare。Sun 公司将 System V Release 4 融入 Solaris。Motif 和 Openlook 两个图形用户界面标准合并为通用桌面环境(CDE)。
Unix

Windows
1.1.2 Linux 发展史
- 1991 年 8 月 25 日:赫尔辛基大学研究生 Linus Benedict Torvalds 在 comp.os.minix 新闻组发布了关于其操作系统的帖子,征求反馈。
- 1991 年 9 月 17 日:Linus 发布了 Linux 内核 0.01 版本(未公开宣传),仅支持 Intel 386 处理器。
- 1991 年 10 月 5 日:Linus 发布了 Linux 内核 0.02 版本,可运行 GNU Bourne Again Shell(bash)和 GNU C 编译器(gcc)。
- 1994 年 1 月 14 日:Linux 内核 1.0 正式发布,标志着内核达到稳定版本。
- 后续版本:Linux 内核版本持续演进,2.x 系列经历了 2.0(1996)、2.2(1997)、2.4(2001)、2.6(2003)等多个重要版本;3.x 系列(2011)引入内核同质化、新调度器和内存管理机制;4.x 系列(2015)引入 namespaces 增强、BPF 虚拟机等;5.x 系列(2019)引入 io_uring 异步 I/O、eBPF 成熟化等;6.x 系列(2022)支持 NVMe 带内认证、OpenRISC 和 LoongArch 架构等;7.0 版本(2026 年 4 月)确立 Rust 语言在内核中的长期支持地位。
1.2 开源
Linux 是一种自由和开放源代码的类 UNIX 操作系统。该操作系统的内核由 Linus Torvalds 于 1991 年首次发布。严格而言,"Linux"指操作系统内核本身,而"Linux 操作系统"通常指基于 Linux 内核的完整系统,包括用户空间应用程序、GUI 组件及其他工具。
GNU 通用公共许可证(GNU General Public License,简称 GNU GPL 或 GPL)是由自由软件基金会(FSF)发布的广泛使用的自由软件许可协议,最初由 Richard Stallman 为 GNU 计划而撰写。GPL 赋予用户运行、学习、共享和修改软件的自由,并要求基于 GPL 软件开发的衍生产品在发布时必须采用 GPL 许可证并公开源代码。目前主要版本为 GPLv2(1991 年发布)和 GPLv3(2007 年发布)。
Linux 是自由软件和开源软件发展中的代表性项目。遵循 GNU 通用公共许可证,任何个人和机构均可自由使用、修改和再发布 Linux 的源代码。随着 Linux 操作系统的发展,大量开源软件和实用工具在 Linux 平台上得到应用和普及。
1.3 官网
1.4 企业应用现状
1.4.1 Linux 在服务器领域的应用
随着开源软件影响力扩大,Linux 服务器操作系统在服务器操作系统市场中占据重要份额。在政府、金融、电信等国家关键领域均有广泛应用。据 IDC 等机构统计,Linux 在全球服务器操作系统市场(按部署量计)占比约 70%---90%,已成为服务器操作系统领域的主要操作系统之一。
1.4.2 Linux 在桌面领域的应用
国内市场已有中标麒麟 Linux、深度 Linux 等发行版,SUSE、Ubuntu 等也推出了面向桌面的 Linux 系统。Linux 桌面系统在政府、企业等领域得到一定应用。与 Windows 相比,Linux 桌面系统在易用性、软硬件兼容性、应用程序丰富度等方面仍存在差距,但近年来在开源生态推动下持续改进。
1.4.3 Linux 在移动与嵌入式领域的应用
Linux 凭借低成本、高可定制性和良好的移植性,广泛应用于手机、平板电脑、路由器、电视、电子游戏机等嵌入式设备。Android 操作系统基于 Linux 内核开发,是目前全球市场份额领先的移动操作系统。此外,思科在网络设备中使用了定制 Linux,阿里云开发了基于 Linux 的 YunOS 系统,数字视频录像机、舞台灯光控制系统等设备也逐渐采用定制 Linux 版本。
1.4.4 Linux 在云计算与大数据领域的应用
云计算与大数据产业基于开源软件平台快速发展,Linux 在该领域具有显著优势。据 Linux 基金会研究,多数企业已使用 Linux 构建云计算和大数据平台,Linux 已开始取代传统 Unix 成为云计算和大数据平台的主流操作系统选择。
1.5 发行版本
| 发行版 | 说明 |
|---|---|
| Debian | 以稳定性著称,适合服务器部署。社区驱动,适合系统管理员和高级用户使用。 |
| Ubuntu | 基于 Debian 的发行版,面向桌面和服务器市场。对新手友好,易于上手,在服务器、云计算领域有广泛应用。 |
| 红帽企业级 Linux(RHEL) | 面向商业市场的 Linux 发行版,由红帽公司维护。提供 RHCSA/RHCE 等认证体系。支持多种处理器架构,包括 x86 和 x86_64。 |
| CentOS | 基于 RHEL 源代码重新构建的企业级 Linux 发行版,与 RHEL 二进制兼容。注:CentOS 7 已于 2024 年 6 月结束生命周期(EOL),红帽已将 CentOS 项目转向 CentOS Stream(滚动预览版)。替代方案包括 Rocky Linux、AlmaLinux 等。 |
| Fedora | 红帽公司主导的社区发行版,充当新技术预览平台。新特性在此先行开发和测试,成熟后纳入 RHEL。适合希望体验最新技术的用户。 |
| Kali Linux | 基于 Debian 的渗透测试专用发行版,前身是 BackTrack。内置大量安全测试工具,支持即开即用。使用 APT 包管理器。 |
| 其他发行版 | SUSE Linux Enterprise、openSUSE、Arch Linux、Gentoo 等。 |
1.6 操作系统概念与定位
操作系统的核心目标是管理计算机硬件与软件资源,并为上层应用提供统一接口,使计算机更易于使用。

2. 使用 XShell 远程登录 Linux
2.1 关于 Linux 桌面
在实际服务器运维中,通常不使用图形化界面(GUI),而是通过命令行终端进行操作。
2.2 下载安装 XShell
XShell 是一款远程终端仿真软件。
家庭/学校免费版本:家庭/学校免费 - NetSarang Website
下载安装时可选择免费版本(Home/School)。
2.3 查看 Linux 主机 IP
可通过终端执行以下命令查看 IP 地址:
bash
ip addr show
# 或
ifconfig
2.4 使用 XShell 登录主机
在 XShell 中创建新连接,输入目标 Linux 主机的 IP 地址,选择 SSH 协议(默认端口 22),连接后输入用户名和密码即可登录。
也可在终端中使用 SSH 命令:
bash
ssh username@ip_address
XShell 常用操作:
| 操作 | 快捷键 |
|---|---|
| 复制 | Ctrl+Insert(部分键盘需配合 Fn 键) |
| 粘贴 | Shift+Insert |
| 全屏切换 | Alt+Enter |
注:Ctrl+C / Ctrl+V 在 XShell 默认配置中不可用,需在设置中手动配置。
3. Linux 基本指令
3.1 常用命令速查表
| 命令 | 全称 | 功能简述 |
|---|---|---|
| ls | list | 列出目录内容 |
| pwd | print working directory | 显示当前工作目录 |
| cd | change directory | 切换工作目录 |
| mkdir | make directory | 创建目录 |
| rmdir | remove directory | 删除空目录 |
| rm | remove | 删除文件或目录 |
| cp | copy | 复制文件或目录 |
| mv | move | 移动/重命名文件或目录 |
| cat | concatenate | 查看文件内容 |
| more | --- | 分页查看文件内容 |
| less | --- | 分页查看文件内容(支持前后浏览) |
| head | --- | 显示文件头部内容 |
| tail | --- | 显示文件尾部内容 |
| date | --- | 显示/设置系统时间 |
| cal | calendar | 显示日历 |
| find | --- | 搜索文件 |
| which | --- | 查找命令路径 |
| whereis | where is | 查找命令二进制/源码/手册 |
| alias | --- | 设置命令别名 |
| grep | global regular expression print | 文本搜索 |
| top | --- | 查看系统进程 |
| zip / unzip | --- | 压缩/解压 zip 文件 |
| tar | tape archive | 打包/解包归档文件 |
| bc | basic calculator | 计算器 |
| uname | unix name | 显示系统信息 |
| shutdown | --- | 关机/重启 |
| chmod | change mode | 修改文件权限 |
| chown | change owner | 修改文件所有者 |
| chgrp | change group | 修改文件所属组 |
| umask | user mask | 设置文件创建掩码 |
| file | --- | 辨识文件类型 |
| man | manual | 查看命令手册 |
| ssh | secure shell | 安全远程登录 |
| sudo | superuser do | 以超级用户身份执行命令 |
| ifconfig | interface configuration | 查看/配置网络接口 |
| netstat | network statistics | 查看网络状态 |
| ps | process status | 查看进程状态 |
| df | disk free | 查看磁盘空间 |
| dd | disk copy | 磁盘复制/转换 |
| ln | link | 创建链接 |
| passwd | password | 修改用户密码 |
| su | substitute user | 切换用户 |
| yum | Yellowdog Updater Modified | 包管理工具(RHEL 系) |
| ftp | file transfer protocol | 文件传输协议 |
| ping | --- | 测试网络连通性 |
| vim | vi improved | 文本编辑器 |
3.2 ls(list)指令
语法 :ls 选项 目录或文件
功能:列出目录下的所有子目录与文件。对于文件,将列出文件名及其他信息。
常用选项:
-a:列出目录下的所有文件,包括以.开头的隐含文件。-l:列出文件的详细信息(长格式)。
示例:
bash
[root@VM-0-6-centos ~]# ls
mydir
test.c
test.txt
[root@VM-0-6-centos ~]# ls -a
.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
.c
...
[root@VM-0-6-centos ~]# ls -al
total 80
dr-xr-x---. 8 root root 4096 Jul 7 16:41 .
dr-xr-xr-x. 19 root root 4096 Jul 7 21:11 ..
-rw------- 1 root root 11319 Jul 7 21:11 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x 4 root root 4096 Mar 22 02:55 .cache
...
3.3 pwd(print working directory)命令
语法 :pwd
功能:显示用户当前所在的目录。
常用选项:无。
示例:
bash
[root@VM-0-6-centos ~]# pwd
/root
3.4 cd(change directory)指令


路径基础概念:
- Linux 系统中,磁盘上的文件和目录被组织为树状结构,每个节点都是目录或文件。
- 普通文件一定是目录树的叶子节点。
- 目录可能是叶子(空目录),也可能是中间节点。
- 绝对路径 :从根目录
/开始的路径,不依赖当前目录。例如/root/mydir。 - 相对路径 :相对于当前工作目录的路径。例如
../temp。
语法 :cd 目录名
功能:切换当前工作目录。
常用路径表示:
| 路径表示 | 含义 |
|---|---|
| cd ... | 返回上级目录 |
| cd / | 返回根目录 |
| cd ~ | 返回当前用户家目录 |
| cd - | 返回上次所在目录 |
| cd | 返回当前用户家目录 |
示例:
bash
# 返回上级目录
[root@VM-0-6-centos mydir]# pwd
/root/mydir
[root@VM-0-6-centos mydir]# cd ..
[root@VM-0-6-centos ~]# pwd
/root
# 绝对路径
[root@VM-0-6-centos ~]# cd /root/mydir
[root@VM-0-6-centos mydir]# pwd
/root/mydir
# 相对路径
[root@VM-0-6-centos mydir]# cd ../temp
[root@VM-0-6-centos temp]# pwd
/root/temp
# 快速进入家目录
[root@VM-0-6-centos temp]# cd ~
[root@VM-0-6-centos ~]# pwd
/root
# 返回最近访问的目录
[root@VM-0-6-centos ~]# cd /
[root@VM-0-6-centos /]# pwd
/
[root@VM-0-6-centos /]# cd -
/root
[root@VM-0-6-centos ~]# pwd
/root
3.5 touch 指令
语法 :touch 选项... 文件...
功能:更改文件或目录的时间戳(存取时间和修改时间),或创建空文件。
常用选项:
-a:仅更改存取时间(access time)。-m:仅更改修改时间(modify time)。-c:如果文件不存在,则不创建新文件。
示例:
bash
# 创建空文件
[root@VM-0-6-centos ~]# touch newFile.txt
# 查看文件时间戳
[root@VM-0-6-centos ~]# stat newFile.txt
File: 'newFile.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 395142 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-07-07 22:07:52.742545133 +0800
Modify: 2026-07-07 22:07:52.742545133 +0800
Change: 2026-07-07 22:07:52.742545133 +0800
Birth: -
# 仅修改存取时间
[root@VM-0-6-centos ~]# touch -a newFile.txt
[root@VM-0-6-centos ~]# stat newFile.txt
...
Access: 2026-07-07 22:10:28.222602380 +0800
Modify: 2026-07-07 22:07:52.742545133 +0800
Change: 2026-07-07 22:10:28.222602380 +0800
# 仅修改修改时间
[root@VM-0-6-centos ~]# touch -m newFile.txt
[root@VM-0-6-centos ~]# stat newFile.txt
...
Access: 2026-07-07 22:10:28.222602380 +0800
Modify: 2026-07-07 22:12:03.474638556 +0800
Change: 2026-07-07 22:12:03.474638556 +0800
3.6 mkdir(make directory)指令
语法 :mkdir 选项 dirname...
功能:创建目录。
常用选项:
-p(--parents):递归创建目录,若路径中的某些目录不存在,将自动创建。
示例:
bash
# 创建单个目录
[root@VM-0-6-centos ~]# mkdir dir1
# 递归创建多级目录
[root@VM-0-6-centos ~]# mkdir -p a/b/c/d
# 验证目录结构
[root@VM-0-6-centos ~]# tree a
a
`-- b
`-- c
`-- d
3 directories, 0 files
注:tree 命令用于以树状结构显示目录内容。若未安装,可通过 yum install -y tree(root 用户)或 sudo yum install -y tree(普通用户)安装。
3.7 rmdir(remove directory)与 rm(remove)指令
3.7.1 rmdir 命令
语法 :rmdir 选项 目录名
功能:删除空目录。
常用选项:
-p:当子目录被删除后若父目录也变为空目录,则连带父目录一起删除。
示例:
bash
# 删除空目录
[root@VM-0-6-centos ~]# rmdir dir1
# 递归删除空目录链
[root@VM-0-6-centos ~]# rmdir -p a/b/c/d
注:若路径中存在非空目录,rmdir -p 将失败。
3.7.2 rm 命令
语法 :rm 选项 文件/目录...
功能:删除文件或目录。
常用选项:
-f(--force):忽略不存在的文件,不提示确认。-i(--interactive):删除前逐一询问。-r(-R,--recursive):递归删除目录及其内容。-v(--verbose):显示详细的处理过程。
示例:
bash
# 删除普通文件(交互式)
[root@VM-0-6-centos ~]# rm test.txt
rm: remove regular file 'test.txt'? y
# 删除目录(需加 -r 选项)
[root@VM-0-6-centos ~]# rm -r a
# 强制递归删除(不提示)
[root@VM-0-6-centos ~]# rm -rf mydir
警告:rm -rf 命令会强制递归删除指定路径下的所有文件和目录,且不可恢复。使用时务必确认路径正确。
3.8 man(manual)指令
语法 :man 章节号 命令
功能:查看命令的手册页(联机帮助文档)。
man 手册章节说明:
| 章节号 | 内容类型 | 说明 |
|---|---|---|
| 1 | 普通命令 | 用户命令,如 ls、cp 等 |
| 2 | 系统调用 | 内核提供的系统调用,如 open、write 等 |
| 3 | 库函数 | 标准库函数,如 printf、fread 等 |
| 4 | 特殊文件 | /dev 下的设备文件 |
| 5 | 文件格式 | 配置文件格式,如 passwd 文件字段含义 |
| 6 | 游戏 | 游戏相关 |
| 7 | 附件与变量 | 环境变量等,如 environ |
| 8 | 系统管理命令 | 仅 root 可用的管理命令,如 ifconfig |
| 9 | 内核例程 | 内核级函数 |
示例:
bash
[root@VM-0-6-centos ~]# man printf # 查看普通命令
[root@VM-0-6-centos ~]# man 2 fork # 查看系统调用
[root@VM-0-6-centos ~]# man 3 printf # 查看C库函数
[root@VM-0-6-centos ~]# man 7 environ # 查看环境变量
[root@VM-0-6-centos ~]# man man # 查看man手册本身
3.9 cp(copy)指令
语法 :cp 选项 源文件 目标文件/目录
功能:复制文件或目录。
说明:
- 同时指定两个以上源文件且目标为已存在目录时,所有源文件将被复制到该目录中。
- 若目标文件已存在,默认会覆盖(可加
-i选项启用确认)。
常用选项:
-f(--force):强行复制,若目标文件已存在则直接覆盖。-i(--interactive):覆盖文件前询问用户。-r(-R,--recursive):递归复制目录及其内容。-p:保留文件的属性(权限、时间戳等)。
示例:
bash
# 复制普通文件
[root@VM-0-6-centos ~]# echo 'hello linux' > myfile.txt
[root@VM-0-6-centos ~]# cp myfile.txt myfile-backup.txt
# 复制多个文件到目录
[root@VM-0-6-centos ~]# mkdir dir
[root@VM-0-6-centos ~]# cp *.txt dir
# 递归复制目录
[root@VM-0-6-centos ~]# cp -rf ./source_dir ./dest_dir
3.10 mv(move)指令
语法 :mv 选项 源文件/目录 目标文件/目录
功能:
- 当第二个参数是文件时,将源文件重命名为目标文件名。
- 当第二个参数是目录时,将源文件/目录移动到目标目录中。
常用选项:
-f:强制移动,若目标已存在则直接覆盖,不询问。-i:若目标已存在则询问是否覆盖。-n(--no-clobber):不覆盖已存在的文件。
示例:
bash
# 重命名文件
[root@VM-0-6-centos ~]# touch myfile.txt
[root@VM-0-6-centos ~]# mv myfile.txt yourfile.txt
# 移动文件到目录
[root@VM-0-6-centos ~]# mkdir temp
[root@VM-0-6-centos ~]# mv myfile.txt temp/
# 移动目录
[root@VM-0-6-centos ~]# mv temp/ ../
3.11 cat(concatenate)指令
语法 :cat 选项 文件...
功能:查看文件内容,也可用于连接多个文件。
常用选项:
-n:对输出的所有行编号(包括空行)。
示例:
bash
[root@VM-0-6-centos ~]# echo 'hello linux' > myfile.txt
[root@VM-0-6-centos ~]# cat myfile.txt
hello linux
[root@VM-0-6-centos ~]# cat -n myfile.txt
1 hello linux
3.12 more 指令
语法 :more 选项 文件
功能:分页查看文件内容。
常用选项:
-n:指定每屏显示的行数。q:退出 more。
示例:
bash
[root@VM-0-6-centos ~]# more myfile.txt
hello linux
hello me
hello you
...
# 指定每屏显示10行
[root@VM-0-6-centos ~]# more -10 myfile.txt
hello linux
hello me
...
--More--(68%)
3.13 less 指令
语法 :less 选项 文件
功能:分页查看文件内容。与 more 类似,但支持前后浏览、搜索等功能,且在查看前不加载整个文件。
常用选项:
-N:显示每行的行号。q:退出。
示例:
bash
[root@VM-0-6-centos ~]# less -N myfile.txt
1 hello linux
2 hello me
3 hello you
...
myfile.txt (END)
3.14 head 指令
语法 :head 选项 文件...
功能:显示文件的开头部分。默认显示前 10 行。
常用选项:
-n <行数>:指定显示的行数。
示例:
bash
[root@VM-0-6-centos ~]# head myfile.txt
hello linux
hello me
hello you
hello hello linux
hello me
hello you
hello linux
hello me
hello you
hello linux
[root@VM-0-6-centos ~]# head -5 myfile.txt
hello linux
hello me
hello you
hello hello linux
hello me
3.15 tail 指令
语法 :tail 选项 文件
功能:显示文件末尾内容。常用于查看日志文件。
常用选项:
-f:循环读取(实时监控文件尾部变化,适用于日志跟踪)。-n <行数>:显示指定行数的末尾内容。+<行数>:从指定行号开始显示(配合-n使用,如-n +10从第 10 行开始)。
示例:
bash
[root@VM-0-6-centos ~]# tail myfile.txt
hello linux
hello me
hello you
hello linux
hello me
hello you
hello linux
hello me
hello you
[root@VM-0-6-centos ~]# tail -3 myfile.txt
hello me
hello you
hello linux
# 显示第5到第10行的内容(head + tail 组合)
[root@VM-0-6-centos ~]# head -10 myfile.txt | tail -5
hello you
hello linux
hello me
hello you
hello linux
3.16 date 指令
语法 :date 选项 +格式
功能:显示或设置系统日期和时间。
3.16.1 时间显示格式标记
| 格式标记 | 含义 |
|---|---|
| %H | 小时(00---23) |
| %M | 分钟(00---59) |
| %S | 秒(00---59) |
| %d | 日(01---31) |
| %m | 月份(01---12) |
| %Y | 完整年份(0000---9999) |
| %F | 等同于 %Y-%m-%d |
| %X | 等同于 %H:%M:%S |
| %s | 时间戳(自 Unix 纪元以来的秒数) |
3.16.2 设置时间(需 root 权限)
bash
date -s "2008-05-23 01:01:01" # 设置完整日期和时间
date -s 20080523 # 设置日期,时间设为 00:00:00
date -s 01:01:01 # 仅设置时间
3.16.3 时间戳转换
bash
# 当前时间戳
[root@VM-0-6-centos ~]# date +%s
1783764501
# 时间戳转换为可读时间
[root@VM-0-6-centos ~]# date -d @0 +%Y/%m/%d-%H:%M:%S
1970/01/01-08:00:00
[root@VM-0-6-centos ~]# date -d @1000000000 +%Y/%m/%d-%H:%M:%S
2001/09/09-09:46:40
注:Unix 时间戳(Unix epoch/Unix time/POSIX time)是从 1970 年 1 月 1 日 00:00:00 UTC 开始所经过的秒数,不考虑闰秒。
3.17 cal(calendar)指令
语法 :cal 选项 月份 年份
功能:显示日历。
常用选项:
-3:显示上个月、当月和下个月的月历。-j:显示当年中的第几天。-y:显示当前年份的完整日历。
示例:
bash
# 显示当月日历
[root@VM-0-6-centos ~]# cal
July 2026
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
# 显示指定年份
[root@VM-0-6-centos ~]# cal 1949
# 显示前一个月、当月、下个月
[root@VM-0-6-centos ~]# cal -3
3.18 find 指令
语法 :find 路径 -options
功能:在目录结构中搜索文件并执行指定操作。
常用选项:
-name 文件名:按照文件名查找文件(支持通配符*、?)。-type f/d:按文件类型查找(f=文件,d=目录)。-size +N/-N:按文件大小查找(N 后跟 c=字节,k=KB,M=MB,G=GB)。-mtime +N/-N:按修改时间查找(N 天以前/以内)。-exec 命令 {} \;:对查找结果执行指定命令。
示例:
bash
# 从当前目录搜索文件
[root@VM-0-6-centos ~]# find -name myfile.txt
./myfile.txt
# 在家目录下搜索
[root@VM-0-6-centos ~]# find ~ -name myfile.txt
/root/myfile.txt
# 查找指定大小的文件
[root@VM-0-6-centos ~]# find / -type f -size +10M
# 查找并删除指定文件
[root@VM-0-6-centos ~]# find . -name "*.tmp" -exec rm {} \;
注:在大型文件系统中搜索可能消耗较多资源,建议必要时置于后台执行。
3.19 which 指令
功能:搜索并显示命令的完整路径(在 PATH 环境变量指定的目录中查找)。
示例:
bash
[root@VM-0-6-centos ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@VM-0-6-centos ~]# which pwd
/usr/bin/pwd
注:which 命令默认不显示别名。可使用 type 或 command -v 命令查看别名信息。
3.20 whereis 指令
功能:查找命令的二进制文件、源代码和手册页位置。
示例:
bash
[root@VM-0-6-centos ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@VM-0-6-centos ~]# whereis libc.so
libc: /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz
注:.so 为 shared object(动态共享库)文件扩展名。
3.21 alias 指令
功能:设置或查看命令别名。
示例:
bash
# 设置别名
[root@VM-0-6-centos ~]# alias hello='ls -a -l'
# 查看别名定义
[root@VM-0-6-centos ~]# alias hello
alias hello='ls -a -l'
# 使用别名
[root@VM-0-6-centos ~]# hello
total 84
...
# 取消别名
[root@VM-0-6-centos ~]# unalias hello
注:别名仅在当前会话中有效。如需永久生效,需将 alias 命令写入 ~/.bashrc 文件。
3.22 grep(global regular expression print)指令
语法 :grep 选项 搜索模式 文件...
功能:在文件中搜索匹配指定模式的行,并将匹配行打印出来。
常用选项:
-i:忽略大小写。-n:显示匹配行的行号。-v:反向选择,显示不匹配的行。-c:仅显示匹配行的数量。-r/-R:递归搜索目录。-l:仅显示匹配文件的名字。
示例:
bash
# 基本查找
[root@VM-0-6-centos ~]# grep 'hello Linux' tmp.txt
hello Linux
hello Linux
...
# 忽略大小写
[root@VM-0-6-centos ~]# grep -i 'hello Linux' tmp.txt
hEllo Linux
hello Linux
heLlo Linux
Hello Linux
...
# 显示行号
[root@VM-0-6-centos ~]# grep -n 'hello Linux' tmp.txt
2:hello Linux
5:hello Linux
...
# 反向选择(显示不匹配的行)
[root@VM-0-6-centos ~]# grep -v 'hello Linux' tmp.txt
hEllo Linux
heLlo Linux
Hello Linux
hellO Linux
# 组合选项:忽略大小写 + 显示行号 + 反向选择
[root@VM-0-6-centos ~]# grep -nvi 'hello linux' tmp.txt
1:hEllo Linux
3:heLlo Linux
4:Hello Linux
6:hellO Linux
3.23 top 指令
语法 :top 选项
功能:实时显示系统中进程的资源使用情况(CPU、内存等)。
常用选项:
-d <秒数>:指定刷新间隔(默认 3 秒)。-n <次数>:指定刷新次数后自动退出。-p <PID>:仅监控指定进程 ID。
示例:
bash
# 每1秒刷新,共刷新5次后退出
[root@VM-0-6-centos ~]# top -d 1 -n 5
# 退出 top:按 q 键
注:top 运行期间可通过交互式命令操作,常用快捷键包括:P(按 CPU 排序)、M(按内存排序)、k(杀死进程)、q(退出)。
3.24 zip / unzip 指令
语法 :zip 选项 目标.zip 源文件/目录
功能:将文件或目录压缩为 zip 格式。
常用选项:
-r:递归处理,将指定目录下的所有文件和子目录一并压缩。
示例:
bash
# 压缩文件
zip test.zip test.txt
# 压缩目录
zip -r test.zip test/
# 解压到指定目录
unzip test.zip -d /root/
sz/rz 文件传输:
该工具用于在 Windows 与远程 Linux 主机之间通过 SSH 协议传输文件。
bash
# 安装 lrzsz 包
sudo yum install -y lrzsz
# 从 Linux 发送文件到 Windows
sz test.zip
# 从 Windows 接收文件到 Linux
rz
3.25 tar(tape archive)指令
语法 :tar 选项 归档文件名 源文件或目录
常用选项:
| 选项 | 含义 |
|---|---|
-c |
创建归档文件(create) |
-x |
解包归档文件(extract) |
-t |
列出归档文件内容(list) |
-z |
通过 gzip 压缩/解压缩 |
-j |
通过 bzip2 压缩/解压缩 |
-v |
显示处理过程详情(verbose) |
-f |
指定归档文件名(file) |
-C |
解压到指定目录 |
示例:
bash
# 仅打包(不压缩)
[root@linux ~]# tar -cvf /tmp/etc.tar /etc
# 打包并 gzip 压缩
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc
# 打包并 bzip2 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc
# 查看压缩包内容
[root@linux ~]# tar -tzvf /tmp/etc.tar.gz
# 解压到指定目录
[root@linux ~]# tar -xzvf /tmp/etc.tar.gz -C /usr/local/src
# 仅解压压缩包中的特定文件
[root@linux ~]# tar -xzvf /tmp/etc.tar.gz etc/passwd
3.26 bc(basic calculator)指令
功能:进行任意精度算术运算,支持浮点运算。
示例:
bash
[root@VM-0-6-centos ~]# echo "3.14 * 2.5" | bc
7.850
[root@VM-0-6-centos ~]# echo "scale=4; 10/3" | bc
3.3333
3.27 uname(unix name)指令
语法 :uname 选项
功能:显示系统相关信息。
常用选项:
-a(--all):显示所有信息(内核名称、主机名、内核版本号、内核版本、硬件名、处理器类型、硬件平台类型、操作系统名称)。-r:仅显示内核释放级别。-v:显示内核版本。-n:显示主机名。-o:显示操作系统名称。
示例:
bash
[root@VM-0-6-centos ~]# uname -a
Linux VM-0-6-centos 3.10.0-1160.el7.x86_64 #1 SMP Tue Apr 11 17:01:00 UTC 2023
# 查看操作系统版本
[root@VM-0-6-centos ~]# lsb_release -a
3.28 常用快捷键
| 快捷键 | 功能 |
|---|---|
| Tab | 命令补全 / 文件名补全(快速连按两下可列出所有补全选项) |
| Ctrl+c | 终止当前运行的程序 |
| Ctrl+d | 键盘输入结束(EOF),也可用于退出当前用户会话 |
| 上/下键 | 查看历史命令 |
| Ctrl+r | 搜索历史命令 |
| Ctrl+l | 清屏 |
| Ctrl+a | 光标跳到行首 |
| Ctrl+e | 光标跳到行尾 |
| Ctrl+u | 删除光标前的整行内容 |
| Ctrl+w | 删除光标前的一个单词 |
3.29 关机与重启
语法 :shutdown 选项 时间
常见选项:
-h:将系统服务停掉后关机(halt)。-r:将系统服务停掉后重新启动(reboot)。-t sec:在关机/重启前等待 sec 秒。now:立即执行。
示例:
bash
# 立即关机
shutdown -h now
# 10分钟后重启
shutdown -r +10
# 在指定时间关机
shutdown -h 23:00
其他关机/重启命令:halt(立即停止系统)、reboot(立即重启)、poweroff(关闭电源)。
3.30 Shell 命令与运行原理
Linux 严格意义上指操作系统内核(kernel),用户不能直接使用 kernel,而是通过 shell(命令行解释器)与 kernel 沟通。
Shell 的主要功能:
- 将用户输入的命令翻译给内核处理。
- 将内核的处理结果翻译给用户。
用户类型:
| 用户类型 | 说明 | 命令提示符 |
|---|---|---|
| 超级用户(root) | 拥有系统最高权限,可执行所有操作 | # |
| 普通用户 | 权限受限,只能执行授权范围内的操作 | $ |
切换用户:
bash
# 从 root 切换到普通用户 user
su user
# 从普通用户切换到 root(需输入 root 密码)
su root
# 或简写为
su
# 以指定用户身份执行命令(需 sudo 权限)
sudo -u 用户名 命令
4. Linux 权限管理
4.1 文件访问者分类
| 分类 | 缩写 | 说明 |
|---|---|---|
| 文件所有者 | u(user) | 文件和目录的所有者 |
| 所有者所在组的用户 | g(group) | 文件和目录的所有者所在的组的用户 |
| 其他用户 | o(others) | 既不是所有者也不在所属组中的其他用户 |
4.2 文件类型
| 类型标识 | 文件类型 | 说明 |
|---|---|---|
| d | 目录(directory) | 文件夹 |
| - | 普通文件 | 常规文件 |
| l | 软链接(symbolic link) | 类似 Windows 的快捷方式 |
| b | 块设备文件(block device) | 例如硬盘、光驱等 |
| p | 管道文件(pipe) | 命名管道 |
| c | 字符设备文件(character device) | 例如屏幕等串口设备 |
| s | 套接口文件(socket) | 进程间通信套接口 |
4.3 基本权限
| 权限字符 | 权限名称 | 对文件的含义 | 对目录的含义 |
|---|---|---|---|
| r / - | 读(Read) | 具有读取文件内容的权限 | 具有浏览该目录信息的权限 |
| w / - | 写(Write) | 具有修改文件内容的权限 | 具有删除、移动目录内文件的权限 |
| x / - | 执行(Execute) | 具有执行文件的权限 | 具有进入目录的权限 |
注:- 表示不具有该权限。
4.3.1 权限符号说明
在 Linux 文件权限的字符表示中(如 ls -l 输出),权限部分由 10 个字符组成,格式为:[文件类型][所有者权限][所属组权限][其他用户权限]。以下对其中涉及的符号进行详细说明。
文件类型标识(第 1 位)
ls -l 输出的第一个字符表示文件类型:
| 标识符 | 文件类型 | 说明 |
|---|---|---|
- |
普通文件 | 常规文件 |
d |
目录(directory) | 文件夹 |
l |
软链接(symbolic link) | 类似 Windows 的快捷方式 |
c |
字符设备文件(character device) | 例如屏幕等串口设备 |
b |
块设备文件(block device) | 例如硬盘、光驱等 |
p |
管道文件(pipe) | 命名管道 |
s |
套接口文件(socket) | 进程间通信套接口 |
权限位表示(第 2---10 位)
权限位分为三组,每组 3 个字符,分别对应所有者、所属组和其他用户的权限。每个权限位只有两种状态:
- 显示字母(
r、w、x):表示该权限已开启r= Read(读权限),表示具有读取文件内容或浏览目录信息的权限w= Write(写权限),表示具有修改文件内容或管理目录内文件的权限x= Execute(执行权限),表示具有执行文件或进入目录的权限
- 显示
-:表示该权限未开启/被剥夺,-是占位符,表示"无"
关于 r / - 中 / 的说明
在文档中出现的 r / - 表述中,/ 并非 Linux 系统符号,而是文字表述中用于表示"或"关系的分隔符,读作"或",意思是:该权限位上可能出现 r(权限开启)或 -(权限未开启)两种情况之一。例如 r-x 表示:有读权限(r),没有写权限(-),有执行权限(x)。
需要注意的是,/ 在 Linux 中还有另一个重要含义:它是文件路径中的路径分隔符 ,也是根目录的标识。例如:
/root:root 用户的家目录/etc/passwd:系统用户配置文件(绝对路径)/home/user/file.txt:用户家目录下的文件(绝对路径)
路径分隔符 / 与权限位中的 r、- 没有任何关系,二者属于完全不同的概念。
权限表示示例
bash
[root@VM-0-6-centos ~]# ls -l
-rwxr-xr-x 1 alice staff 5120 Oct 1 10:00 script.sh
drwxr-xr-x 2 alice staff 4096 Oct 1 10:00 mydir/
# script.sh 是普通文件(-),所有者有 rwx(读写执行),
# 同组和其他用户有 r-x(读和执行)
# mydir/ 是目录(d),权限结构与上面相同
4.4 文件权限表示方式
4.4.1 字符表示法
权限用 10 个字符表示,格式为:文件类型所有者所属组其他用户
示例:drwxr-xr-x
- 第 1 位:文件类型(d = 目录,- = 普通文件,l = 链接等)
- 第 2---4 位:所有者权限(rwx)
- 第 5---7 位:所属组权限(r-x)
- 第 8---10 位:其他用户权限(r-x)
4.4.2 八进制数值表示法
| 权限 | 数值 |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
| - | 0 |
示例:644 = rw-r--r--(所有者读写,组读,其他读)
4.5 chmod 命令
功能:设置文件的访问权限。
格式 :chmod 选项 权限 文件名
常用选项:
-R:递归修改目录及其内容的权限。
注:只有文件的拥有者和 root 用户才可以改变文件的权限。
4.5.1 字符方式设置权限
格式:用户表示符+/-/=权限字符
权限运算符:
| 运算符 | 含义 |
|---|---|
| + | 增加权限 |
| - | 取消权限 |
| = | 赋予指定权限(取消其他权限) |
用户表示符:
| 符号 | 含义 |
|---|---|
| u | 拥有者(user) |
| g | 拥有者同组用户(group) |
| o | 其它用户(others) |
| a | 所有用户(all) |
示例:
bash
chmod u+w /home/abc.txt # 给所有者增加写权限
chmod o-x /home/abc.txt # 去掉其他用户的执行权限
chmod a=x /home/abc.txt # 所有用户仅设置执行权限
4.5.2 八进制方式设置权限
示例:
bash
chmod 664 /home/abc.txt # rw-rw-r--
chmod 640 /home/abc.txt # rw-r-----
chmod 755 /home/abc.txt # rwxr-xr-x
chmod 700 /home/abc.txt # rwx------
4.6 chown 命令
功能:修改文件的拥有者。
格式 :chown 选项 用户名 文件名
常用选项:
-R:递归修改目录及其内容的拥有者。
示例:
bash
chown user1 f1.txt # 修改文件拥有者
chown -R user1 filegroup1/ # 递归修改目录拥有者
chown user1:group1 file.txt # 同时修改拥有者和所属组
4.7 chgrp 命令
功能:修改文件或目录的所属组。
格式 :chgrp 选项 用户组名 文件名
常用选项:
-R:递归修改文件或目录的所属组。
示例:
bash
chgrp users /abc/f2
chgrp -R developers /project/
4.8 umask 命令
功能:查看或修改文件创建权限掩码。
说明:
- 新建文件默认权限为 0666(即
-rw-rw-rw-)。 - 新建目录默认权限为 0777(即
drwxrwxrwx)。 - 实际创建的权限 = 默认权限 & (~umask)。
- 超级用户默认掩码值为 0022,普通用户默认为 0002。
格式 :umask 权限值
示例:
bash
umask # 查看当前掩码
umask 044 # 设置掩码为 044(新建文件权限为 622,新建目录权限为 733)
4.9 file 指令
功能:辨识文件类型。
语法 :file 选项 文件或目录...
常用选项:
-c:详细显示指令执行过程,便于排错。-z:尝试解读压缩文件的内容。
示例:
bash
[root@VM-0-6-centos ~]# file myfile.txt
myfile.txt: ASCII text
[root@VM-0-6-centos ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64
4.10 sudo 权限分配
(1)修改 /etc/sudoers 文件分配权限
bash
# 使用 visudo 编辑(推荐,可语法检查)
visudo
# 或
chmod 740 /etc/sudoers
vim /etc/sudoers
格式:接受权限的用户 主机=(执行命令的用户) 命令
(2)使用 sudo 调用授权命令
bash
sudo -u 用户名 命令
# 例如:
sudo -u root /usr/sbin/useradd u2
4.11 目录权限说明
| 权限类型 | 说明 |
|---|---|
| 可执行权限(x) | 若目录没有可执行权限,则无法 cd 到目录中 |
| 可读权限(r) | 若目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容 |
| 可写权限(w) | 若目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件 |
注:即使用户不具有某文件的写权限,只要对所在目录具有写权限,即可删除该文件。
4.12 粘滞位(Sticky Bit)
为解决上述问题,Linux 引入了粘滞位(sticky bit)机制。
当目录被设置粘滞位后(使用 chmod +t),则该目录下的文件只能由以下用户删除:
- 超级管理员(root)
- 该目录的所有者
- 该文件的所有者
示例:
bash
# 给 /home 目录设置粘滞位
[root@VM-0-6-centos /]# chmod +t /home
# 验证(权限末尾出现 t)
[root@VM-0-6-centos /]# ls -ld /home
drwxrwxrwt. 4 root root 4096 Jul 16 00:25 /home
# 普通用户尝试删除他人文件将被拒绝
[sjx@VM-0-6-centos /]$ rm /home/my.txt
rm: remove write-protected regular empty file '/home/my.txt'? y
rm: cannot remove '/home/my.txt': Operation not permitted
注:/tmp 目录默认设置了粘滞位,确保用户只能删除自己创建的文件。
4.13 特殊权限位
除基本权限外,Linux 还有三种特殊权限位:
| 权限位 | 设置命令 | 说明 |
|---|---|---|
| SUID(set user ID) | chmod u+s 文件 或 chmod 4xxx 文件 |
执行时以文件拥有者身份运行 |
| SGID(set group ID) | chmod g+s 文件 或 chmod 2xxx 文件 |
执行时以文件所属组身份运行;对目录设置后,新建文件继承目录的组 |
| 粘滞位(sticky bit) | chmod +t 文件 或 chmod 1xxx 文件 |
仅对目录有效,限制用户删除他人文件 |
示例:
bash
# 设置 SUID(如 passwd 命令)
chmod u+s /usr/bin/passwd
ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
# 设置 SGID 到目录
chmod g+s /shared_dir
4.14 权限总结
- 文件的 r(读)、w(写)、x(执行)权限分别控制读取、修改和执行文件的能力。
- 目录的 x(执行)权限控制是否能进入该目录(cd),r(读)权限控制是否能列出目录内容(ls),w(写)权限控制是否能创建/删除目录中的文件。
- 若目录没有 x 权限,则无法 cd 进入该目录,即使有 r 权限也无法浏览内容。
- 若目录有 x 权限但没有 r 权限,用户可以 cd 进入目录,但无法使用 ls 列出文件列表(需知道确切文件名才能访问)。
- 粘滞位(sticky bit)用于公共目录(如 /tmp),防止用户删除他人文件。
- SUID/SGID 特殊权限位用于特定场景下的权限提升,使用时需谨慎。
注:本文为"Linux 系统基础命令"相关合辑。
略作重排,如有内容异常,请看原文。
Reference
- Linux------基础指令(上)-CSDN博客
https://blog.csdn.net/2501_93697341/article/details/162669879 - Linux------基础指令(中)-CSDN博客
https://blog.csdn.net/2501_93697341/article/details/162738398 - Linux------基础指令(下)_linux超级用户指令-CSDN博客
https://blog.csdn.net/2501_93697341/article/details/162912665