zoukankan      html  css  js  c++  java
  • Linux学习(四)档案与目录管理

    1. 目录与路径
      1.1 相对路径与绝对路径
      1.2 目录的相关操作: cd, pwd, mkdir, rmdir
      1.3 关于执行文件路径的变量: $PATH
    2. 档案与目录管理
      2.1 档案与目录的检视: ls
      2.2 复制、移动与删除: cp, rm, mv
      2.3 取得路径的文件名称与目录名称
    3. 档案内容查阅:
      3.1 直接检视档案内容: cat, tac, nl
      3.2 可翻页检视: more, less
      3.3 资料撷取: head, tail
      3.4 非纯文字文件: od
      3.5 修改档案时间与建置新档: touch
    4. 档案与目录的预设权限与隐藏权限
      4.1 档案预设权限:umask
      4.2 档案隐藏属性: chattr, lsattr
      4.4 档案特殊权限:SUID/SGID/Sticky Bit
      4.3 档案类型:file
    5. 档案的搜寻:which, whereis, locate, find

    . 代表此层目录 
    .. 代表上一层目录 
    - 代表前一个工作目录 
    ~ 代表『目前使用者身份』所在的家目录 
    ~account 代表 account 这个使用者的家目录
    

     常见的处理目录的指令:   

          •  cd:变换目录
      •  pwd:显示目前的目录
      •  mkdir:建立一个新的目录
      •  rmdir:删除一个空的目录
      •cd (变换目录)

       pwd

    [root@linux ~]# pwd [-P] 
    参数: 
    -P :显示出确实的路径,而非使用连结 (link) 路径。 
    范例: 
    [root@linux ~]# pwd 
    /root <== 显示出目录啦~ 
    [root@linux ~]# cd /var/mail 
    [root@linux mail]# pwd 
    /var/mail 
    [root@linux mail]# pwd -P 
    /var/spool/mail <== 怎么回事?有没有加 -P 差很多~ 
    [root@linux mail]# ls -l /var/mail 
    lrwxrwxrwx 1 root root 10 Jun 25 08:25 /var/mail -> spool/mail
    # 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail 
    # 所以,加上 pwd -P 的参数后,会不以连结文件的数据显示,而是显示正确的完整路径啊! 
    

     mkdir

    [root@linux ~]# mkdir [-mp] 目录名称 
    参数: 
    -m :设定档案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~ 
    -p :帮助你直接将所需要的目录递归建立起来! 
    范例: 
    [root@linux ~]# cd /tmp 
    [root@linux tmp]# mkdir test <== 建立一名为 test 的新目录 
    [root@linux tmp]# mkdir test1/test2/test3/test4 
    mkdir: cannot create directory `test1/test2/test3/test4': 
    No such file or directory <== 没办法直接建立此目录啊! 
    [root@linux tmp]# mkdir -p test1/test2/test3/test4 
    # 加了这个 -p 的参数,可以自行帮您建立多层目录! 
    [root@linux tmp]# mkdir -m 711 test2 
    [root@linux tmp]# ls -l 
    drwxr-xr-x 3 root root 4096 Jul 18 12:50 test 
    drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 
    drwx--x--x 2 root root 4096 Jul 18 12:54 test2 
    # 仔细看上面的权限部分,如果没有加上 -m 来强制设定属性,系统会使用预设属性。 
    # 那么您的预设属性为何?这要透过底下介绍的 umask才能了解喔! ^_^
    

     rmdir (删除『空』的目录)

    [root@linux ~]# rmdir [-p] 目录名称 
    参数: 
    -p :连同上层『空的』目录也一起删除 
    范例: 
    [root@linux tmp]# ls -l 
    drwxr-xr-x 3 root root 4096 Jul 18 12:50 test 
    drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 
    drwx--x--x 2 root root 4096 Jul 18 12:54 test2 
    [root@linux tmp]# rmdir test 
    [root@linux tmp]# rmdir test1 
    rmdir: `test1': Directory not empty 
    [root@linux tmp]# rmdir -p test1/test2/test3/test4 
    [root@linux tmp]# ls -l 
    drwx--x--x 2 root root 4096 Jul 18 12:54 test2 
    # 瞧!利用 -p 这个参数,立刻就可以将 test1/test2/test3/test4 一次删除~ 
    # 不过要注意的是,这个 rmdir 仅能『删除空的目录』
    

     如果要将所有目录下的东西都杀掉呢?! 这个时候就必须使用 rm -rf test

     关于执行文件路径的变量: $PATH

    [root@linux ~]# echo $PATH 
    /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin 
    

     将 /root 的路径加入 PATH 当中

    [root@linux ~]# PATH="$PATH":/root 
    

     使用完整文件名来下达指令, 亦即直接使用相对或绝对路径来执行,例如:

    [root@linux ~]# /root/ls 
    [root@linux ~]# ./ls 
    

     档案与目录的检视: ls

    [root@linux ~]# ls [-aAdfFhilRS] 目录名称 
    [root@linux ~]# ls [--color={none,auto,always}] 目录名称 
    [root@linux ~]# ls [--full-time] 目录名称 
    参数: 
    -a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~ 
    -A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~ 
    -d :仅列出目录本身,而不是列出目录内的档案数据 
    -f :直接列出结果,而不进行排序 (ls 预设会以档名排序!) 
    -F :根据档案、目录等信息,给予附加数据结构,例如: 
    *:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案; 
    -h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来; 
    -i :列出 inode 位置,而非列出档案属性; 
    -l :长数据串行出,包含档案的属性等等数据; 
    -n :列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!) 
    -r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小; 
    -R :连同子目录内容一起列出来; 
    -S :以档案容量大小排序! 
    -t :依时间排序 
    --color=never :不要依据档案特性给予颜色显示; 
    --color=always :显示颜色 
    --color=auto :让系统自行依据设定来判断是否给予颜色 
    --full-time :以完整时间模式 (包含年、月、日、时、分) 输出 
    --time={atime,ctime} :输出 access 时间或 改变权限属性时间 (ctime) 
    而非内容变更时间 (modification time) 
    范例一:将家目录下的所有档案列出来(含属性与隐藏文件) 
    [root@linux ~]# ls -al ~ 
    total 252 
    drwxr-x--- 9 root root 4096 Jul 16 23:40 . 
    drwxr-xr-x 24 root root 4096 Jul 16 23:45 .. 
    -rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg 
    -rw------- 1 root root 12543 Jul 18 01:23 .bash_history 
    -rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout 
    -rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile 
    -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc 
    -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log 
    -rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog 
    drwx------ 2 root root 4096 Jul 4 16:03 .ssh 
    -rw------- 1 root root 12613 Jul 16 23:40 .viminfo 
    # 这个时候您会看到以 . 为开头的几个档案,以及目录文件 ./../.ssh 等等, 
    # 不过,目录文件都是以深蓝色显示,有点不容易看清楚就是了。 
    范例二:承上题,不显示颜色,但在文件名末显示出该文件名代表的类型(type) 
    [root@linux ~]# ls -alF --color=never ~ 
    total 252 
    drwxr-x--- 9 root root 4096 Jul 16 23:40 ./ 
    drwxr-xr-x 24 root root 4096 Jul 16 23:45 ../ 
    -rw------- 1 root root 1491 Jun 25 08:53 anaconda-ks.cfg 
    -rw------- 1 root root 12543 Jul 18 01:23 .bash_history 
    -rw-r--r-- 1 root root 24 Dec 4 2004 .bash_logout 
    -rw-r--r-- 1 root root 191 Dec 4 2004 .bash_profile 
    -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc 
    -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log 
    -rw-r--r-- 1 root root 5976 Jun 25 08:53 install.log.syslog 
    drwx------ 2 root root 4096 Jul 4 16:03 .ssh/ 
    -rw------- 1 root root 12613 Jul 16 23:40 .viminfo 
    # 注意看到显示结果的第一行,嘿嘿~知道为何我们会下达类似 ./command 
    # 之类的指令了吧?因为 ./ 代表的是『目前目录下』的意思啊!至于什么是 FIFO/Socket ? 
    # 请参考前一章节的介绍啊! 
    范例三:完整的呈现档案的修改时间 *(modification time) 
    [root@linux ~]# ls -al --full-time ~ 
    total 252 
    drwxr-x--- 9 root root 4096 2005-07-16 23:40:13.000000000 +0800 . 
    drwxr-xr-x 24 root root 4096 2005-07-16 23:45:05.000000000 +0800 .. 
    -rw------- 1 root root 1491 2005-06-25 08:53:37.000000000 +0800 anaconda-ks.cfg 
    -rw------- 1 root root 12543 2005-07-18 01:23:33.000000000 +0800 .bash_history 
    -rw-r--r-- 1 root root 24 2004-12-04 05:44:13.000000000 +0800 .bash_logout 
    -rw-r--r-- 1 root root 191 2004-12-04 05:44:13.000000000 +0800 .bash_profile 
    -rw-r--r-- 1 root root 395 2005-07-04 11:45:16.000000000 +0800 .bashrc 
    -rw-r--r-- 1 root root 68495 2005-06-25 08:53:34.000000000 +0800 install.log 
    -rw-r--r-- 1 root root 5976 2005-06-25 08:53:28.000000000 +0800 install.log.syslog 
    drwx------ 2 root root 4096 2005-07-04 16:03:24.000000000 +0800 .ssh 
    -rw------- 1 root root 12613 2005-07-16 23:40:13.000000000 +0800 .viminfo 
    # 请仔细看,上面的『时间』字段变了喔!变成较为完整的格式。 
    # 一般来说, ls -al 仅列出目前短格式的时间,有时不会列出年份, 
    # 藉由 --full-time 可以查阅到比较正确的完整时间格式啊! 
    

     复制、移动与删除: cp, rm, mv

  • 相关阅读:
    BZOJ(2) 1041: [HAOI2008]圆上的整点
    BZOJ(1) 1003 [ZJOI2006]物流运输
    HDU 1285 确定比赛名次
    洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
    POJ 1201 Intervals
    2017 软件工程 个人作业——软件产品案例分析
    2017 软件工程 个人技术博客(α)
    在VS2017上对C++项目进行单元测试
    ASC47B borderless
    ASC47B borderless
  • 原文地址:https://www.cnblogs.com/zhuiluoyu/p/4504232.html
Copyright © 2011-2022 走看看