【Linux】保姆级认识常见指令(一)

文件与目录管理

1. 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 一行只输出一个文件。

示例:

这里列出了我当前目录下的所有子目录与文件。可以将目录理解为文件夹。

加上 -a 选项后,将以 开头的隐藏文件也列出来了,在Linux中,以 开头的文件是隐藏文件。同样的,在windows系统中也存在隐藏文件,可以在文件资源管理器中通过勾选“隐藏的项目”查看。

这里我创建了一个名字为 .test.txt 的普通文件(touch指令在后面会介绍),然后用ls指令时并没有看到这个隐藏文件,接着使用 -a 选项后就能看到了。同理也可以创建一个隐藏的目录。


使用 -d 选项可以只查看这个目录而不查看这个目录下的其他文件,通常搭配 -l 选项用来查看该目录的详细信息。 


使用 -l 选项则可以查看文件的详细信息。我们可以将文件看作是文件属性文件内容的组合,它们都是二进制数据,都需要被存储。文件属性提供了关于文件的描述性信息和管理属性,而文件内容是实际的数据。这两者共同构成了一个完整的文件。我们对文件的任何操作,本质上都是对文件属性或者文件内容的操作

文件属性: 文件属性包括文件的元数据,如文件名、大小、创建时间、修改时间、所有者、权限等。这些信息用于描述文件的基本特征和管理文件的访问和操作。这里使用 -l 选项查看到的详细信息就是文件的属性。

文件内容: 文件内容是实际存储在文件中的数据。文件内容是通过读取文件的方式访问的,而文件属性则用于描述和管理文件本身的元信息。

这些选项可以搭配起来使用,如 -l 和 -a 搭配使用,ls -l -a 可以查看隐藏文件的详细信息,还可以连起来搭配,例如:ls -la,ls -al ,顺序的改变不会有任何影响。还可以使用 ll ,这相当于 ls - l   


2. pwd 指令 

语法:pwd
功能:显示用户
当前所在的工作目录

示例:

这里可以看到当前所在的目录是 /root,这其实就是一个路径。" / "是Linux的路径分隔符,而" \ "是windows的路径分隔符。两个路径分隔符之间,一定是一个目录,在路径的最末端,一定是一个文件或者目录。


这个就是windows系统的路径 。

那么为什么要有路径呢,因为我们在访问任何文件之前,我们都必须先找到这个文件,路径就可以在系统层面标识一个特定的文件,有了路径我们就可以顺藤摸瓜,最后找到我们想要访问的文件


3. cd 指令

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

在Linux系统中,磁盘上的文件和目录被组成一棵目录树(多叉树),每个节点都是目录或文件。其中,任何一个叶子节点都是空目录或者普通文件,而非叶子节点都是目录。因此对文件的查找,其实就是在一棵多叉树中进行节点的查找,路径本质上就是这棵多叉树的搜索路径。

一个目录里面可以有普通的文件,也可以有它的子目录。这里我们可以看到任何一个文件它都只有一个父目录!因此路径具有唯一性。并且同一个目录下,不允许存在同名目录或文件

 示例:

这里通过 ls 指令看到我们当前 /root 路径下的子目录以及文件,然后通过 cd  进入名字为a的子目录中,我们再通过 pwd 指令来查看当前的路径,变成了 /root/a,说明我们已经进入a目录了。这里我们是通过相对路径的方式来进入a目录的。

相对路径和绝对路径是用于指定文件或目录位置的两种不同方式。它们的主要区别在于参照的起点不同。

绝对路径:
1.绝对路径是从文件系统的
根目录开始指定文件或目录的路径。
2.在Unix/Linux系统中,绝对路径
以斜杠开头,如 /home/user/documents/file.txt。
3.在Windows系统中,绝对路径可能
以盘符开头,如 C:\Users\User\Documents\File.txt。

相对路径:
1.相对路径是指
相对于当前工作目录的路径
2.相对路径不包括根目录信息,而是
从当前位置开始计算
3.可以通过 . 或者 .. 进行路径访问。

任何目录下,都会默认具有两个隐藏目录:...
用来表示当前路径,而 .. 用来表示上级路径


这里我们通过 .. 回退到了上一级路径中。

这里 ./a 等价于 /root/a ,因为 . 就是表示当前路径,当前路径在上面的 pwd 指令中已经看到了是 /root 。这是以相对路径来访问。

这里就是用绝对路径来访问了,无论你当前处在哪一个工作目录,都能通过绝对路径来成功访问。


相对路径和绝对路径还可以通过与其他指令相配合来玩出花样,这里我们以前面介绍过的 ls 指令来举例:

这里通过绝对路径来查看该目录下的子目录以及文件。

这里则通过相对路径来查看。这里的 ../root 等价于 /root ,因为当前路径是 /root ,上一级路径则是 / 。


cd 指令还可以搭配一些选项:

cd - :跳转到我们最近一次所处的路径下。
当我们需要频繁用到两个路径时,可以方便的进行切换。


cd ~ :进入用户家目录
任何一个用户,首次登录时所处的路径都是自己的家目录。对于root账号,默认的家目录是/root ,这是超级管理员账号。而对于普通用户,默认家目录是 /home/xxx ,这里的xxx是用户名。

这是windows系统的家目录。


4. whoami 指令

语法:whoami
功能:显示
当前登录用户的用户名,可以快速了解当前会话中是哪个用户在操作系统中活动。

示例:

还可以用另一个 who 指令查看当前有哪些用户登录了这一台机器。后面跟着的是登录的时间。


5. which 指令

语法:which [指令]
功能:用于查找给定
指令在系统路径中的位置

示例:

这里查找到了这三个指令在系统路径的位置。我们可以发现这些指令都是存在于 /usr/bin 这样一个路径下的,我们试着用绝对路径来访问一下它们。

这里可以发现访问得到的效果和我们直接输入指令是一样的。

在 UNIX/Linux 系统中,/usr/bin 通常用于存放可执行文件(二进制文件)。因此我们需要重新认识一下指令了,指令的本质都是程序,如果你试着用 vim 来访问一下这里面的文件,你会发现全是乱码的,因为它们是二进制文件,大部分是用C/C++编写的,但也有少部分是用脚本语言编写的。下面来创建一个我们自己的指令。

这里写了一个简单的程序,用 gcc 编译过就生成可执行文件了,试着来运行一下他。

注意这里要加上 ./ 才能运行起来。

然后将这个可执行程序改个名字,接着把它剪切到了 /usr/bin 目录下(mv指令后面会讲),然后再 which 一下它,果然已经在这个目录下了。 

之后只需要在命令行输入这个可执行程序的名字就能运行了,它就变成了我们自己创建的一个指令,所以说指令本质上就是可执行程序,我们所学的指令都是 /usr/bin 目录下的可执行程序。我们一开始把可执行程序 a.out 剪切到 /usr/bin 目录下的操作就叫安装,安装的本质就是把可执行程序拷贝或者剪切到系统能识别的路径下。要卸载这里的某个指令,只需要卸载 /usr/bin 目录下对应的可执行程序(或者叫可执行文件,它们都是一回事)就可以。


 当我们查看 ls 指令的路径时,有一个 alias ,这个也是一个Linux命令,用来给其他命令起别名

这里我们给 ls 指令起了个别名叫 lisi ,这样我们就可以用 list 来执行 ls 指令了。当我们关闭 xshell 时,这个别名就会被清理,不用担心后续不想使用的问题,如果想让这个别名一直生效,就需要更改配置文件,目前暂不介绍。 

这里之所以我们的 ll 指令相当于 ls -l ,也是 alias 的功劳。

这里我们通过访问 ls 的路径来查看当前目录下的子目录与文件,我们发现它与直接使用 ls 指令有些不同,它不带颜色,这是为什么呢,我们来which一下 ls 指令就知道了。

这里我们看到 ls 指令其实是 ls --color=auto 这一串指令的别名,也就是说带上后面这一串我们也能让子目录和文件带上颜色了。我们来试一下。


6. mkdir 指令

语法:mkdir [选项] dirname...
功能:
当前目录下创建一个名为 “dirname”的空目录(名字可以自己取)。
常用选项:
-p ,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即
一次性创建该路径下的多个目录

示例:

这样就创建出了一个名为 “dir” 的空目录。

通过 -p 选项我们一次性创建了该路径下的多个目录。我们可以通过 tree 命令来查看是否创建成功,这是一个用于在命令行中以树状结构显示目录和文件的实用程序。它对于查看文件和目录结构,以及生成目录树状结构的视图非常有用。


系统在执行某个指令的时候,都会先在指定的搜索路径中去寻找这个指令,因此如果这个指令没安装的话,是执行不了的,我们可以通过这行命令来安装:yum install -y tree(需要是root用户哦)

这里可以看到我们确实通过给定的路径创建了一系列的目录。

既然 tree 指令可以以树状形式显示目录结构,那我们不妨来 tree 一下根目录如何:tree /

我们发现它在疯狂打印,因为根目录的内容还是很多的,如果我们什么都不做让它打印到结束估计要一会,这时候我们可以 Ctrl + C 键来让它终止。当我们平常遇到指令失控的情况,我们都可以通过这样的方式来终止异常的命令

还可以在当前目录下一次性创建多个空目录。如果要创建时已经存在同名的目录或文件,则创建不成功。因为在同一级目录下,不能存在同名的目录或文件,否则其绝对路径不唯一。


7. touch 指令

语法:touch [选项]... 文件...
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者
新建一个不存在的文件
常用选项:
-a   或 --time=atime或 --time=access或 --time=use只更改存取时间。
-c   或 --no-create 不建立任何文档。
-d   使用指定的日期时间,而非现在的时间。
-f    此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m  或 --time=mtime或 --time=modify 只更改变动时间。
-r   把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t   使用指定的日期时间,而非现在的时间。

示例:

这里使用 touch 指令成功创建了一个名为“test.c”的普通文件。注意:-r 开头的这些文件是普通文件,而以 d 开头的这些则是目录。当试图用该指令创建一个存在同名的文件时,不会进行覆盖,只是将已存在的这个目录或文件的时间进行更新。

 同样可以一次性在当前目录下创建多个普通文件


8. rmdir 指令

rmdir 是一个与 mkdir 相对应的命令。mkdir 是创建空目录,而 rmdir 则是删除空目录

语法:rmdir [-p] [dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:
删除空目录
常用选项:
-p 当子目录被删除后
如果父目录也变成空目录的话,就连带父目录一起删除

示例:

这里我们的 dir 是一个空目录,因此可以直接删除。

而这个 123 目录不是空目录,因此删除不了,它也提示说目录非空。

注意:rmdir 是不能删除普通文件的哦


9. rm 指令

语法:rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:
删除文件或目录
常用选项:
-f 即使文件属性为只读(即写保护),也直接删除
-i 删除前逐一询问确认

-r 删除目录及其下属所有文件和子目录(递归删除)

示例:

用来删除普通文件的时候,直接 rm 即可。而如果要删除目录(不管是不是空目录)就要带上 -r 选项了。要删除的文件或目录参数可以是多个。事实上大部分指令后面跟的操作对象都可以是多个系统会一个一个执行。如 ls 多个目录时,会先后显示出这两个目录下的子目录和文件。这里就不举例了,感兴趣的可以上手敲一下。

从删除 123 这个目录的过程可见它是递归式删除的,它问我们是否要删除该目录下的 test.txt文件,我们输入 y 后,它又问我们是否删除 123 这个目录,我们再次输入 y,然后才能删掉。如果我们不想让它询问是否删除的话,可以使用 -f 选项,这样会直接删除而不询问(删库跑路警告)。当然这是因为我们当前是 root 用户,一般情况下 root 用户创建的文件都是比较重要的,所以会询问是否删除,而如果我们是普通用户,则不会询问我们是否要删除。

这时我们只需要加上 -i 选项,就会在删除之前进行逐一询问。 

注意:使用 rm -r 命令要非常小心,因为它会删除指定目录及其下属所有内容,且操作不可逆。确保你确实想要删除这些文件和目录,以免造成数据丢失。一旦有不确定的目录或文件时,宁可备份,不可删除。

这里的 ' * ' 表示一个通配符,它可以匹配任意文件名,当我们想删除所有后缀为 .c 的文件时,就可以用这个指令:rm -rf *.c 。也可以直接 rm -rf * 删除该目录下的所有子目录以及文件。值得注意的是,使用通配符时默认不会删除隐藏文件,因此要删除隐藏文件时必须指定其文件名


10. cp 指令

语法:cp [选项] 源文件或目录 目标文件或目录
功能:
复制文件或目录
说明:cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r
递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

示例:

这样就成功把 test.txt 这个普通文件拷贝到 111 目录下了,如果该目录下已经存在同名文件,则无法进行拷贝,不能存在同名文件或者目录

还可以和绝对路径搭配着来玩,这个是拷贝 /root/ 路径下的 test.txt 到 /root/111 路径下。相对路径绝对路径随意搭配都是可以的,可以自己上手敲一下。


我们还可以顺便进行重命名,这里我就把它命名为了 data.txt 。这里只是对 111 目录下这个拷贝文件重命名哦,原本文件的名字是没变的。

这里我们当前路径下并没有 112 这个目录,它则直接拷贝了源文件并重命名为了 112,这里可以理解为把 text.txt 拷贝到当前目录下并且重命名为 112。这里 112 是普通文件哦。其实就是相当于下面这个操作。

这里的 .就表示当前路径,./112 就是拷贝到当前路径并且重命名为 112。




当我们要拷贝的是一个目录(不管是不是空的),都必须带上 -r 选项,这时候进行递归式拷贝,同样可以对拷贝的目录进行重命名。

由于已经存在同名目录,所以这里是将 dir 目录 拷贝到 dir 目录里面。确保所给的路径是存在的,如果已给路径存在两个及以上的目录,并且其中最后一级目录之上有不存在的目录则无法拷贝,当只有最后一个目录不存在时,会在其上级目录下拷贝,并且名字为这个不存在的目录。 

当我们只想把 dir 目录下的所有文件拷贝到 test 中,不想生成 dir 这个文件时,就可以在 dir 后面带上 / ,然后跟想要拷贝的文件名字,这里我用了通配符 * ,这样就可以拷贝所有文件。值得注意的是,拷贝目录时默认不会拷贝隐藏文件。 


11. mv 指令

mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。

语法:mv [选项] 源文件或目录 目标文件或目录
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件
重命名或将其移至一个新的目录中
2. 当
第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名
3. 当
第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令各参数指定的源文件均移至目标目录中
常用选项:
-f :force 强制的意思,
如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

示例:

这里就将 test.txt 重命名为了 test.c 

对一个目录也是可以重命名的。这里要确保当前路径下没有 111.dir 这个目录哦,不然会变成把 111 目录移动到 111.dir 这个目录下的。


移动(剪切)多个文件到 111.dir 目录中。
注意:移动过后改变了源文件或目录的路径,即原本的路径下已经不存在这个源文件或目录了。

这里我们不但把目录 c 移动到了目录 111.dir 中,还对它进行了重命名



这里先通过绝对路径找到目录 b ,再将它移动到相对路径下,.. 就是上一级路径嘛,我们目前所处的路径是:/root ,那上一级路径就是根目录:/ 

 使用通配符将一个目录中的所有内容剪切到另一个目录下。

总结一下,对于普通文件,如果目标空间是存在的目录,则将其剪切到该目录下,如果目标空间不存在,则将该普通文件剪切到目标空间的上级目录下并重命名。对于目录,如果目标空间是存在的目录,则剪切到该目录下,如果不存在,同样剪切到目标的上级目录下并重命名。不管是目录还是文件,当存在同名时,都会询问是否要覆盖,带上 -f 选项则不会询问而直接覆盖。

  • 54
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值