zoukankan      html  css  js  c++  java
  • 01 Linux 文件操作,入门看这一篇就够了

    01 Linux 下的文件操作,入门看这篇就够了

    声明:本文基于《鸟哥的 Linux 私房菜》 基础学习篇(第四版)书中第五、六章,本博客内容为书中内容总结、提炼。所有命令均取于该书。

    一、绝对路径和相对路径

    绝对路径:一定是由根目录/写起,比如:/usr/share/doc这个目录。

    相对路径:不是由/写起,例如由/usr/share/doc要到/usr/share/man下面时,就可以写成:cd ../man,这就是相对路径的写法,相对路径意指相对于当前工作目录的路径。

    建议:能使用绝对路径就使用绝对路径。

    二、目录相关操作

    首先要知道切换目录的命令是 cd。其次,几个特殊的目录也要记住:

    .			代表当前目录
    ..			代表上一层目录
    -			代表前一个工作目录
    ~			代表当前使用者身份的家目录
    ~account	代表 account 这个使用者的家目录
    
    例如:返回上一层目录命令:cd -
    

    需要注意的是:在所有的目录下面都会存在两个目录,分别是 ... ,分别代表此层与上层目录的意思。

    其次是掌握几个常见处理目录的命令:

    cd		切换目录
    pwd		显示当前目录
    mkdir	建立一个心目录
    rmdir	删除一个空目录
    

    2.1 cd(change directory,切换目录)

    1. cd [绝对路径或相对路径]
    2. cd ~cd:回到家目录;
    3. cd ..:回到上层目录;
    4. cd -:回到刚刚的目录,也就是回到进现在这个目录之前的目录。

    2.2 pwd(显示当前所在的目录)

    1. pwd:单纯的显示当前目录;

    2. pwd -P:显示出真正的目录,而非使用链接(link)路径。

      解释:这个命令不会显示当前目录下的链接类型的文件,即以l开头的文件类型,而是会显示此链接指向的真正的文件路径。

    2.3 mkdir(创建目录)

    mkdir [-mp] 目录名称

    选项与参数:

    -m:设置文件的权限,直接设置,不使用默认权限(umask);

    -p:帮助你直接将所需要的目录(包含上一级目录)递归创建。

    使用案例:

    1. 权限的:mkdir -m 777 demo,使用改命令创建出来的demo文件夹的权限就是 drwxrwxrwx

      [root@localhost a]# ls
      [root@localhost a]# mkdir -m 777 demo
      [root@localhost a]# ls
      demo
      [root@localhost a]# ls -al
      total 0
      drwxr-xr-x. 3 root root 18 Dec 14 15:04 .
      drwxr-xr-x. 3 root root 48 Dec 14 14:55 ..
      drwxrwxrwx. 2 root root  6 Dec 14 15:04 demo
      [root@localhost a]# 
      

      分析:这个目录的权限是:drwxrwxrwx,其中第一个字母 d 的意思表名这是个目录,后面的九个字符可以看做是三组rwx,三组对应二进制的数字就是000 000 000,每组可表示的十进制数据就是0,1,2,4,5,6,7。不同的数字就可以表示不同位置上是有值得。777 即代表三个值都有。假如是712则代表是drwx--x-w-

      关于本部分更加详细的说明,更多的文件权限参考,可参照我的上一篇博文

    2. 假如直接使用 mkdir a/b/c,创建a、b、c这个目录是创建不了的。需要使用mkdir -p a/b/c 才可以。

    2.4 rmdir(删除空目录)

    rmdir [-p] 目录名称

    选项和参数:

    -p:连同上层空的目录也一起删除。

    三、文件与目录管理

    3.1 ls(文件与目录的查看)

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

    ls [--color={never,auto,always}] 文件名或目录名称

    ls [--full-time]

    选项与参数:

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

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

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

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

    -F:根据文件、目录等信息,给予附加数据结构,例如:* 代表可执行文件;/ 代表目录;= 代表 socket 文件;| 代表 FIFO文件;

    -h:将文件容量以人类较易读的方式(GB、KB等)列出来;

    -i:列出 inode 号码

    -l:详细信息显示,包含文件的属性与权限等数据(常用)

    -n:列出 UID 与GID 而非使用者与用户组的名称;

    -r:将排序结果反向输出,例如:原本文件名由小到大,反向即由大到小;

    -R:连同子级目录内容一起列出来,等于该目录下的所有文件都会显示出来;

    -S:以文件容量大小排序,而不是用文件名排序;

    -t:以时间排序,而不是用文件名;

    --color-never:不要依据文件特性给予颜色显示;

    --color-always:显示颜色;

    --color-auto:让系统自动依据设置来判断是否给予颜色设置;

    --full-name:以完整的时间模式(包含年、月、日、时、分)输出;

    --time={atime,ctime}:输出 access 时间或改变权限属性时间(ctime),而非内容修改时间(modification time)。

    ls 的参数那么多,常用的也就那么几个。需要注意的一个地方是:有一些发行版,直接将ls -l简化成 ll

    3.2 cp(copy 复制)

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

    cp [options] 源文件1 源文件2 源文件3... 目标目录

    选项与参数:

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

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

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

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

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

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

    -r:递归复制,用于目录的复制操作(常用)

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

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

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

    最后要注意的是,如果源文件有两个以上,则最后一个目标文件一定要是“目录”才行。

    即:cp [options] 源文件1 源文件2 源文件3... 目标目录

    3.3 rm(删除文件或目录)

    rm [-fir] 文件或目录

    选项好参数:

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

    i:交互模式,在删除前会询问使用者是否操作;

    r:递归删除,最常用于目录的删除,这是很危险的选项。

    3.4 mv(移动文件与目录,或重命名)

    mv [fiu] source destination

    mv [options] source1 source2 source3... directory

    选项和参数:

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

    -i:若目标文件存在,会询问;

    -u​:​若目标文件已存在,且 source 比较新,再回更新。

    四、获取路径的文件名和目录名称

    每个文件的完整文件名包含了前面的目录与最终的文件名,而每个文件名的长度考科一到达 255 个字符。我们通过反斜线(/)来辨别哪个是文件名哪个是目录名。

    其实获取文件名或是目录名称,一般的用途实在程序里进行判断使用。

    [root@localhost ~]# basename /etc/sysconfig/network		# 获取文件名称
    network
    [root@localhost ~]# dirname /etc/sysconfig/network		# 获取文件的目录
    /etc/sysconfig
    

    五、文件内容的查看

    命令主要分四种:

    1. 直接查看一个文件的内容:cattacnl

    2. 可一翻页查看文件的内容:moreless

    3. 数据截取:headtail

    4. 非纯文本文件:od

    5.1 cat(concatenate 直接查看)

    cat [-AbEnTv]

    选项与参数:

    -A:相当于 -vET的整合选项,可列出一些特殊字符而不是空白而已;

    -b:列出行号,空白行不标行号;

    -E:将结尾的换行符 $ 显示出来;

    -n:打出行号,空白行也打印行号;

    -T:将 [Tab]按键以 ^I显示出来;

    -v:列出一些看不出来的特殊字符。

    5.2 tac(反向列示)

    这个可以顾名思义了,该名效果与cat相反。-_-

    5.3 nl(添加行号打印)

    nl [-bnw] 文件

    5.4 more(一页一页翻动)

    当使用more 文件名时,有以下几个按键可以使用:

    • 空格键(space):向下翻页;
    • Enter:向下翻一行;
    • /字符串:在显示的内容当中,向下查找字符串这个关键词;
    • :f:立刻显示出文件名以及目前显示的行数;
    • q:立刻离开 more;
    • b 或 Ctrl + b:代表往回翻页。

    5.5 less(一页一页翻动)

    • 空格键:向下翻页;
    • [pagedown]:向下翻页;
    • [pageup]:向上翻页;
    • /字符串:向下查找字符串;
    • ?字符串:向上查找字符串;
    • n:重复前一个查找;
    • N:反向重复前一个查找;
    • g:前进道这个数据的第一行;
    • G:前进到这个数据的最后一行;
    • q:离开 less

    man page 就是调用 less来显示说明文件的内容。

    5.6 head(数据截取,取出前几行)

    head [-n number] 文件

    选项与参数:

    -n:后面接数据,代表显示几行的意思

    5.7 tail(数据截取,取出后面几行)

    tail [-n number] 文件

    选项与参数:

    -n:后面接数据,代表显示几行的意思;

    -f:标识将持续刷新后面所接文件的内容,知道按下 Ctrl + c 退出。适合于实时查看日志文件的时候。

    5.8 od(非纯文本文件)

    例如 /usr/bin/passwd这个执行文件的内容时,又该如何去读出信息呢?就是od

    六、文件的创建或修改文件时间

    6.1 touch

    touch [-acdmt] 文件

    选项与参数:

    -a:仅自定义 access time;

    -c:仅修改文件的时间,文件不存在时不建立新文件;

    -d:后面可以接想自定义的日期,不一定是当日期,也可以使用--date=日期或时间

    -m:仅修改 mtime;

    -t:后面可以接想自定义的时间而不用非要是当前的时间,格式为{YYYYMMDDhhmm}。

    七、命令与文件的查找

    7.1 which (脚本文件的查找)

    which [-a] 命令

    选项与参数:

    -a:将所有 PATH 目录下中可以找到的命令均解除,而不止第一个被找到的命令。

    7.2 whereis (文件的查找)

    whereis [-lbmsu] 文件名或目录名

    选项与参数:

    -l:会去查找几个主要目录;

    -b:只找 binary(二进制)文件;

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

    -s:只找 source 源文件;

    -u:查找不在三个项目当中的其他特殊文件。

    7.3 locate / updatedb

    locate [-iclSr] keyword

    选项与参数:

    i:忽略大小写差异;

    c:不输出文件名,显示文件数量;

    l:仅输出几行的意思,例如输出 5 行:-l 5;

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

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

    注意:使用 locate查找数据特别快,这是因为 locate寻找的数据是由已创建的数据库 /var/lib/mlocate里面的数据所查到的。所以不直接去硬盘里读取数据,就当然很快了。

    那么使用locate有啥限制呢? 因为它是从数据库查找的,而数据库的建立默认是每天执行一次(每个 Linux 发行版可能不一样,CentOS 7.x 是每天更新一次数据库)。所以当你建立起来的文件,却在数据库更新之前查找该文件,那么 locate会告诉你找不到滴。

    当然也可以设置手动更新数据库。直接输入【updatedb】就可以。这个命令回去读取 /etc/updatedb.conf这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新到整个数据库文件。因为 updatedb会去查找硬盘,索引当你执行该命令时,可能会等待数分钟时间。

    • updatedb:根据 /etc/updatedb,conf的设置去查找系统硬盘内的文件,并更新 /var/lib/mlocate内的数据库文件;
    • locate:根据 /var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名。

    7.4 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 还要新的文件。

    八、文件与目录先关权限

    暂略。

  • 相关阅读:
    [转]Request Control Introduce
    [转]How to set the control word of FPU in delphi
    Delphi消息分发机制
    Delphi Handle Exception
    python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
    如何在Linux下实现50万并发
    转载 google hack
    Linux 网卡如何支持TSO GSO指南
    收藏:网口协商
    AVR地址空间
  • 原文地址:https://www.cnblogs.com/kjgym/p/12041678.html
Copyright © 2011-2022 走看看