目录按照不同属性、功能做区分。目录较多,读者需要在工作中逐步熟悉。为方便理解和记忆,我在括号里注明了全称,具体介绍如下:
ls
、cp
、mv
等,这些命令在单用户模式和所有用户环境中都可以使用。/proc
,用于存放设备和内核的信息。/usr/bin
、/usr/lib
、/usr/share
等。/var/log
、/var/mail
、/var/spool
等。作为运维,常用sbin、etc、opt、usr、var这几个目录,我们打交道比较多。
以根目录为起始 -> 各个功能的子日录 -> 逐级寻找
概念:
介绍:
过程:
接收用户输入的命令→解释命令→传递给系统内核执行
用户输入指令+返回的结果(用户态)
用户态: 用户态(User Mode)是操作系统中用于运行用户级程序的一种模式,与内核态(Kernel Mode)相对应。在操作系统中,为了提供稳定、安全的环境给应用程序运行,系统会将硬件和软件资源划分为不同的保护级别,其中用户态和内核态就是两个主要的级别。
简单来说,就是可以下发指令,且可以返回结果的操作环境。
例如:Windows下cmd输入命令可以对系统进行操作管理,Linux同理。
再如:在字符界面下的命令就是用户态,在图形界面下的鼠标操作就是用户态。假设这就是用户态的“语言”。
内核态: 内核态(Kernel Mode),也被称为核心态或特权态,是操作系统内核所运行的模式,具有最高权限。在这个模式下,运行的代码可以无限制地访问系统存储、外部设备等资源,执行各种特权指令。
工作流程: 1、接受指令 2、执行 3、传递返回结果。且过程中用户无法直接干预。
使用二进制做沟通,假设这是内核态的“语言”。
Shell充当“翻译官”
因为用户态和内核态的“语言”并不通,此时就需要Shell“翻译”。
以上可以称为用户与系统的沟通方式。
系统内核要明白干什么并且执行、然后返回结果
内部命令 | 外部命令 |
---|---|
集成于Shel解释器程序内部的一些特殊指令也称为内建(Built-in)指令 | Linux系统中能够完成特定功能的脚本文件或二进制程序属于Shell的一部分 |
属于Shell的一部分自动载入内存,可以直接使用 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,可以直接使用 | 必须知道其对应的文件位置,由Shell加载后才能执行/bin,/usr/bin,/usr/local/bin等 |
简洁区分:
如: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是外部命令
格式
命令字 [选项] [参数] (注:区分大小写)
命令字
选项
参数
注意
可以理解为快捷键,如表所示
辅助操作(快捷键) | 描述 |
---|---|
Tab 键 | 自动补齐(命令或文件名) |
反斜杠 \ | 强制换行(在命令行中继续输入) |
Ctrl+U 组合键 | 清空当前命令行至行首的内容 |
Ctrl+K 组合键 | 清空当前命令行至行尾的内容 |
Ctrl+L 组合键 | 清屏(相当于执行clear命令) |
Ctrl+C 组合键 | 取消当前正在编辑的命令(或中断当前进程) |
Ctrl+A (或 Home 键) 组合键 | 切换到命令行的开头(行首) |
Ctrl+E (或 End 键) 组合键 | 切换到命令行的末尾(行尾) |
查看Shell内部命令的帮助信息
适用于大多数Linux外部命令
显示用户当前所在的工作目录位置(绝对路径)
格式
pwd
示例
[root@localhost ~]# pwd /root
将用户的工作目录更改到其他位置
说明
命令格式 | 说明 |
---|---|
cd 目标位置 | 切换到指定的目标位置 |
cd 和 cd ~ | 若不指定目标位置,则切换到当前用户的宿主目录(通常是用户的家目录) |
cd - | 切换到上一次执行 cd 命令之前所在的目录 |
定义:
绝对路径是指从根目录(或称为顶级目录)开始的完整路径,它包含了到达目标文件或目录所需经过的所有目录路径。绝对路径是固定的,不依赖于当前工作目录的位置。
特点:
示例:
C:\Users\UserName\Documents\file.txt
。/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
命令是Linux系统中用于列出目录内容的常用命令。用于显示目录中内容,包括子目录和文件相关属性信息
格式
ls [选项] [文件或目录...]
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
介绍
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环境。
字段的区分号如图标识:
第1字段: 文件属性字
第1个字符代表文件的类型:
第1字符的后面9个字母表示该文件或目录的权限位:
其中以3个3个做分隔:
注意
第2字段:文件硬链接数
第3字段:文件\目录拥有者 chown(属主)
第4字段:文件\目录拥有者所在的组 chgrp(属组)
第5字段: 文件所占用的空间(默认以字节为单位)
如果是一个目录,则表示该目录的大小,而不是目录以及它下面的文件的总大小。
Linux系统中一切皆文件,因此目录也是一种文件。
第6字段:文件\目录最近访问或修改时间
第7字段:文件名
如果是一个符号链接(软链接文件),那么会有一个“->"箭头符号,后面根一个它指向的文件名
通过别名机制简化常用的、比较长的命令
格式
alias 命令别名='命令'
注:“=”两边不能有空格
示例
设置myls为ls -alh的别名
alias myls='ls -alh' ##此时别名为myls
格式
unalias 命令别名
统计指定目录(或文件)所占用磁盘空间的大小
格式
du [选项] [文件或目录...]
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s | 只统计所占用空间总的大小,而不是统计每个子目录、文件的大小(注意:选项-a和-s不可同时使用) |
–max-depth=n | 统计所有小于等于第 n 层的目录的总大小(刁钻面试题) |
示例
统计出/var/log目录中子目录的大小
du -h --max-depth=1 /var/log
格式
创建新的空目录
mkdir [选项] [目录位置及名称...]
-p:一次性创建嵌套的多层目录
示例
在当前目录下创建名为 public html 的子目录
mkdir public html
创建目录 /aa,在 /aa 目录下创建子目录bb,在 /aa/bb目录下创建字目录cc
mkdir -p /aa/bb/cc
更新文件的时间标记
经常用于创建多个新的空文件
格式
touch 文件...
示例
创建两个空文件,充件名分别为 aa.txt和bb.txt
touch aa bb touch {a,b}.txt
我们在学习基础命令的过程中,应主要关注遇到问题和解决故障时:
1、知道问题是什么情况;
2、尽可能的一步一步定位到矛盾点;
3、用什么方法定位到矛盾点。
本文介绍了Linux常用的一些命令,实际使用难免会有记不住和疏漏的情况,因此需要慢慢积累和练习。
感谢大家的关注,后续还会持续更新其他命令和相关技术要点。
注:图片来源于网络,侵删。