Linux学习笔记之文件管理和目录管理类命令

时间:2022-02-18 22:14:40

    在开始理解Linux文件管理和目录类命令之前,有必要先说一下,关于操作系统在计算机中都做了哪些工作。

0、操作系统的工作

    1、文件管理,增删改查

    2、目录管理

    3、进程管理

    4、软件安装

    5、运行程序

    6、网络管理

    7、设备管理


    本次笔记介绍的是文件管理和目录管理类命令。说起文件和目录,不禁让人思考到一个问题:

问题1:文件是目录吗?

归纳1:首先我们知道:

           目录:是存放文件的路径。即是根文件系统rootfs上的非叶子节点。

           文件:是根文件系统上的叶子节点。

           根据Linux操作系统的“一切皆文件的思想”,就暗示着我们:目录就是文件。

            

问题2:所以,在同一个目录下,文件和目录是不能同名的。

       那么,在不同目录下,文件和目录可以同名吗?

       为什么在windows下,文件和文件夹(目录)可以同名吗?

归纳2:


1、文件类命令

1.1、创建文件:

方法一:使用#touch命令创建文件

#touch(用于change file timestamp,改变文件时间戳)

问题3:touch命令不是用于改变文件时间戳的命令吗?为什么可以用来创建文件?

归纳3:

首先,我们必须了解什么是时间戳?

       时间戳=访问时间+修改时间+改变时间;

            访问时间=最近一次访问文件的时间

            修改时间=最近一次修改文件内容的时间

            改变时间=最近一次修改文件属性的时间

所以当我们尝试着去touch一个不存在的文件,即我们尝试着去修改一个不存在文件的时间戳时,系统就会新创建一个空文件,并以当前的创建时间来修改文件的访问时间和修改时间。


问题4:为什么只能修改文件的访问时间和修改时间,而不能修改文件的改变时间?

归纳4:道理很简单,当我们知道了时间戳同样也是文件的属性信息时,这就难不倒我们了。

       当访问时间和修改时间都变化了,改变时间还有理由不变吗?!

       也就是说,我们通过修改"访问时间"和"修改时间",间接的去修改了“改变时间”。

       那么,修改访问时间这个功能还有必要存在吗?!

       这也符合Linux一贯的原则"能简单的,就一定不复杂"!

              

方法二:使用文本编辑器创建文件

问题5:什么是文本编辑器?Word是文本编辑器吗?

答:Word不是文本编辑器,Linux下的文本编辑器nano:该编辑器中,~表示ctrl,-表示空格

问题6:什么是文本?

答:ASCII

问题7:什么是ASCII?

答:想想如何用二进制数去表示128个字符?需要几个二进制位?那么可以理解ASCII其实就是将一些不同的字符与二进制位建立固定的关联关系

问题8:什么是UNICODE:

答:如0000 1001 0000 1001:上,标准:GB18030,GB2312,Unicode,GBK


问题9:汉字是如何在显示器上,显示的?字体?



1、2 文件的删除:

# rm = rm -i   #\rm = rm

即当我们想要使用一个命令的本身,而不是它的别名命令时,可以再命令前面加\

-i 交互式

-f 强制性

-r 删除一个目录时,递归删除这个目录下的所有文件

自杀型操作:rm -rf /(通常是不小心造成的


1.3、复制文件:cp命令 (复制档案或目录)

1、# cp [-adfilprsu] 来源档(source) 目的档(destination)

2、# cp [options] source1 source2 source3 .... directory


参数:

        -a(archive):相当于 -pdr 的意思;不改变源的所有属性,用于归档复制,常用于备份;= --backup

        -d(no-dereference):若来源文件为链接文件的属性(link file),则复制连结文件属性而非档案本身;即如果源是链接,则复制链接

        -f(force):为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;

        -i(interactive):若目的�n(destination)已经存在时,在覆盖时会先询问是否真的动作!

        -l(link)(link files instead of copying) :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;即如果源是链接,则复制链接所指向的文件;

        -P(no-dereference) :保持链接:如果源是链接,则复制链接

        -p (不改变源的属主和属组):连同档案的属性一起复制过去,而非使用预设属性;

        什么是预设属性:本来谁复制的,文件的属主和属组就是谁;

        -r(recursive):递归持续复制,用于目录的复制行为;

        -s(symbolic) :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;

        -u(update)   :若 destination 比 source 旧才更新 destination ;或者是destination file is missing


问题

    问题1:能不能把一个文件复制成另一个文件,一个文件复制成多个文件,多个文件复制成一个文件。即Src:Dest = 1:1,1:n,n:1,n:n

    归纳1:目标destination只有一个,可以是文件也可以是目录。因此只存在Src:Dest=1:1和n:1这两种情况但多个源的情况下(即Src:Dest=n:1时),目标(Dest)只能是目录,否则报错。


    问题2:什么是符号链接?

        答:相当于一个快捷方式,本身不存在,只是指向另一个文件的路径。

    如果源是链接,复制的不是链接而是链接指向的那个文件


    问题3:cp命令,默认不能复制目录;那么如何实现复制目录

 答:# cp -r(recursive递归):

                     递归持续复制,用于目录的复制行为;

     

             # cp -r /etc/init.d /tmp/passwd (目录到文件?)该命令能否执行?

             指令解读:Src为目录,Dest为文件;Src:Dest=1:1

                        在没有r参数的情况下,是不允许执行的。

                        该指令执行




范例

       

一个源

范例1: # cp /etc/passwd /tmp,什么意思?

答:Src为文件,Dest为目录;

指令解读:

    将/etc路径下的文件passwd,复制到目标目录/tmp下,复制后的文件名仍为passwd。

   

范例2: # cp /etc/passwd /tmp/test,什么意思?

答:Src为文件,Dest为目录or文件;

指令解读:

1、当Dest(test)为文件时:

    则将文件passwd复制到目录/tmp下:

        1.1 如果test不存在,则复制文件以test为文件名保存在/tmp目录下;

        1.2 如果test已经存在,则询问用户是否用新复制的文件覆盖原来的test文件;

2、当Dest(test)为目录时:

    则将文件passwd,复制到目录/tmp下,复制后的文件名仍为passwd。

     

多个源

范例3:# cp /etc/passwd /etc/issue /etc/inittab /tmp/abc,什么意思?

答:Src:Dest=N:1;Src为文件,Dest为文件or目录

指令解读:

1、当Dest(abc)为文件时:

    问题来了,多个文件可以存放在一个文件中吗?

    答案是不行,当用户试图将多个文件存放于一个文件中,系统会报错提示目标abc不是一个目录。

2、当Dest(abc)为目录时:

    则将源文件(passwd,issue,inittab)复制到目标目录/tmp/abc下,并以原文件名保存文件。



2、目录管理

#ls

#cd

#pwd

创建空目录:mkdir,最后一个节点,才是需要创建的目录,之前的都是路径

选项:-p(p=parent 父):当需要创建的目标目录的父目录不存在时,则创建父目录,以实现递归创建

-v(显示创建的详细信息)

如何用一个命令实现创建/mnt/test/x/m  /mnt/test/y

答:mkdir -pv /mnt/test/{x/m,y}

{}:是bash shell的一个高级特性,叫命令行展开也叫花括号展开。

~USERNAME:叫波浪线展开

如何在/mnt/test2下创建:a_b,a_c,d_b,d_c

答:mkdir -pv /mnt/test2/{a,d}_{b,c}或

   mkdir -pv /mnt/test2/{a_b,a_c,d_b,d_c}

删除空目录:rmdir

选项:-p(p=parent 父):只有一线单传才能,删除父目录,每个节点只有孩子


tree(查看目录树),