Welcome to 9ilk's Code World

(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Linux网络编程

🏠 ls命令
语法 : ls -[选项] [目录或文件]
功能 : 对于目录,该命令列出该目录下的所有子目录与文件;对于文件,将列出文件名以及其他信息.
📌 常见选项
- -l选项 : 列出文件的详细信息

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

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

-l 与 -d选项的区别: -d选项是不进入目录,只是查看目录自己;而-l选项会默认打印目录里面的内容

注 : 命令中的选项是可以一次传递多个的,选项可以拼接在一起,顺序随意.(但并不是什么选项都可以随便组合,有的选项组合并无意义)。同时还要注意选项之间的空格可以一个或多个,建议一个空格相隔美观些。

- -n选项:用数字的UID,GID代替名称。

Linux系统中,每个用户的ID细分为两种,分别是用户ID(User ID,简称UID)和组ID(Group ID),这与文件有拥有者和所属组两种属性有关,我们后面涉及再详细赘述.
- -R选项:列出所有子目录下的所有文件。

- -t选项:以时间排序文件并呈现出来。

- -m选项:将显示所有文件和目录,以逗号分隔。

📌 补充知识
1.在Linux中,以.开头的文件,我们叫做隐藏文件(这个隐藏文件有各种类型)。
证明:我们可以手动创建一个以.开头的目录/文件,再使用ls -a选项查看,如果能查到说明就是隐藏文件。

对应的Windows系统中也有隐藏文件:

2. 文件 = 文件内容(本质是数据) + 文件属性(数据),对文件进行操作,无法就是对文件的内容和属性进行操作。(比如新建一个空文件,其实也是占据空间的,这个空间就是给文件名,类型,修改时间等文件属性的,他们本质也是数据)

注 : d开头的是目录,而-r开头表示普通文件类型(文本文件就是普通文件的一种)。
3.ls -选项 + 指定目录 ,不加就是默认当前目录下的内容.

🏠 pwd命令
语法 : pwd
功能 : 显示用户当前所在目录/当前工作路径
- Windows路径

- Linux路径

我们可以得到结论:
1. 在Windows系统中\作为路径分隔符,而在Linux系统中/作为路径分隔符。
2.一条路径 == 文件夹(目录) 和 路径分隔符相结合。得到一个路径就能找到指定文件,所以路径本质是用来定位一个文件的。
注:对于Linux系统中/root中的第一个/并不是路径分隔符,而是表示Linux中的根目录!
🏠 cd命令
Linux系统中,磁盘上的文件和目录被组成一颗目录树,每个节点都是目录/文件。

语法 : cd 目录名/路径
功能 : 改变当前工作目录,将当前工作目录改变到指定(路径)的目录下
📌 .和..

说明:.和..是两个特殊目录,其中.表示的是当前目录,而..表示的是上级目录。

我们通常使用cd ..来进行简单的路径回退,也就是回退到上一级目录。

证明.和..分别是当前目录和上级目录。
📌 根目录

我们可以发现/是d开头,说明路径开头的/并不是分隔符,而是代表根目录。
根目录/是目录,它也可以放普通文件,也可以放目录;/里面的目录也可以放普通文件和目录
---> 这也能推导出Linux的目录结构整体是一个多叉树结构。
📌 cd -和 cd ~
- cd -
cd - 作用是跳转至最近的上一次路径。

- cd ~跳转至家目录

家目录:
1. root用户首次登录所处的路径,叫做root的家目录。
2.普通用户首次登录所处的路径,叫做普通用户的家目录。
如下图:

🏠 tree命令
📌 tree命令使用和安装
- 使用
语法 : tree

- 安装
bash
yum install -y tree
📌 理解树形结构
1. 我们前面推测出Linux目录结构是一颗多叉树结构,而这个多叉树的叶子节点一定是空目录或者普通文件。
2.任何一个父节点,可能存在多个子节点(一个目录下包含多个子目录和文件);
任何一个子节点,一定只有一个父节点。(多个子目录/文件包含在同一级目录下)
3.我们从根目录开始定位一个文件,那为什么路径可以定位一个文件呢?原因是路径具有唯一性。
4.相对路径 vs 绝对路径
(1) 什么是当前路径?

图中的../test.cc就代表一个相对路径,我们可以看到相对路径是相对于当前路径的.
相对路径特殊符号有以下几种表示意义:
◆以"./"开头,代表当前目录和文件目录在同一个目录里,"./"也可以省略不写!
◆以"../"开头:向上走一级,代表目标文件在当前文件所在的上一级目录;
◆以"../../"开头:向上走两级,代表父级的父级目录,也就是上上级目录,再说明白点,就是上一级目录的上一级目录。
◆以"/"开头,代表根目录。
注意 : 类似下图的路径其实是绝对路径!因为并没相对于当前路径。

(2) 使用场景
a. 一般命令行操作的时候,比较喜欢用相对路径(当当前路径变化时,就不好找指定文件)。
b.绝对路径,在任何路径,都能找到指定的文件(配置文件中使用)。
5. Linux下,任何一个目录都有.和..,新建的空目录也是如此。

因此对于普通目录.相当于一个指针指向当前目录,..相当于一个指针指向上级目录(这也是为什么cd..能回到上级目录的原因);特别的,根目录的.和..都指向自己。

总结:
Linux目录结构是一个多叉树的树形结构,每个父节点对应多个子节点(一个目录对应多个子目录和文件),该多叉树的叶子节点一定是普通文件或空目录,由于父节点和子节点是一对多的关系,因此父节点和子节点的组合使得路径唯一,同时每个节点包含的.和..使得目录树实现线索化进行回退和进入。
🏠 touch命令
语法 : touch [选项]... [文件]...
功能 : touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个 不存在的文件。
- touch + 文件名,如果文件不存在则新建空白文件,否则修改该文件属性为当前时间。

- touch命令以空格为分隔符可以一次创建多个文件,已存在的文件修改时间,未存在的则新建空白文件。

- -t选项可以使用指定的日期时间,而非现在的时间。文件存在则修改时间属性,否则新建。

🏠 mkdir命令
语法 : mkdir [选项] dirname..。
功能 : 在当前目录下创建一个名为"dirname"的目录。
- mkdir默认在当前路径下创建新目录,当然也可以使用相对路径和绝对路径实现指定路径新建目录。

注 : 使用mkdir指令新建目录时不能新建同名已存在的目录。
- mkdir默认不能创建一串路径,需要层层创建。

- mkdir -p:-p选项支持创建一串路径。-p后面可以是一个路径名称,此时若路径中某些目录尚不存在,加上此选项后,系统将自动建立号那些尚不存在的目录,即一次创建多个目录。

- 删除空目录可以使用rmdir,但是rmdir删除不了普通文件和非空目录。

🏠 rm命令
语法 : rm [选项] [dirname/file]
功能 :删除文件或目录
- rm命令可以删除普通文件

- rm -r递归式删除非空目录

- rm -rf 递归并强制删除非空目录

注意 :不能rm -rf /这样干,这样会尽可能从根目录开始把树的所有目录删除掉。
📌 通配符
Linux中*为通配符,表示任意内容。

📌 nano
nano是Linux中的一个笔记本,编辑完之后ctrl + x再回车就退出了。
bash
yum install -y nano //安装nano

🏠 man命令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man。
语法 : man [选项] 命令

- man手册分为八章

1 : 是普通的命令。
2 : 是系统的调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加说明头文件)。
3 : 是库函数,如printf,fread是特殊文件,也就是/dev下的各种设备文件。
5 : 是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义。
6 : 是给游戏留的,由各个游戏自己定义。
7 : 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 : 是系统管理用的命令,这些命令只能由root使用,如fconfig。
- man默认查的是一号手册,从一号开始,查到就停止,在linux中printf也是一条指令。

- man手册安装
bash
yum install -y man pages
- -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
🏠 cp命令
语法 :cp [选项] 源文件或目录 目标文件或目录。(也可结合相对和绝对路径使用)
功能 :复制文件或目录。
说明:cp指令用于复制文件或目录,如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已经存在的目录,则会出现错误信息。

- 拷贝文件会将目标文件原有内容覆盖

- 拷贝非空目录到空目录 需要使用**-r** 选项进行递归式拷贝。

注 : 首次递归式拷贝完之后再次进行同样的拷贝,此时强制覆盖可以使用cp -rf,但是root用户不允许强制覆盖会有询问,普通用户可以。

🏠 mv命令
mv是move的缩写,可以用来移动文件或者将文件改名(move(rename)files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法 :mv [选项] 源文件或目录 目标文件或目录。
- 当mv命令第二个参数是文件时,mv命令会完成文件重命名,此时源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。

- 当第二个参数是已存在的目录名称(路径)时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中,相当于实现了"剪切"操作。

- 结合前两点,可以实现对目录/文件剪切和重命名。

🏠 cat命令
语法 : cat [选项] [文件]
功能 : 查看目标文件的内容。
📌 常用选项
- - n : 对输出的所有行编号。(对空行也编号)

- - s : 不输出多行空行,也就是会合并连续空行。

- - b : 只对非空输出行进行编号。

注 : cat的命令之间也可以进行组合。

📌 补充知识
- cat是实现正序打印,若要实现逆序打印,我们可以使用tac,但要注意它是针对行的逆序而不是每一行内容都逆序。

- cat后不带指令和目标文件,默认是从标准输入(键盘)读取,然后把内容显示到显示器上,要退出这个模式可以ctrl c或ctrl d。

本篇博客我们认识了Linux的一些基本指令,下篇博客我们继续了解一些常用指令和一些涉及的知识。