本篇博客使用的是 Xshell 登录的云服务器。
Xshell 使用 Alt + Enter 的快捷键就可以自动全屏和 取消全屏。
Linux 基础语法
空文件也是需要存储空间的,假设我们创建一个空的 txt 文本文档,虽然我们看着文件大小是 0kb 但是 文件当中时候文件属性的:
如这个文件,他有文件名,文件创建的时间,等等这些都是文件的属性,这些都是数据,都是需要在磁盘上开辟空间存储的。所以我们理解文件应该这样理解:
文件 = 文件内容 + 文件属性
所以,我们对文件的操作,就应该是如下的:
文件操作 = 对文件内容的操作 or 对文件属性的操作
ls
显示当前目录下的所有文件(不包括隐藏文件),当我们使用 ls 之后,屏幕上就会显示用空格分割 的 文件名:
如上图中蓝色的就是 目录。
基础语法:
ls [选项] [目录或文件]
常用选项
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
- -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
- -r 对目录反向排序。
- -t 以时间排序。
- -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
- -R 列出所有子目录下的文件。(递归)
- -1 一行只输出一个文件。
-l
我们上述直接使用 ls 只是查看 文件名这一个文件属性,而 加了 -l 这个选项就可查看更多的文件属性:
如上图,此时目录中有两个文件夹,一个TXT文件,像最后的两个属性就是,在 20:00 创建的文件,dir1 ,dir2 和test.txt 是文件名。
ls - l 命令可以简写为 ll
两个指令实现的效果是一样的。
-a
显示所有的文件(包括隐藏文件)。
选项是可以一行写多个选项的:
当然,上述使用一种方式, ls -a -l 这个命令还可以这样写 ls -la 和 ls -al
如上所示,有 a 这个选项的命令,在实行之后,会有两点 这样的文件:
那么这两个文件代表上面意思呢?在Linux当中,以 " . " 开头的文件,我们称为隐藏文件; " . " 开头的文件夹,就是隐藏文件夹。
什么事隐藏文件呢?我们来看下面这个例子:
首先,我们用 ls 和 ls -l 来查看当前目录下,是没有 " . " 开头的文件的,那么现在,我们来创建两个 以 " . " 开头的文件:
创建之后,我们用 ls 和 ls -l 查看,发现没有这两个文件:
然后,我们用 ls -a 来查看:
此时,就看见我创建了的两个隐藏文件了。
在Windows 当中也是有隐藏文件的。
而前面在创建两个隐藏文件的之前,就有两个隐藏文件了,分别是( . / .. ) 这两个文件夹,在Linux的任何目录下都有这两个隐藏文件。
这两个文件的作用我们将在下面细说。
-d
将目录像文件一样显示,而不是直接显示这个目录当中的文件信息。
如果我们直接使用 ls 或者 ls -l 来查看一个目录的话,那么就会像下面一样,直接显示这个目录当中的 文件信息:
那么,如果现在我们想要查看这个 108_class 这个文件的信息的话,就可以使用 -d 这个选项:
如上图,我们使用 -l 和 -d 的选项,就可以只查看 这个文件夹的属性了。
-F
在每个文件后面都 加一个字符,用来表示这个 文件的类型, " * " 表示可执行的普通文件; " / " 表示这个文件是一个目录; " @ " 表示符号链接 等等。
pwd
显示当前命令行所处的目录在哪里;
如上图,因为我们现在使用的 是 云服务器的 root 用户来进行登录,所以显示的root ,如果我们用 普通用户的登录方式,那么就是 :
home/XXX
XXX是你登录的用户名。
那么上述都是使用的是 云服务器的 登录,pwd 命令时帮助我们 查看当前命令所在的目录,比如我们在windows 下的图形化界面:
我们可以复制这的绝对路劲,然后下一次可以直接 复制 这个路径来找到这个目录下的文件。
mkdir
mkdir 文件名 文件名 ········
使用这样的方式,可以一个或者多个文件夹,但是一般建议只创建一个。
注意,上述的 mkdir 和文件夹之间,文件夹和文件夹之间要有空格来分割,不然会报错:
我们可以创建一串路径,比如 ../d1/d2/d3 这样的路径,都可以一次性创建:
使用 mkdir -p d1/d2/d3 这样的方式去创建就可以创建出 d1/d2/d3 这样的目录串,当然 d1 的上级是 使用 mkdir 这个命令行的路径。
tree
使用 tree + 目录 以树的形式打印出这个目录之后的 目录路径:
但是tree 不是默认就有的,他是需要安装的,我们在命令行中输入:
yum install -y tree
这行命令来安装这个tree。在装这个tree 的时候,需要 root 账号。
Linux当中的 ( . / .. ) 这两个隐藏文件的 作用
.. :表示当前路径的上级路径
如下图:
. : 表示当前路径
如下图:
当然,这只是其中一个用途,我们还可以这样使用这个 文件:
我们 用 gcc 生成了 一个 .c 文件的 a.out 的执行文件,上图中的 ./ 就是代表的是当前路径,而 ./a.out 就是执行当前路径下的 a.out 这个执行文件。
那么 . 存在的意义就是,帮助用户定位当前目录下的一个文件。
/ 根目录
在 Linux 当中,使用 " / " 斜杠 来分割目录:
在 windows 中使用都是 " \ " 反斜杠来 分割 目录:
而在 Linux 当中 " / " 还代表的 Linux 的根目录,如果我们一直 cd .. 这样,返回上一级路径,最终都会返回到这个根目录 :
我们还可以查看这个根目录的属性:
当然这个根目录也是可以操作的,
Linux当中目录结构是一种 多叉树的结构,这个多叉树的叶子结点,一定是 空目录或者是非目录文件,而路上的结点一定是一个非空目录。
如下图例子:
也就是为什么,一直回退,回退到根目录就不能会提了。
这种结构,使得任何一个结点都只有一个父节点,这就使得这个路径具有唯一性,而上图中,我们要找一个文件,通常是通过路径来进行定位。这种路径,称为绝对路径。
绝对路径:我们把从根目录开始,定位到指定位置,具有唯一性的路径,称为绝对路径。
由此,我们就可以用 cd + 绝对路径来一下子进入到我们想进入的目录下:
比如现在,我在bin 目录下 想要寻找 lib 目录下的 C++.txt 文件,那么我可以 用 .. 来访问上级路径,然后再去访问 lib 目录从而访问到 C++.txt 这个文件:
// 现在处在 bin 目录下
../lib/C++.txt
这样就可以从 bin 目录当中访问到 lib 目录当中的 C++.txt 文件。
这样的方式就叫做相对路径访问。
以命令所处目录的位置作为参照路径,来访问其他特定文件的方式,这种路径 就叫做 相对路径。
因为是以当前位置为参照点的,如果我们命名的位置发生了改变,比如上述例子,我们不在 bin 目录下了,那么我们在其他路径再去使用这个相对路径,相对路径可能就失效了。
相对路径和绝对路径的使用
绝对路径往往比较长,但是指向的位置是不会改变的,一般是在固定的场景来进行使用,比如在配置文件中使用。
一般在使用 命令行的时候,比价常用相对路径。
比如我们在访问网页的时候,其中的 " / " 就是路径分隔符。bilibili 网站上的分割 使用的是 Linux 风格的 分隔符,就证明bilibili 网页的后端用的就是 Linux的操作系统了。
Linux当中的普通用户和 超级管理员root
在Linux 当中,用户分为两类,一个是 超级管理员root,一个是其他(普通用户),root用户的家目录是 /root ; 而普通用户的家目录是 /home/xxxx (xxx 是用户名)。
我们使用 whoami 这个命令就可以 查看 当前我们登录是哪一个用户:
我们也可以 ls /home 查看home目录,查看当前我们的 系统中有多少用户。
当我们是 root 超级管理员 的时候,可以使用 adduser + 用户名 来创建一个用户,在新建一个用户的时候,会自动的 在 home 家目录下 创建对应的目录。
使用 userdel + 用户名 就可以删除一个用户。
如果你愿意,在windows下你也可以 创建多个用户,多个桌面 ········;在 windows 也是有 root 超级管理员的。
cd
cd xxxxx/
进入某个目录。
cd 命令行的语法:
cd + 目录名
cd .. : 返回上级目录
这个我们之前就运用过很多次了,这里就不多做细说。
cd /home/litao/linux/ : 绝对路径
使用这种方式就可以从任何目录下直接访问到 对应的 文件或文件夹。
cd ../day02/ : 相对路径
这种方法是有参照的,如果参照目录变了,相对路径可能就会失效:
- 比如这个图中的,dev 目录访问到 etc 目录,这个相对路径,如果把 dev 的参照换成 是 home 那么这个相对路径依然生效;
- 如果是 lib 访问到 ust/bin 这个目录中,这个相对路径,那么 参照从 lib 换成是 bit ,那么这个相对路径就失效了。
cd ~:进入用户家目
我们直接使用 cd ~ 就可以直接进入到,当前登录用户的家目录下,比如我是 root 用户,那么我直接放回到 /root 目录下; 如果我是 zhangsan 这个普通用户,那么我就返回到 /home/zhangsan 这个目录下。
cd -:返回最近访问目录
也就是回到,我们上一次所在的路径下。
如果这个例子:
touch指令
语法:
touch[选项]... 文件名 ...
创建一个当前不存在的普通文件,不能创建目录
或者是 使用 touch的命令参数 更改文档或目录
的时期时间,包括存取时间和更改时间。
参数列表:
- -a 或--time=atime或--time=access或--time=use只更改存取时间。
- -c 或--no-create 不建立任何文档。
- -d 使用指定的日期时间,而非现在的时间。
- -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或--time=mtime或--time=modify 只更改变动时间。
- -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t 使用指定的日期时间,而非现在的时间。
rmdir 和 rm
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令:
语法:
rmdir [-p][dirName]
这样可以直接删除目录。
需要注意的是:如果删除的目录不是空目录,也就是说,删除的目录当中有 文件或文件名,那么都是不能删除的:
rm命令可以同时删除文件或目录
当我们使用 rm 删除文件的时候,如果你是 root 用户,可能会提醒你 是否要将该文件删除:
我们在 后输入 y 表示 yes 删除,n 表示no 不删除。
那么我们也可以直接略过这个提示,之间删除文件:
rm -f xxx.xxx
注意:在Linux当中删除的文件就是真正的删除了,不会有像在 windows 当中的 回收站一样保存删除文件。
rm 也可以删目录,那么上述的不是空目录他也能删除:
rm -r xxx
因为目录本身是递归式定义的,所以删除时候也要递归式删除,rm -r 就表示递归:
非空目录:
从它询问我们是否要删除的情况,可以看出它在做递归,一层一层的进去,问我们是否要删除。
如果这个目录太深了,有几百层,那么一层一层的问就太挫了,我们可以加 -f 这个选项来跳过询问。
rm -rf xxx
再删除的时候一定要慎重,上面我们也说过了Linux当中文件删除之后就真的是删除了,假设我们这样写:
rm -rf /
我们说 " / " 是Linux 的根目录,其底层的操作系统的文件都在这个目录下,如果把这个这个目录删了,那么所有的操作系统的文件都被删除了。当然,有的文件不会被删除,正在运行的文件不会被删除。
-i
删除前逐一询问确认,当我们使用 rm 删除的文件的时候,如果我们是 root 用户,他会提醒我们再次向我们确认,这个文件是否进行删除,但是如果当前是 普通用户 ,那么Linux就不会再次向我们确认是否删除,因为 在Linux当中认为,普通用户的文件没有 root 超级管理员的文件重要。
所以当我们是普通用户,在使用 rm 删除文件的时候,使用 -i 这个选项,就可以让 Linux 再向我们确认一下这个文件是否删除。