• Linux之基础文件类指令(二)


    Linux之基础文件类指令

    Author:Onceday    date:2022年7月29日

    Linux基础知识整理系列,不积跬步无以至千里。

    本内容收集整理于《鸟哥的Linux私房菜》。

    1.引言

    路径有相对路径和绝对路径之分,有利有弊,需要择机使用。

    以下是几种特殊的目录:

    • .,代表此层目录

    • ..,代表上一层目录

    • -,代表前一个工作目录

    • ~,代表目前使用者身份所在的家目录

    • ~account,代表account这个使用者的家目录

    2.常见处理目录的命令

    2.1 cd切换目录:
    cd 目录
    
    • 1
    2.2 pwd显示当前目录:
    pwd [-P] #打印物理路径,不带有符号链接
    
    • 1
    2.3 madir建立新目录:
    mkdir -m 777 目录名    #使用指定的权限创建目录
    mkdir -p 目录名        #可以递归建立目录
    
    • 1
    • 2
    2.4 rmdir删除空目录:
    rmdir [-p] 目录名        #-p是递归删除空目录
    
    • 1
    2.5 可使用$PATH来查看当前的可执行文件路径变量。
    2.6 ls常看文件目录:
    ls 文件/目录
    ls -al 文件/目录     #隐藏文件+所有信息
    ls -d 目录          #查看目录本身
    ls -h 文件/目录      #将文件容量以人类易读的方式展现出来
    ls -R 目录          #递归列出子目录的内容
    ls -S 目录          #以文件容量大小排序,而不是用文件名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.7 cp复制文件:
    cp  源文件 目标文件  #复制的数据文件权限依据执行cp命令的账户权限而定
    cp  -a  xxx xxx    #将文件的所有特性一起复制
    cp  -i  xxx xxx    #若目标文件存在,复制前则询问操作是否执行
    cp  -p  xxx xxx    #连同文件属性(权限,用户,时间)一起复制
    cp  -r  xxx xxx    #递归复制文件夹
    cp  -l  xxx xxx    #创建硬链接文件
    cp  -s  xxx xxx    #复制成为符号链接,即快捷方式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2.8 rm删除文件或目录:
    rm -f xxx  #忽略不存在的文件
    rm -I xxx  #删除之前会询问
    rm -r xxx  #递归删除
    rm -v xxx  #显示删除的过程
    
    • 1
    • 2
    • 3
    • 4
    2.9 mv移动文件或目录:
    mv 源文件 目标文件
    mv -f  #强制删除,不询问
    mv -i  #覆盖前询问
    mv -b  #为已有的文件创建备份
    mv -u  #目标不存在,或者较久才会执行
    mv -n  #不覆盖已存在文件
    mv -v  #显示移动的过程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2.10 basename 获取文件名
    basename xxxx
    
    • 1
    2.11 dirname 获取目录名称
    dirname xxxx
    
    • 1

    3.常见文件内容查看命令

    3.1 引言

    常用命令如下:

    指令描述
    cat由第一行开始显示文件的内容
    tac从最后一行开始显示,可以看出tac是cat的到写
    nl显示的时候同时输出行号,cat -n也可以
    more一页一页的显示
    less一页一页的显示,可以向前翻页
    head只看前几行
    tail只看后几行
    od以二进制的方式读取文件内容
    3.2 cat指令
    cat [-v/-T/-E/-A] 文件
    
    • 1
    • -v,列出一些看不出来的特殊字符
    • -T,将[tab]键以^I显示出来
    • -E,将结尾的换行符$显示出来
    • -A,相当于-vET的集合
    cat [-b/-n] 文件
    
    • 1

    -b列出非空白行的行号,-n列出所有行的行号。

    3.3 nl指令
    nl -b 文件
    
    • 1

    可以选取行号计算的方式:-b a计算所有行,-b t不计算空行。

    nl -n 文件
    
    • 1

    列出行号的方式:

    • ln, 左对齐,空格不用 0 填充
    • rn, 右对齐,空格不用 0 填充
    • rz, 右对齐,空格用 0 填充
    3.4 more指令

    互动式文本显示,适合行数大于屏幕输出的行数。

    以下是常见按键:

    • 空格键(space):代表向下翻一页
    • Enter:代表向下翻一行
    • /字符串:代表在这个显示的内容中,向下查找字符串这个关键词
    • :f:立刻显示出文件名以及目前显示的行数
    • q:代表立刻离开more,不在显示该文件内容
    • b或[ctrl]-b:代表往回翻页,不过这操作只对文件有用,对管道无用。
    3.5 less指令

    互动式文本显示,一页一页的翻动:

    • 空格键:向下翻动一页
    • [pagedown]:向下翻动一页
    • [pageup]:向上翻动一页
    • /字符串:向下查找字符串的功能
    • ?字符串:向上查找字符串的功能
    • n:重复前一个查找
    • N:反向的重复前一个查找
    • g:前进到这个数据的第一行
    • G:前进到这个数据的最后一行
    • q:离开less这个程序
    3.6 head和tail的数据截取
    head [-n number] 文件
    
    • 1

    默认取前10行数据,可以指定取的行数。

    如果number是负数,则表示后面abs(number)行数据不列出来。

    tail [-n number] 文件
    
    • 1

    默认取后10行数据,可以指定取的行数。

    如果number是正数,则表示前面abs(number)行数据不列出来。

    组合利用两个命令可实现择取部分行数的数据出来显示:

    onceday@onceday:~/test$ nl -b a te.c|head -n 30|tail -n 10 #取21至30行的数据
        21	  char a;
        22	 int b;
        23	 char c;
        24	 };
        25	
        26	void test(void)
        27	{
        28		int *addr = 0x30;
        29		*addr = 0x15252;
        30	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    3.7 非纯文本文件OD

    使用该命令可直接输出二进制文件,属于GNU组件内容。

    od [-t type] 文件
    
    • 1

    类型字段由以下部分组成,可进行叠加:

    • a,利用默认的字符来输出
    • c,使用ASCII字符输出
    • d[size],利用十进制来输出数据,每个数占用size byte
    • f[size],利用浮点数格式输出数据,每个数占用size bytes
    • o[size],利用八进制输出数据,每个数占用size bytes
    • x[size],利用十六进制输出数据,每个数占用size bytes

    如以一个字节的十六进制数输出:

    od -t x1 文件
    
    • 1

    输出十六进制和ASCII对照表:

    onceday@onceday:~/test$ echo onceday |od -t xCc
    0000000  6f  6e  63  65  64  61  79  0a
              o   n   c   e   d   a   y  \n
    0000010
    
    • 1
    • 2
    • 3
    • 4

    可以使用设备相关的长度描述符,如:

    • C代表sizeof(char)
    • S代表sizeof(short)
    • I代表sizeof(int)
    • L代表sizeof(long)
    • F代表sizeof(float)
    • D代表sizeof(double)
    3.8 file查看文件类型
    file 文件
    
    • 1

    4.修改文件创建的时间(touch)

    修改时间(modification time,mtime):

    • 当文件的内容数据变更时,就会更新这个时间,内容数据指的是文件的内容,非文件的属性或权限。

    状态时间(status time,ctime):

    • 当文件的状态status改变时,就会更新这个时间,如权限和属性被修改,都会更新这个时间。

    读取时间(access time,atime):

    • 当文件内容被读取时,就会更新这个读取时间,如使用cat取读取/etc/man_db.conf,就会更新该文件的atime。

    默认情况下,ls文件显示的mtime,也就是这个文件的内容上次修改的时间。

    常用以下指令:

    touch 文件
    touch -c 文件 #在文件不存在时,不会建立新文件。
    
    • 1
    • 2

    这样会直接创建新文件,或者将旧文件的时间更新为目前时间。

    touch -t [[cc]YY]MMDDhhmm[.ss] 
    touch -a -t [[cc]YY]MMDDhhmm[.ss] 
    touch -m -t [[cc]YY]MMDDhhmm[.ss] 
    
    • 1
    • 2
    • 3

    指定时间进行修改,-a表示访问时间,-m更改修改时间。

    5.文件目录的权限和隐藏权限

    5.1 可使用umask设置建立和新建的文件的默认权限
    onceday@onceday:~/test$ umask -p
    umask 0002
    onceday@onceday:~/test$ umask -S
    u=rwx,g=rwx,o=rx
    
    • 1
    • 2
    • 3
    • 4

    可以看到,数字代表减去的权限,符号代表掩码,即其他用户写入权限被清除,其他权限保留。

    默认用户建立的文件没有可执行(x)权限

    -rw-rw-rw-
    
    • 1

    用户建立的目录,默认开发所有权限,(x)执行权限与进入目录有关,因此全开。

    drwxrwxr-x
    
    • 1
    5.2 文件隐藏属性(chattr/lsattr)

    文件隐藏属性在ext4等文件系统可较好支持,但xfs等文件系统支持有限,可使用man指令查看信息。

    常用形式如下:

    chattr [+-=] A  #存取文件时,不修改atime,降低IO使用
    chattr [+-=] a  #文件只能增加数据,不能删除和修改,root才能设置
    chattr [+-=] d  #避免dump备份
    chattr [+-=] i  #文件不能删除,改名,设置链接、无法写入、新增数据等,root可以设置
    chattr [+-=] S  #文件数据从内存同步写入磁盘
    
    • 1
    • 2
    • 3
    • 4
    • 5

    设置完这些属性,可以使用lsattr查看该属性:

    lsattr -a[R] 目录文件 #R表示递归显示
    
    • 1
    5.3 文件特殊权限SUID、SGID、SBIT

    1. SUID表示set UID,用于暂时获取owner的身份:

    • SUID仅对二进制程序有效
    • 执行者对该程序需要具有X的可执行权限
    • 本权限仅在执行程序的过程中有效(run-time)
    • 执行者将具有该程序拥有者(owner)的权限

    2. 典型的用途是在执行修改密码程序时,暂时获取root的权限。

    SGID表示set GID,用于暂时获取该程序或目录的用户组身份:

    用于二进制程序时:

    • SGID对于二进制程序有用
    • 程序执行者对于该程序来说,需要具备X的权限
    • 执行者在执行过程中将会获得该程序用户组的支持

    用于目录时:

    • 用户对于该目录具有r和x的权限时,该用户能够进入该目录
    • 用户在此目录下的有效用户组,将会变成该目录的用户组
    • 用户在此目录下具有w的权限,则用户所建立的新文件,该新文件的用户组与此目录的用户组相同

    3.SBIT(sticky Bit)目前只针对目录有效

    • 当用户对于此目录具有w、x权限,即具有写入权限
    • 当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件

    设置SUID、SGID、SBIT权限设置:

    chmod 4777 filename
    
    • 1

    数字放在最前面,4代表SUID,2代表SGID,1代表SBIT。

    chmod u=rwxs,go=x test
    chmod g+s,o+t test
    
    • 1
    • 2

    以上两个符号设置方式也支持。

    6.文件查找指令

    6.1 which查找脚本文件
    which [-a] command
    
    • 1

    -a会显示所有的入口

    6.2 查找文件

    快速查找whereis,只查找系统中特定目录下的内容。

    whereis -l #列出whereis会去查询的几个主要目录
    
    • 1

    只找出特殊格式的文件:

    whereis -b	xxx	#二进制文件
    whereis -m	xxx	#只找出在说明文件manual下的文件
    whereis -s	xxx	#只找出源文件
    whereis -u  xxx #非上面三种文件
    
    • 1
    • 2
    • 3
    • 4

    locate使用数据库来查找:

    locate -i  xxx  #忽略大小写
    locate -c  xxx  #只输出找到的文件数量
    locate -S       #输出数据库信息
    locate -r  xxx  #按正则表达式方式查找
    
    • 1
    • 2
    • 3
    • 4

    可使用updatedb更新locate数据库, locate指令可能未安装,因此需要手动安装。

    6.3 find查找文件

    该命令很复杂,可以man find查看具体信息。

    find xxx  
    
    • 1

    默认直接搜索当前目录。

    find [PATH] [-mtime n]
    find ~ -mtime +4
    
    • 1
    • 2
    • n,表示n天之前的一天之内被修改过内容的文件
    • +n,表示n天之前被修改过内容的文件
    • -n,表示n天之内被修改过内容的文件

    使用与使用者和用户者相关的信息查找:

    find [-uid/-gid] n  #账户和用户组ID,记录在/etc/passwd和/etc/group下
    find [-user/-group] name #名称
    find [-nouser/-nogroup]  #无用户信息和组信息的文件
    
    • 1
    • 2
    • 3

    使用文件权限相关信息查找:

    find -name filename
    find -size [+-]Size  #比Size大或者小的文件,c代表Bytes,k代表1KB...
    find -size +1k
    find -type TYPE  #查找某种类型的文件,如b为设备文件
    
    find -perm mode  #查找文件权限刚好等于mode的文件
    find -perm 4755  #文件权限-rwsr-xr-x
    find -perm -mode #查找文件权限必须囊括mode权限的文件
    find -perm /mode #查找文件权限包含任一mode的权限的文件find
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    找到某一个文件并执行一定操作:

    find xxx -exec cat {} \;
    
    • 1

    命令的范围即-exec\;之间,{}代表find的找到的内容。

  • 相关阅读:
    创建图形 | 零代码批量创建地理缓冲区图形
    在浏览器输入url到页面展示出来
    12.Ansible安装NFS案例
    从零开始,开发一个 Web Office 套件(16):拖动控制点,调整编辑器大小
    【QT】QtConcurrent的使用介绍,与std::thread的区别
    GBase8s数据库INTO EXTERNAL 子句
    操作系统:进程与线程(三)死锁
    linux写文件如何保证落盘?
    硫氢酸荧光素FITC标记巨噬细胞膜/细胞膜红色荧光探针PLGA纳米粒的应用与制备
    算法试题——每日一练
  • 原文地址:https://blog.csdn.net/Once_day/article/details/126284426