文章目录
一、Linux根目录 “ / ”
根目录下的子目录介绍
目录按照不同属性、功能做区分。目录较多,读者需要在工作中逐步熟悉。为方便理解和记忆,我在括号里注明了全称,具体介绍如下:
- /bin (Binaries):存放基本的用户命令二进制文件,如
ls
、cp
、mv
等,这些命令在单用户模式和所有用户环境中都可以使用。 - /boot(Boot):包含启动加载程序和内核相关文件,包括引导程序配置文件和操作系统内核。
- /dev(Device Files):包含设备文件,Linux系统中的所有设备都表示为文件,包括硬盘、终端、打印机等。
- /etc(Etcetera):存放系统的配置文件和脚本,如网络配置文件、启动文件、系统服务文件等。
- /home(Home Directories):每个用户的主目录都放在这个目录中,存放用户的个人数据和设置文件。
- /lib (Libraries):包含系统引导过程中需要的共享库文件和内核模块。
- /media (Removable Media):挂载点用于可移动媒体设备,如CD-ROM、USB驱动器等。
- /mnt (Mount):临时挂载文件系统的挂载点,系统管理员可以在此目录下手动挂载文件系统。
- /opt (Optional):可选的应用程序包存放目录,用于安装附加软件包。
- /proc(Process Information):虚拟文件系统,包含关于系统进程和内核状态的信息,动态生成的文件,可以访问系统信息和配置。
- /root (Root User Home):超级用户(root用户)的主目录,普通用户无权访问。
- /run(Run-Time Variable Data):运行时数据存储的地方,如系统启动后的进程ID文件和锁文件。
- /sbin (System Binaries):存放系统管理的二进制文件,只有超级用户或具有相应权限的用户才能使用这些命令。
- /srv(Service Data):存放由系统提供的服务相关的数据,如网站文件。
- /sys (System Files):另一个虚拟文件系统,类似于
/proc
,用于存放设备和内核的信息。 - /tmp (Temporary Files):存放临时文件,系统和应用程序在启动或运行过程中产生的临时数据文件。
- /usr(User Binaries & Data):包含用户级应用程序和文件,包括库、头文件、文档等,常见子目录有
/usr/bin
、/usr/lib
、/usr/share
等。 - /var (Variable Files):存放可变文件,如日志文件、邮件队列、打印队列等,常见子目录有
/var/log
、/var/mail
、/var/spool
等。
CentOS为例,常用目录:
作为运维,常用sbin、etc、opt、usr、var这几个目录,我们打交道比较多。
目录额外介绍
以根目录为起始 -> 各个功能的子日录 -> 逐级寻找
二、Linux命令基础
Shell
概念:
- Shell是一个命令解释器(command interpreter),位于操作系统的最外层,负责直接与用户进行对话,将用户的输入命令解释给内核,并经过内核处理后,将结果输出到屏幕反馈给用户。其作为用户和操作系统之间的桥梁,承担着命令解释和程序执行的重要任务。
- Shell也是一种程序设计语言,允许用户编写脚本以自动化执行一系列命令。
介绍:
- Linux系统中运行的一种特殊程序
- 用户登录Linux系统时,自动加载一个ShelI程序
- Bash是Linux系统中默认使用的Shel程序(文件位于/bin/bash)
- Shell有多种类型,常用的有/bin/bash等
命令运作原理
过程:
接收用户输入的命令→解释命令→传递给系统内核执行
-
用户输入指令+返回的结果(用户态)
用户态: 用户态(User Mode)是操作系统中用于运行用户级程序的一种模式,与内核态(Kernel Mode)相对应。在操作系统中,为了提供稳定、安全的环境给应用程序运行,系统会将硬件和软件资源划分为不同的保护级别,其中用户态和内核态就是两个主要的级别。
简单来说,就是可以下发指令,且可以返回结果的操作环境。
例如:Windows下cmd输入命令可以对系统进行操作管理,Linux同理。
再如:在字符界面下的命令就是用户态,在图形界面下的鼠标操作就是用户态。假设这就是用户态的“语言”。
内核态: 内核态(Kernel Mode),也被称为核心态或特权态,是操作系统内核所运行的模式,具有最高权限。在这个模式下,运行的代码可以无限制地访问系统存储、外部设备等资源,执行各种特权指令。
工作流程: 1、接受指令 2、执行 3、传递返回结果。且过程中用户无法直接干预。
使用二进制做沟通,假设这是内核态的“语言”。
-
Shell充当“翻译官”
因为用户态和内核态的“语言”并不通,此时就需要Shell“翻译”。
以上可以称为用户与系统的沟通方式。
-
系统内核要明白干什么并且执行、然后返回结果
三、Linux命令的分类
内部命令与外部命令的区别
内部命令 | 外部命令 |
---|---|
集成于Shel解释器程序内部的一些特殊指令也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序属于Shell的一部分 |
属于Shell的一部分自动载入内存,可以直接使用 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行/bin,/usr/bin,/usr/local/bin等 |
简洁区分:
- 内部命令:由shell自身提供,不需要额外程序,执行快,不受PATH影响。
- 外部命令:需要外部程序文件,执行相对慢,受PATH影响,需要查找。
如:cd命令本质而言,就是一个可执行程序或者一个函数获变成代码
在Linux系统中,/sbin
和/bin
目录都扮演着重要的角色,但它们存放的命令类型和使用场景有所不同。以下是针对这两个目录下命令的详细区分:
查看方法:
-
使用
type
命令加上命令名来查看。 -
如果返回
command is a shell builtin
,那么该命令是内部命令。 -
如果返回的是命令的路径(如
/bin/ls
),那么该命令是外部命令。 -
如:
type cd # 输出:cd is a shell builtin type ls # 输出:/bin/ls (假设ls位于/bin目录下),说明ls是外部命令
四、Linux命令行的格式
通用的命令行使用格式
格式
命令字 [选项] [参数] (注:区分大小写)
命令字
- 是整条命令中最关键的一部分
- 唯一确定一条命令
- 定义的基本功能【必备】
选项
- 短格式选项:使用“-”符号引导
- 长格式选项:使用“- -”符号引导
- 添加的拓展功能【不必备,且部分命令有默认选项】
- 注:多个单字符选项可以组合在一起使用
参数
- 命令字的处理对象
- 可以是文件名、目录(路径)名或用户名等内容
- 个数可以是零到多个
- 功能的操作/执行对象【不必备,且部分命令也有默认选项】
注意
- 选项可以为多个
- 参数也可以有多个,具体需要按照命令的基本功能来看
- 参数的前后顺序也是有讲究的
五、编辑Linux命令行
编辑Linux命令行的辅助操作
可以理解为快捷键,如表所示
辅助操作(快捷键) | 描述 |
---|---|
Tab 键 | 自动补齐(命令或文件名) |
反斜杠 \ | 强制换行(在命令行中继续输入) |
Ctrl+U 组合键 | 清空当前命令行至行首的内容 |
Ctrl+K 组合键 | 清空当前命令行至行尾的内容 |
Ctrl+L 组合键 | 清屏(相当于执行clear命令) |
Ctrl+C 组合键 | 取消当前正在编辑的命令(或中断当前进程) |
Ctrl+A (或 Home 键) 组合键 | 切换到命令行的开头(行首) |
Ctrl+E (或 End 键) 组合键 | 切换到命令行的末尾(行尾) |
六、获得命令帮助的方法
内部命令help
查看Shell内部命令的帮助信息
外部命令的“–help”选项
适用于大多数Linux外部命令
使用man命令阅读手册页
- 使用“↑””、“↓”(ENTER)方向键滚动一行文本
- 使用 Page Up和 Page Down(空格)键翻页
- 按 Q 或 q键退岀阅读环境
- 按“/”键查找内容,n键向下查找,N键向上查找
七、查看当前的工作目录-pwd
显示用户当前所在的工作目录位置(绝对路径)
格式
pwd
示例
[root@localhost ~]# pwd
/root
八、切换工作目录-cd
将用户的工作目录更改到其他位置
说明
命令格式 | 说明 |
---|---|
cd 目标位置 | 切换到指定的目标位置 |
cd 和 cd ~ | 若不指定目标位置,则切换到当前用户的宿主目录(通常是用户的家目录) |
cd - | 切换到上一次执行 cd 命令之前所在的目录 |
九、绝对路径与相对路径
绝对路径
定义:
绝对路径是指从根目录(或称为顶级目录)开始的完整路径,它包含了到达目标文件或目录所需经过的所有目录路径。绝对路径是固定的,不依赖于当前工作目录的位置。
特点:
- 唯一性:在同一个文件系统中,绝对路径是唯一的,指向特定的文件或目录。
- 完整性:包含了从根目录到目标文件或目录的所有路径信息。
- 不依赖于当前工作目录:无论当前工作目录在哪里,使用绝对路径都能准确找到目标文件或目录。
示例:
- 在Windows系统中,绝对路径可能类似于
C:\Users\UserName\Documents\file.txt
。 - 在Unix/Linux系统中,绝对路径可能类似于
/home/username/documents/file.txt
。
相对路径
定义:
相对路径是指相对于当前工作目录(或当前文件所在的目录)的路径。它描述了从当前位置到目标文件或目录的路径关系。
特点:
- 相对性:相对路径是相对于当前工作目录而言的,因此可能会因当前工作目录的不同而有所变化。
- 简洁性:在描述与当前目录较近的文件或目录时,相对路径通常比绝对路径更简洁。
- 灵活性:使用相对路径可以使得文件或目录的引用更加灵活,便于在不同环境中迁移和部署。
表现形式:
表现形式 | 说明 | 示例 |
---|---|---|
直接使用目录名或文件名 | 表示当前工作目录中的子目录、文件的位置 | grub.conf |
以一个点号“.”开头 | 表示以当前的工作目录作为起点(通常可省略,因为默认就是当前目录) | ./grub.conf |
以两个点号“…”开头 | 表示以当前目录的上一级目录(父目录)作为起点 | …/vmlinuz |
以“~用户名”形式开头 | 表示以指定用户的宿主目录作为起点 | ~teacher |
以“~”形式开头 | 表示以当前用户的宿主目录作为起点(省略用户名) | 或 /grub.conf(假设示例为在该目录下查找grub.conf) |
示例及表示方法:
.
表示当前目录。..
表示上一级目录。.../
(在某些环境下可能不常见,但理论上可以理解为上上级目录,实际使用时需注意兼容性)或../../
明确表示上上级目录。- 例如,如果当前工作目录是
/home/username/documents
,那么相对路径../reports/report.pdf
将指向/home/username/reports/report.pdf
。
十、列表显示目录内容-ls
ls
命令是Linux系统中用于列出目录内容的常用命令。用于显示目录中内容,包括子目录和文件相关属性信息
格式
ls [选项] [文件或目录...]
常用选项
- -l、-a、-A、-d、-h、-R、–color
结合通配符
- “?”:代表任意一个字符,有且一个字符
- “*”:代表任意数个字符,可以是0个或者1个或者多个
- “[]”:表示可以匹配字符组中的任意一个字符,如[abc]、[a-f]
ls
命令的一些常用选项详细说明:
选项 | 描述 |
---|---|
-a | 显示所有文件和目录,包括以.开头的隐藏文件和目录。在Linux中,以.开头的文件被视为隐藏文件,默认情况下ls命令不会显示它们。 |
-l | 以长列表的方式显示文件和目录的详细信息。这包括文件权限、所有者、大小、最后修改时间等。长列表格式对于查看文件详细属性非常有用。 |
-h | 与-l选项结合使用时,以人类可读的格式显示文件大小,如KB、MB等,而不是默认的字节数。这使得文件大小更易于理解。 |
-t | 按照文件或目录的修改时间排序。默认情况下,ls命令按照文件名的字母顺序进行排序。使用-t选项后,结果将按照修改时间的降序排列。 |
-r | 逆序显示文件或目录列表。如果与-l选项结合使用,则会按照修改时间的逆序显示文件或目录的详细信息。 |
-S | 按照文件或目录的大小进行排序。这有助于快速找到占用空间最大的文件或目录。 |
-i | 显示文件或目录的inode号。inode是Linux文件系统中每个文件或目录的唯一标识符,它包含了文件的元数据,但不包括文件名。 |
-d | 仅显示目录本身的属性,而不列出目录下的内容。这对于查看目录本身的权限和修改时间等信息非常有用。 |
-R | 递归地列出目录及其子目录中的所有文件和目录。默认情况下,ls命令仅列出指定目录下的文件和子目录,而不递归地列出子目录中的内容。 |
–color | 以彩色方式显示文件和目录,以便更容易区分不同类型的文件(如目录、可执行文件、链接文件等)。这个选项通常默认开启,但可以通过设置环境变量来关闭或调整。 |
-A | 显示所有文件和目录,但不包括.(当前目录)和…(父目录)。这是-a选项的一个变体,用于在列出内容时排除这两个特殊目录。 |
常用:-R、-i
十一、通配符
介绍
- 去匹配文件名(包括文件夹)ls
- grep 文件内容(三剑客之一)(三剑客是三个非常强大且常用的命令行工具:grep、sed和awk)
grep功能描述:grep是Global Regular Expression Print的缩写,是一种强大的文本搜索工具。它使用正则表达式来搜索文本,并打印出匹配的行。grep常用于在文件中搜索指定的字符串或模式,也可以通过管道(|)与其他命令结合使用,实现更复杂的文本搜索和处理。
符号/通配符 | 使用场景 | 效果 | 示例 |
---|---|---|---|
? | 文件名匹配(如ls) | 匹配任意单个字符 | f?.txt 匹配 fa.txt、fb.txt 等 |
* | 文件名匹配(如ls) | 匹配任意数量的字符(包括零个字符),但不包括.开头的隐藏文件 | *.txt 匹配所有.txt文件,但不包括.hidden.txt |
{1…10} | Bash扩展 | 匹配列表中的数字或字符串之一(Bash特有) | echo {1…10} 输出 1 2 3 4 5 6 7 8 9 10 |
{0…9} | Bash扩展 | 同上,但匹配0到9的数字 | echo {0…9} 输出 0 1 2 3 4 5 6 7 8 9 |
{a…z} | Bash扩展 | 匹配a到z的所有小写字母 | echo {a…z} 输出 a b c … z(注意:实际效果可能因Shell而异) |
{A…Z} | Bash扩展 | 匹配A到Z的所有大写字母 | echo {A…Z} 输出 A B C … Z |
[123] | 文件名匹配、正则表达式 | 匹配方括号内的任意一个字符 | [123].txt 匹配 1.txt、2.txt、3.txt |
[a-z] | 正则表达式(如grep) | 匹配任意单个小写字母 | grep ‘[a-z]’ file.txt 匹配包含任意小写字母的行 |
[A-Z] | 正则表达式(如grep) | 匹配任意单个大写字母 | grep ‘[A-Z]’ file.txt 匹配包含任意大写字母的行 |
[0-9] | 正则表达式(如grep) | 匹配任意单个数字 | grep ‘[0-9]’ file.txt 匹配包含任意数字的行 |
[^dnl] | 正则表达式(如grep) | 匹配除了d、n、l之外的任意字符 | grep ‘[^dnl]’ file.txt 匹配不包含d、n、l的行 |
[[:lower:]] | 正则表达式(如grep) | 匹配任意小写字母,等同于[a-z] | grep ‘[[:lower:]]’ file.txt |
[[:upper:]] | 正则表达式(如grep) | 匹配任意大写字母,等同于[A-Z] | grep ‘[[:upper:]]’ file.txt |
[[:digit:]] | 正则表达式(如grep) | 匹配任意数字,等同于[0-9] | grep ‘[[:digit:]]’ file.txt |
\ | 转义符,表示原来的意思 |
注意
-
ls
命令通常使用Shell的通配符功能来匹配文件名 -
grep
等文本处理工具使用正则表达式来匹配文本内容 -
Bash扩展(如
{1..10}
)是Bash Shell特有的功能,可能不适用于所有Shell环境。
ll后的文件属性的字段
字段的区分号如图标识:
第1字段: 文件属性字
第1个字符代表文件的类型:
- “-”表示该文件是一个普通文件
- "d"表示该文件是一个目录
- “l”表示该文件是一个软链接文件。类似于windows下的快捷方式
第1字符的后面9个字母表示该文件或目录的权限位:
- r表示读(查看、下载)
- w表示写(添加、更改、删除、上传)
- x表示执行(运行文件、切换目录)
其中以3个3个做分隔:
- 前三个表示文件拥有者(属主) 的权限
- 中间三个表示文件所属组拥有的权限
- 最后三个表示其他用户拥有的权限。
注意
- 新建的文件默认是不带执行权限的(文件可以没有)
- 新建的目录是有执行权限的(目录得有)
第2字段:文件硬链接数
- 硬连接: 硬连接指通过索引节点来进行连接。
- 如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数
- 如果是一个目录,则第2字段表示该目录所含子目录的个数
- 如果新建一个空目录,这个目录的第二字段就是2,表示该目录下有两个子目录
第3字段:文件\目录拥有者 chown(属主)
第4字段:文件\目录拥有者所在的组 chgrp(属组)
第5字段: 文件所占用的空间(默认以字节为单位)
如果是一个目录,则表示该目录的大小,而不是目录以及它下面的文件的总大小。
Linux系统中一切皆文件,因此目录也是一种文件。
第6字段:文件\目录最近访问或修改时间
第7字段:文件名
如果是一个符号链接(软链接文件),那么会有一个“->"箭头符号,后面根一个它指向的文件名
十二、设置别名-alias(不常用)
设置别名
通过别名机制简化常用的、比较长的命令
格式
alias 命令别名='命令'
注:“=”两边不能有空格
示例
设置myls为ls -alh的别名
alias myls='ls -alh' ##此时别名为myls
取消别名
格式
unalias 命令别名
十三、统计目录及文件空间占用情况-du
统计指定目录(或文件)所占用磁盘空间的大小
格式
du [选项] [文件或目录...]
常用选项
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s | 只统计所占用空间总的大小,而不是统计每个子目录、文件的大小(注意:选项-a和-s不可同时使用) |
–max-depth=n | 统计所有小于等于第 n 层的目录的总大小(刁钻面试题) |
示例
统计出/var/log目录中子目录的大小
du -h --max-depth=1 /var/log
十四、创建新目录-mkdir
格式
创建新的空目录
mkdir [选项] [目录位置及名称...]
-p:一次性创建嵌套的多层目录
示例
在当前目录下创建名为 public html 的子目录
mkdir public html
创建目录 /aa,在 /aa 目录下创建子目录bb,在 /aa/bb目录下创建字目录cc
mkdir -p /aa/bb/cc
十五、创建空文件-touch命令
更新文件的时间标记
经常用于创建多个新的空文件
格式
touch 文件...
示例
创建两个空文件,充件名分别为 aa.txt和bb.txt
touch aa bb
touch {a,b}.txt
写在后面:学习Tips
我们在学习基础命令的过程中,应主要关注遇到问题和解决故障时:
1、知道问题是什么情况;
2、尽可能的一步一步定位到矛盾点;
3、用什么方法定位到矛盾点。
总结
本文介绍了Linux常用的一些命令,实际使用难免会有记不住和疏漏的情况,因此需要慢慢积累和练习。
感谢大家的关注,后续还会持续更新其他命令和相关技术要点。
注:图片来源于网络,侵删。