在开始理解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(查看目录树),