文件、目录和磁盘格式

bird - 文件、目录和磁盘格式(命令)

文件使用的命令

  1. cd(change directory)切换工作目录
  2. pwd,显示目录所在的目录
      pwd -P,显示真正的路径,而非使用链接(link)路径,也就是显示出链接指向的真实的文件,略过链接文件。
  3. mkdir -m(mode):设置文件权限,直接设置,不使用默认权限。你还记得修改权限的命令吗?就是chmod
    mkdir -p(parents):帮助你直接的建立上层目录,将你需要的目录递归创建,给你找爸爸。补充:/test1/test2/hello,我们想创建hello这个文件,但是如果前面的路径是不存在的就需要单独一个一个创建,使用-p选项就可以简单一点,但是如果目录很深的话还是单独创建比较好,因为有可能写错字啊
    举例:mkdir -m 711 test
    mkdir -p test1/test2/test3/test4
    mkdir test1/test2/test3/test4(错误),如果上层目录不存在,那么就无法创建。加上-p,就能够自动创建上层目录,是不是很方便。
  4. rmdir
  • rmdir test:test为空,才OK

  • -p:如果存在上层目录就要求删除上层目录,rmdir -p test1/test2/test3/test4,就把这一串目录一层一层的删了。有没有简单的?有啊,就是递归的删

  • 补充:我们仍然分析上面的例子,但是唯一的区别就是我们限定test1下除了有目录test2还有文件hello,删的时候会判定test4是否为空,空的话就删,然后上一层是否为空,也就是是否还有除了目标目录之外的其他文件,如果没有接着删,然后一直到test1下仍然存在hello,所以到test1就停下了,从test2开始的空目录都没有了,剩下的只会是test1。

  • 补充:总之我想让你明白的是,这是逐层进行的,还有非空的含义是除了包含其他文件。

  • 递归的删rm -r(recursive递归),rm和rmdir的区别在于,一:rm并不仅限目录;二:rmdir只能删除空目录

执行文件路径的变量:$PATH         180页

环境变量:PATH,很显然他和我们的执行文件的路径有关,什么ls啊之类的命令(可执行文件)。

  1. 问题:为什么我们在不同的目录下,都可以执行ls,cd等命令?
    答,因为有PATH,系统会依照PATH的设置去每个PATH定义的目录下查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查找到的同名命令先执行。
    echo P A T H , 查 询 P A T H 定 义 的 目 录 , PATH,查询PATH定义的目录, PATHPATH,表示后面的PATH是变量
    PATH=“${PATH}:/xXX”增加/xXX目录加入PATH定义的目录。 这样我们就可以在任何目录都可以使用ls这个命令了。

比如:我们把ls执行文件从/bin移动到/root下,那么我们肯定无法再使用ls,因为PATH中并不包含/root,所以系统找不到名为ls的可执行文件,那么怎么让现在的ls接着工作呢?

  • /root/ls:我们还在root的家目录,我想在家目录这里可以使用,就声明一下ls移动的路径,就可以再本目录接着使用了。
    对,就是使用PATH = “${PATH}:/root”就能够在PATH中增加目录
    还有一种办法能够执行ls:就是使用:一:绝对路径:/root/ls;二:进入到/root目录下,使用./ls

  • 问题:我们都知道每一个文件夹下可能都包含可执行文件,为什么不在PATH中加入【.】本目录

解答:1. 工作目录并不是固定的,哪里都有可能
2. 规则是根据PATH中的目录一个目录一个目录地查,在哪个目录先找到就先执行哪个。再回到我们的问题,如果有人把/tmp临时文件目录加入到PATH中,并且添加上和常用命令同名的可执行文件(但是病毒,或者不可逆的删除操作),那么在不知情的情况下调用了该命令后果 是非常可怕的

文件和目录管理

  1. ls
  • -a:显示隐藏文件
  • -l:以列表形式显示,详细信息显示
  • -d:仅仅列出目录
  • -h:将文件容量以人类更容易理解的形式显示出来,比如GB,KB
  • ll   <==>   ls -l
  1. 复制
    cp 源文件(source) 目标文件(destination)
  • -a,相当于-dr --preserve=all,也就是全部复制,包括各种属性在内

  • -i,神奇的询问,很常见

  • -p,连同文件的属性(权限,用户,时间)一起复制过去

  • -r,递归复制,用于目录。但是我们的-a也行啊,全都复制过去,所以没问题

  • -d,若源文件为链接的属性,则复制链接文件属性而非文件本身

  • 补充:1. -a和-p,都是在 想要保留文件属性比如权限,所有人之类的情况下很常用;2. 普通管理员并没有修改权限的权利,所以,在普通模式下,即使想要保留文件的权限和所有人也做不到,因为默认的就是把复制文件的所有人改成复制者的,普通模式没有权利去干预这个过程,所以所有人这一项要注意;保险起见,如果想要保留所有属性的话还是在root模式下复制吧
    需要注意的是复制目录,文件与目录的权限可能会改变,所以使用-a

  1. 删除
    rm [-选项] 文件或目录
  • -f,强制
  • -r,递归的删,这就很爽了
  • -I,询问
  1. 移动
  • mv [-fiu] source destination
  • -f,强制
  • -i,询问
  • -u,如果原文件已经存在,且source比较新,那么就更新;用途:用来测试文件是否需要更新
  • 补充,mv还能够重命名
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kxvD5OUx-1577785533028)(en-resource://database/615:1)]

文件内容查看

  • 补充:管道(|),作用是把前面命令输出的信息,通过管道传给后面的命令继续使用,更多的使用方法有待详解
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVevvmKn-1577785533030)(en-resource://database/614:1)]

修改时间或创建新文件 touch

  1. 修改时间需要先明确的三个时间概念
  • 修改时间(modefication time,mtime):文件的内容数据更新的时候就会更新这个时间
  • 状态时间(status time,ctime):当状态被修改的时候就会更新这个时间,比如修改权限与属性
  • 读取时间(access time,atime):当文件内容被读取,就会更新这个时间

状态时间改不了,因为改一次ctime,就会更新一次
2. 修改时间的后缀和注意事项

  • -a:修改atime
  • -m:修改mtime
  • -d:修改日期
  • -t:修改atime和mtime,后面可接自定义的时间而不用目前的时间,格式【YYYYMMDDhhmm】
  1. 建立一个空白文件
    很简单,直接定义名字就行了
  • 补充:touch最常用的场合还是1. 创建新的文件;2. 将某个文件日期自定义为目前(mtime和atime)ctime是我们改不了的,ctime是状态修改的时间,ls -l显示的那一行东西都算作是状态,无论是修改权限、own、时间还是大小,都是对状态的修改,所以时间就会更新为目前的时间,也就是改不了,而且每改一次时间就会更新为当下的时间(简言之,ctime记录的最后一次修改状态的时间)。还有复制cp也无法复制ctime这个属性,因为,复制也算是 修改状态,ctime会更新为复制的时间。
  • 举例:
    创建一个test文件touch test

ls -l test,默认显示的是mtime,也就是最后一次文件内容修改的时间

ls -l --time=ctime test;ls -l --time=atime test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eyedihjn-1577785533032)(en-resource://database/11104:1)]

touch -t 201709010000.00 test

ls -l --time=ctime test;ls -l --time=atime test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mv6jzrbL-1577785533032)(en-resource://database/11106:1)]

我们看到使用-t选项修改时间之后,会发生改变的只有mtime(文件内容修改 时间)和atime(最后一次读取文件时间)。我个人认为最重要的时间就是文件内容修改时间,读取时间只要不超前就OK,所以修改时间的时候就自动和mtime保持一致我觉得挺好的

  • 修改时间会用到什么时候呢?

解答:有时候会有来自未来的文件的情况,比如时区的改变或者时间设置的问题,这个时候就需要动手修改时间了。
最后提出一点,两个命令之间使用;作为隔离,就可以使用多个命令并列执行。当命令行太长,一行写不下的时候可以使用转义字符\,将转义字符放到末尾即可换行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值