【Linux终端探幽】—基础指令集(上):暗室点灯

目录

pwd:定位你的终端坐标

ls:揭开目录的神秘面纱

cd:穿梭于文件迷宫的门钥

根目录:文件世界的起点灯塔

touch:触碰时间的魔法刻痕

stat:窥探文件的时空档案

mkdir:搭建目录的积木工坊

tree:俯瞰文件森林的全景地图

which:追踪命令的隐身斗篷

指令本质:终端语言的底层密语

alias:为命令赋予灵魂的代号

完结散花:终端的灯火已为你点亮


pwd:定位你的终端坐标

------ 黑暗中点亮路径的指南针

语法: pwd

功能:显示用户当前所在的目录

常用选项: 无

在 Linux 系统中,用户登录后的初始位置与其用户类型有关。当以超级用户 root 身份登录 时,默认会处于 /root 目录下。我们可以通过 pwd 命令进行验证,pwd 即 "person work directory" 的缩写,意为当前用户所在工作目录。

当我们用我们的普通用户(假设是qsy) 登入我们的系统时,我们是默认在**/home/qsy目录**下的

那么如何区分我们登录的用户是超级用户还是普通用户呢?这里补充一条简单的指令:whoami (显示当前用户名称)

这里衍生出一个值得探讨的问题:在 Linux 环境中,目录的本质究竟是什么?

在 Windows 操作系统里,我们习惯表述为 "打开某某文件 / 文件夹",而在 Linux 系统语境下频繁提及的 "目录",从功能和概念层面而言,它与 Windows 系统中的文件夹高度相似,二者均用于组织和管理文件,为文件提供了一种层级化的存储结构。

ls:揭开目录的神秘面纱

------ 用光扫描文件的藏宝图

语法: ls [选项][目录或文件]

功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。

常用选项:(下面只演示一下常用到的选项,其他选项我们要用时直接查阅资料即可!)

1、-a 列出目录下的所有文件,包括以 . 开头的隐含文件。

这里说明一下,在Linux下,以 . 开头的文件都是隐藏文件

但是,Linux下,任何一个目录,即使是空目录,默认系统都会自带有 . 和 .. 目录

2、-d 将目录像文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录

3、-i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件

4、-k 以 k 字节的形式表示文件的大小。ls --alk 指定文件

5、-l 列出文件的详细信息(属性)

值得说明的是:文件=内容+属性。我们对文件操作要么是对文件内容操作,要么对文件属性操作。ls就是对文件的属性操作,只不过只显示文件名。

选项其实还可以叠加使用:

调整选项的先后顺序没有关系 !

6、-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)

7、-F 在每个文件名后附上一个字符以说明该文件的类型,"*"表示可执行的普通文件;"/"表示目录;"@"表 示符号链接;"|"表示FIFOs;"="表示套接字(sockets)。(目录类型识别)

8、-r 对目录反向排序。

9、-t 以时间排序。

10、-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)

11、-R 列出所有子目录下的文件。(递归)

12、-1 一行只输出一个文件

cd:穿梭于文件迷宫的门钥

------ 从入口到未知领域的通道

语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。

前面我们说过任何一个目录即使是空目录,系统都会默认自带两个隐藏目录:. 和**..**

那这两个目录到底是什么意思呢?

这里我就直接说结论:. 表示当前目录 .. 表示上级目录!

下面用cd来验证一下:

. 表示当前目录

.. 表示上级目录

果然如此!cd ..就是回退到上级目录下!

我们可以把它理解为Windows下的文件夹回退键!

cd ~:进入用户家目录

任何一个Linux用户,用特定的用户名登入系统时,都默认在家目录下!

比如我用超级用户root登入时就默认在/root路径下:

比如我用普通用户登入时就默认在 /home/用户名路径下:

cd -:返回最近访问目录

根目录:文件世界的起点灯塔

------ 一切路径的起源与终点

我们不断的回退会发现我们最终都是在一个/的地方停止下来了,再也回退不了了!而我们都知道/是Linux下的路径分隔符,而这里的/也是路径分隔符吗?

直接说结论:这个地方 的 / 其实是Linux下的根目录!

我们又知道,所有操作系统的文件结构都是一课多叉树,Linux也不例外,并且Linux的文件结构是从根目录 / 开始的一个多叉树!

验证一下:

果然 ,/ 其实就是一个目录!

好了,明白了Linux下文件系统的基本结构,我们这里又有了相对路径绝对路径的概念了!

绝对路径:我们把从根目录开始指定一个文件或目录次称为绝对路径!

相对路径:我们把以非根目录为参照位置定位一个文件称为相对路径!

注意:绝对路径只有一条,而相对路径不一定只有一条,也可能有多条。而绝对路径在配置文件中使用的比较多,相对路径就在日常操作中用的多(简易),值得关注的是绝对路径和相对路径都具有唯一性。

touch:触碰时间的魔法刻痕

------ 在虚无中创造存在的痕迹

语法:touch [选项]... 文件...

功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。

创建一个普通文件(不能创建目录):

更改文档或目录的日期时间:

-a 或--time=atime或--time=access或--time=use只更改存取时间。

-c 或--no-create 不建立任何文档。

-d 使用指定的日期时间,而非现在的时间。

-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

-m 或--time=mtime或--time=modify 只更改变动时间。

-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

-t 使用指定的日期时间,而非现在的时间。

stat:窥探文件的时空档案

------ 解析字节背后的生命密码

stat就是state(状态)的意思:显示一个文件或目录的属性。

接下来介绍文件的访问(Access)、修改(Modify)、变更(Change),即所谓的 ACM:

在 Linux 系统中,文件属性往往与文件的访问、修改以及状态变更紧密相关。具体而言,access(访问时间)、modify(修改时间,在某些语境下可能与 change 混淆,但此处我们予以明确区分)、change(这里专指 inode 变更时间)分别对应文件不同的时间戳,各自表征了文件在不同方面的变化情况。

访问时间(Access Time,atime)

访问时间指的是文件数据最后一次被读取(访问)的时间点。诸如运用 cat、more、less 等命令查看文件内容,或者使用 grep 等命令在文件中搜索内容这类操作,都会更新该时间。不过,需要留意的是,众多文件系统(尤其是在挂载时采用了 noatime 或 relatime 选项的文件系统),出于减少磁盘写入操作以提升性能的考量,可能会对 atime 的更新进行优化处理,甚至忽略 atime 的更新。

修改时间(Modify Time,mtime)

修改时间是指文件内容最后一次被修改的时刻。这涵盖了对文件内容的任何写入操作,例如通过文本编辑器对文件进行编辑、向文件中追加数据等。mtime 直观反映了文件内容的变动情况。

变更时间(Change Time,ctime)

状态变更时间,又称 inode 变更时间,是指文件的状态(inode 信息)最后一次发生改变的时间。这不仅包含文件内容的修改(该操作同时也会更新 mtime),还涉及文件权限、所有者、链接数(即有多少文件名链接到该 inode)等方面的更改。简言之,任何致使文件 inode 信息发生变动的操作,都会促使 ctime 更新。所以,即便文件内容未作修改,但只要其权限、所有者等属性有所变化,ctime 也会随之更新 。

mkdir:搭建目录的积木工坊

------ 从零构建你的数字城堡

**语法:**mkdir [选项] dirname...

功能:当前目录下创建一个名为 "dirname"的目录

常用选项: -p(可以理解为path路径的意思), --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立 好那些尚不存在的目录,即一次可以建立多个目录;

tree:俯瞰文件森林的全景地图

------ 枝干与叶片的层次之美

在 Linux 系统环境中,tree命令是一款极为实用的工具,它能够以树状图形式递归地罗列目录内容。该命令可直观呈现目录结构,涵盖子目录与文件,以及它们之间的层级关联。

默认状态下,Linux 系统或许并未预装tree命令,不过可以借助所在 Linux 发行版的包管理器进行安装。举例而言,在基于 Debian(如 Ubuntu)的系统中,可运用apt - get命令执行安装操作,具体指令为:

bash 复制代码
apt install -y tree

在基于 RPM 的系统(如 Fedora、CentOS)上,在较旧系统中可使用yum,较新系统则可使用dnf进行安装,安装指令如下:

bash 复制代码
yum install -y tree

安装完成后,你就可以使用tree命令了。基本用法很简单:

bash 复制代码
tree

这会在当前目录下显示目录树。如果你想要查看其他目录的目录树,可以将该目录的路径作为参数传递给tree命令:

bash 复制代码
tree /path/to/directory

tree命令还提供了许多选项来自定义输出,比如:

  • -L level:限制目录树的深度为指定的级别。
  • -a:显示所有文件和目录,包括以.开头的隐藏文件。
  • -d:仅显示目录。
  • -f:在每个文件或目录前显示其完整路径。
  • -i:不以缩进的格式显示文件或目录列表。
  • -P pattern:仅显示匹配指定模式的文件或目录。
  • -I pattern:不显示匹配指定模式的文件或目录。

例如,要查看当前目录及其子目录(但不包括更深层次的目录)的目录树,可以使用:

tree -L 1

或者,需要查看所有文件(包括隐藏文件)的目录树,可以使用:

tree -a

tree命令是Linux系统管理和文件浏览中的一个强大工具,通过其提供的各种选项,你可以轻松地以图形化的方式查看和理解复杂的目录结构。

which:追踪命令的隐身斗篷

------ 揭开指令背后的真实身份

1. 基本功能剖析

which指令会在环境变量$PATH所涵盖的目录集合中,针对指定的命令展开搜索操作,并返回首个与之匹配的命令的完整路径。从本质上讲,这一过程就是在探寻可执行文件在系统中的具体存储位置。通过该指令,用户能够明确命令在系统内的准确位置,这不仅有助于命令的执行,还可用于判断系统中是否存在特定的命令。

2. 命令格式详解

which指令的基本命令格式为:which [选项] 命令。其中,[选项]部分是可选的,其作用是为搜索过程指定额外的条件或行为。常见的选项包括:

  • -a:该选项用于显示所有匹配的命令路径。当系统中存在多个同名命令,且分布在不同目录时,使用此选项可将所有相关路径一并列出。
  • -s:静默模式选项,启用后在执行过程中若出现错误信息,将不会在终端进行显示。
  • -V:用于显示which命令自身的版本信息,方便用户了解当前使用的which命令的具体版本。
  1. 使用示例展示

查找单个命令的路径

例如,若要查找ls命令的绝对路径,可在终端输入which ls。在多数 Linux 系统中,通常会返回/bin/ls作为输出结果。这表明系统在/bin目录下找到了ls命令对应的可执行文件。

查找多个命令的路径

借助-a选项,能够实现对多个命令的路径查找,并展示所有匹配的路径。例如,执行which -a gcc g++,该命令会同时查找gcc和g++命令,并将它们在$PATH环境变量所包含目录中的所有匹配路径逐一显示出来。这对于排查系统中不同版本编译器的安装位置等场景非常有用。

查找 which 命令本身

当在终端输入which which时,可能会出现显示两个which的情况。其中一个which是由于别名(alias)机制导致的。这一现象说明which命令在系统中可能被配置为通过别名来执行额外的操作,比如可能会添加一些默认选项等。

查找内建命令

需要特别注意的是,which命令默认仅在$PATH环境变量所指定的目录范围内进行搜索。如果待查找的命令属于 shell 的内建命令,例如cd命令,which指令将无法找到它。这是因为内建命令是由 shell 直接实现的,并不依赖于外部独立的可执行文件,因而不在which的搜索范畴之内。

  1. 注意事项
  • 由于which返回的是第一个匹配项的路径,因此在某些情况下,如果存在多个同名的命令可执行文件,which只会显示找到的第一个。
  1. 扩展用法
  • 在编写脚本或自动化任务时,which命令可以用于检查命令是否存在,或者获取命令的完整路径以便在脚本中使用。
  • 还可以结合其他命令和脚本,实现更复杂的搜索和路径处理功能。

综上所述,which指令是Linux系统中一个非常实用的工具,能够帮助用户快速找到命令的执行文件路径,方便执行和管理命令。

指令本质:终端语言的底层密语

------ 从字符到执行的魔法转化

通过which指令我们可以发现指令其实就是系统指定路径下的可执行文件,就相当于我们写的C/C++程序!

我们还可以在Linux上写个简单的C程序验证一下:

我们甚至还可以将我们的code.c文件拷到usr/bin目录下,然后和文件自带的指令一样不用指定绝对路径就可以执行我们的指令!

alias:为命令赋予灵魂的代号

------ 复杂咒语的简约化身

在Linux中,alias指令用于创建一个命令的别名,这样你就可以用一个简短的字符串来代替一个较长或复杂的命令。这对于提高命令行操作的效率非常有帮助,特别是当你需要频繁执行某个复杂命令时。

基本用法

  • 创建别名

    bash 复制代码
    	alias new_command='original_command'

    这里,new_command是你想要创建的别名,而original_command是原始命令。注意,等号=两边不要有空格。

  • 查看所有别名

    bash 复制代码
    alias
    
    alias -p

    这两个命令都会列出当前会话中定义的所有别名。

  • 删除别名

    bash 复制代码
    unalias new_command

    这里,new_command是你想要删除的别名。

别名设置示例

一、创建别名

(一)列出当前目录下所有文件和文件夹的别名

在 Linux 系统中,若希望创建一个别名用于列出当前目录下的所有文件和文件夹,可执行以下操作:

bash 复制代码
alias ll='ls -la'

如此设置后,在终端输入ll,即可执行ls -la命令,该命令会列出当前目录下的全部文件和文件夹,包括隐藏文件和文件夹。

(二)清除屏幕的别名

在大多数 Linux 发行版中,预装了clear命令,用于清除终端屏幕。但部分习惯 Windows 命令提示符的用户,更倾向于使用cls命令。为了在 Linux 终端中实现相同效果,可创建如下别名:

bash 复制代码
alias cls='clear'

二、删除别名

当不再需要某个已创建的别名时,例如不再需要ll别名,可使用以下命令将其删除:

bash 复制代码
unalias ll

三、持久化别名

默认情况下,通过alias命令创建的别名仅在当前 shell 会话中有效。若期望这些别名在每次登录时都能自动生效,则需将其添加到相应的 shell 配置文件中。对于 bash shell,该配置文件通常为~/.bashrc。

(一)编辑~/.bashrc文件

可使用以下两种常见的文本编辑器打开~/.bashrc文件:

  1. 使用nano编辑器:
bash 复制代码
nano ~/.bashrc
  1. 使用vim编辑器:
bash 复制代码
vim ~/.bashrc

(二)添加别名定义

在打开的~/.bashrc文件末尾,添加所需的别名定义,例如:

bash 复制代码
alias ll='ls -la'

alias cls='clear'

(三)使更改生效

保存并关闭~/.bashrc文件后,为使新添加的别名立即生效,可在当前 shell 会话中运行以下命令重新加载~/.bashrc文件:

  1. 使用source命令:
bash 复制代码
source ~/.bashrc
  1. 使用.命令(注意.与~/.bashrc之间有空格):
bash 复制代码
. ~/.bashrc

经过上述操作后,所创建的别名将在每次登录系统时自动可用。

完结散花:终端的灯火已为你点亮

------ 下一站,深潜指令海洋

相关推荐
小萌新~~~~12 分钟前
Linux常见操作命令以及编辑器VI命令
linux·运维·服务器
神秘的土鸡16 分钟前
Linux中WgCloud的服务器与客户端监控系统(完整部署教程)
linux·运维·nginx·adb·监控·自动化运维
laolitou_102424 分钟前
CentOS 7 中安装 Docker和Docker Compose
linux·docker·centos
Main. 2440 分钟前
Linux的进程观:简单性如何成就强大性(三)
linux·服务器
一直在路上的码农41 分钟前
ES时序数据库的性能优化
运维·elasticsearch·性能优化·时序数据库
执 白1 小时前
xenomai4的dovetail学习(5)——文件和网络
linux·网络·学习·xenomai4
迷茫运维路1 小时前
麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程
运维·虚拟机·kvm
小林熬夜学编程1 小时前
【MySQL】第十二弹---表连接详解:从内连接到外连接
linux·开发语言·数据库·mysql·算法
深度Linux2 小时前
深入理解Linux内存缓存:提升性能的关键
linux·内存·cache
紫菜(Nori)2 小时前
Jenkins-自动化部署-通知
运维·自动化·jenkins