zoukankan      html  css  js  c++  java
  • Linux文件与目录管理

    前言:上一节记录了文件目录和权限,仅有文件目录和权限是不够的,我们还需要学会如何使用这些文件目录,包括目录间变换、 创建与删除目录、创建与删除文件,还有寻找文件、查阅文件内容等。

    命令帮助文档

    由于Linux命令太多,靠死记硬背是不太靠谱的,仅仅记住常用的几个命令借助工具会事半功倍的

    man ls(manue)

    info ls

    两者都会给出查阅命令的相关用法,和参数信息,要巧用工具,虽然只是英文的,但我想这些都不是事

    详情参照 http://www.cnblogs.com/javaLf/p/8284375.html

    可执行文件路径的变量

    •  首先来了解下什么是文件路径变量(PATH变量)

        Linux中环境变量的概念Windows上其实也有,就是系统执行环境的一些设置,环境变量有很多,比较常用的有:

    1)  PATH变量:是执行文件的查找路径的设置,就是在哪几个目录查找命令的二进制文件,这个变量最常用了,Windows上面也有这个变量。

    2)  LANG变量:设置终端的语系的变量,可以理解为英文、中文还是繁体中文的设置

    3)  HOME变量:指示出用户的主文件夹是哪个

    4)   PWD变量:当前用户当前的工作目录

    查阅文件属性的指令ls完整文件名为:/bin/ls,是一个绝对路径,为何在任何地方可执行ls命令?因为PATH变量的作用

    •  使用 echo $PATH 命令:可查看有哪些目录被定义(echo“显示、印出”)

    [git@localhost repository]$ echo  $PATH

    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/git/.local/bin:/home/git/bin

    • PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开, 每个目录是有“顺序”之分的
    • 执行ls命令时,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,先搜寻到的同名指令先被执行
    • PATH="${PATH}:/path":弱项让某个可执行文件,在任何位置都可被访问,使用此命令将其路径加入文件的路径变量 path代表路径

    目录与路径

    • 目录类型:
    1. 绝对路径:路径的写法“一定由根目录 / 写起
    2. 相对路径:相对于目前工作目录得路径
    • 目录相关操作:

      .  代表此层目录

      .. 代表上一层目录

      - 代表前一个工作目录

      ~ 代表“目前使用者身份”所在的主文件夹

     ~username 代表username这个使用者的主文件夹(username是个帐号名称)

    • 目录常用操作指令

    cd:变换目录

    pwd:显示目前的目录

    mkdir:创建一个新的目录

    参数:

    -p  将所需目录(包含上层目录)递归创建  mkdir -p testDir/test/t

    -m :设置文件的权限(无需理会默认权限,可直接设置)  mkdir -m 744 test

    rmdir:删除一个空的目录

    -p 连同上层空目录一起删除 rmdir -p testDir/test/t

    此方法仅可删除非空目录,若想连同目录中的内容一起删除可使用:rm –r testDir

    文件与目录的检视: ls(list 清单)

    • ls [-aAdfFhilnrRSt] 文件名或目录名称..

    选项与参数:

    -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)

    -A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录

    -d :仅列出目录本身,而不是列出目录内的文件数据(常用)

    -f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)

    -F :根据文件、目录等信息,给予附加数据结构,例如:

    *:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;

    -h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;

    -i :列出 inode 号码,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)

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

    • cp (复制文件或目录)

    cp [-adfilprsu] 来源文件(source) 目标文件(destination)

    cp [options] source1 source2 source3 .... directory

    选项与参数:

    -d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;

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

    -a :相当于 -dr --preserve=all 的意思;(常用)

    -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

    -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);

    -f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;

    -l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;

    -s :复制成为符号链接文件 (symbolic link),即“捷径”文件;

    -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。

    --preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。

    如果来源文件有两个以上,最后一个目的文件一定要是“目录”

    cp 的文件会包含源文件的属性与权限,如test源文件所有者为root,那么cp后test的文件与属性与权限仍属于root

    • rm (移除文件或目录)

    rm [-fir] 文件或目录

    选项与参数:

    -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;

    -i :互动模式,在删除前会询问使用者是否动作

    -r : 递归删除

    • mv (移动文件与目录,或更名)

    mv [-fiu] source destination

    mv [options] source1 source2 source3 .... directory

    选项与参数:

    -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

    -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

    -u :若目标文件已经存在,且 source 比较新,才会更新 (update)

    如果有多个来源文件或目录,则最后一个目标文件一定是“目录!”

    也可用于重命名,rename:专门的重命名,可批量

    touch(修改文件时间或创建新文件)

    touch [-acdmt] 文件

    取得路径的文件名称与目录名称、

    basename :取得最后的文件名

    dirname: 取得目录名

    文件内容查阅

    1)      cat 由第一行开始显示文件内容

    2)      tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写

    3)      nl 显示的时候,顺道输出行号

    4)      more 一页一页的显示文件内容

    a)       空格键 (space):代表向下翻一页;

    b)       Enter :代表向下翻“一行”;

    c)       /字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;

    d)       :f :立刻显示出文件名以及目前显示的行数;

    e)       q :代表立刻离开 more ,不再显示该文件内容。

    f)       b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用

    5)      less 与 more 类似,但是比 more 更好的是,可以往前翻页

    a)       [pagedown]:向下翻动一页;

    b)       [pageup] :向上翻动一页;

    c)       ?字串 :向上搜寻“字串”的功能;

    d)       n :重复前一个搜寻 (与 / 或 ? 有关!)

    e)       N :反向的重复前一个搜寻 (与 / 或 ? 有关!)

    f)       g :前进到这个数据的第一行去;

    g)       G :前进到这个数据的最后一行去 (注意大小写);

    6)      head 只看头几行

    7)      tail 只看尾巴几行

    8)      od 以二进制的方式读取文件内容

    文本处理

    不影响源文件,仅仅影响显示内容

    • cut 切割文本

    -d :指定字段为分隔符,默认为空格

    -f :指定要显示的字段

    [-f 1,3] 显示文本中第1,段和第3段

    [-f 1~3] 显示文本中第1段到第3段

    • sort 排序(默认ascii升序)

    -n 数值排序

    -r 反转(逆序)

    -t 指定字段分隔符

    -k 以某字段为关键字

    -u 排序后相同行只显示一次(相邻的行,不相邻则不属于重复)

    -f 排序时忽略字符大小写

    • uniq 报告文本重复的行

    -c 显示文件中重复的次数

    -d 只显示重复的行

    l   wc 文本统计(word count):[行数][单词数][字节数]

    -c, --bytes, --chars 输出字节统计数。

    -l, --lines 输出换行符统计数。

    -L, --max-line-length 输出最长的行的长度。

    -w, --words 输出单词统计数。

    • tr转换或删除字符

    [tr ‘ab’ ‘AB’ >  test.txt] 将test.txt中的小写字母a,b替换为大写字母A,B “>”代表文件重定向

    -d 删除出现在字符集中的字符

    文件隐藏属性

    • chattr (设置文件隐藏属性)

    chattr [+-=][ASacdistu] 文件或目录名称

    + :增加某一个特殊参数,其他原本存在参数则不动。

    - :移除某一个特殊参数,其他原本存在参数则不动。

    = :设置一定,且仅有后面接的参数

    A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,

    可避免 I/O 较慢的机器过度的存取磁盘。

    S :一般文件是非同步写入磁盘的,如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。

    a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性

    c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,

    但是在储存的时候,将会先进行压缩后再储存

    d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份

    i :让一个文件“不能被删除、改名、设置链接也无法写入或新增数据,只有 root 能设置此属性

    s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!

    u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件!

    注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置

    注意2:xfs 文件系统仅支持 AadiS 而已

    • lsattr (显示文件隐藏属性)

    lsattr [-adR] 文件或目录

    选项与参数:

    -a :将隐藏文件的属性也秀出来;

    -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

    -R :连同子目录的数据也一并列出来

    观察文件类型:file

    如图告诉我们git文件是一个文件夹

     

    指令文件名搜索which

    which [-a] command:寻找“可执行文件

     

    -a :列出所有同名文件,而非第一个

    文件文件名的搜所whereis、locate、find

    文件查找一般先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻。因为 find 是直接搜寻硬盘,速度较慢,但功能强大。

    • whereis [-bmsu] 文件或目录名   :特定的目录中查找

    选项与参数:

    -l :可以列出 whereis 会去查询的几个主要目录而已

    -b :只找 binary 格式的文件

    -m :只找在说明文档 manual 路径下的文件

    -s :只找 source 来源文件

    -u :搜寻不在上述三个项目当中的其他特殊文件

    •  locate / updatedb

    locate [-ir] 关键字 :根据文件的部分名称查找文件

    选项与参数:

    -i:忽略大小写的差异;

    -c:不输出文件名,仅计算找到的文件数量

    -l:仅输出几行的意思,例如输出五行则是 -l 5

    -S:输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等

    -r:后面可接正则表达式的显示方式

    注:locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据所搜寻到的。限制:创建的新文件,未更新到数据库执行该命令,会提示找不到。

    既然是数据库中搜所文集,有没有办法手动更新呢?这当然是可以的

    • updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate 内的数据库文件。
    • find

    find [PATH] [option] [action]

    1)选项与参数:

    与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明

    -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;

    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;

    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。

    -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

    2) 选项与参数:

    与使用者或群组名称有关的参数:

    -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在

    /etc/passwd 里面与帐号名称对应的数字

    -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在

    /etc/group

    -user name :name 为使用者帐号名称

    -group name:name 为群组名称

    -nouser :寻找文件的拥有者不存在 /etc/passwd 的人

    -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件

    3)与文件权限及名称有关的参数:

    -name filename:搜寻文件名称为 filename 的文件;

    -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:

          c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 100KB还要大的文件,就是“ -size +50k ”

    -type TYPE :搜寻文件的类型为 TYPE 的

      类型主要有:一般正规文件 (f), 设备文件 (b, c),目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。

    -perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwxr-xr-x 的属性为 0755

    -perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件

    -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件

    小结

    • 绝对路径:“一定由根目录 / 写起”;相对路径:“不由 / 写起,而是由相对当前目录写起”
    • 目录管理:ls、cd、mkdir、rmdir、pwd
    • 文件管理:touch、stat、nano、file、cp、mv、rm
    • 文本处理:cat、more、less、head、tail、cut、join、sort、uniq
  • 相关阅读:
    window.clipboardData(转载)
    动态添加样式(转载)
    IE6 IE7 FF的CSS Hack总结(转载)
    [轉貼] linux解壓 tar 命令
    [轉]用 snprintf / asprintf 取代不安全的 sprintf
    寫一個函數計算當參數為 n(n很大) 時的值 12+34+56+7……+n
    [轉]vi 與 vim 的指令整理
    MySQL和php採用UTF8的方法
    [轉]printf 引數說明
    [C] warning: ISO C90 forbids mixed declarations and code
  • 原文地址:https://www.cnblogs.com/javaLf/p/8321031.html
Copyright © 2011-2022 走看看