作者:Jack xu
半导体知识分享第27期
技能升级,从这里开始
Linux文件与目录管理常用命令解析ΙΙ
1 linux中三种time(atime,mtime,ctime)
1.1Linux下一个文件也有三种时间属性
(1)访问时间(access time 简写为atime):
显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用(执行一些可执行文件或脚本)。
(2)修改时间(modify time 简写为mtime):
显示的是文件内容被修改的最后时间,比如用vi编辑时就会被改变(也就是Block的内容)。
(3)状态修改时间(change time 简写为ctime):
显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)。
1.2查看三种时间的方法
ls -l 获取文件最后一次内容修改的时间(modification time(mtime));
ls -lu 获取文件最后一次访问的时间(change time(ctime));
ls -lc 获取文件最后一次状态的改变时间(access time(atime))。
2修改文件时间或者创建新文件
绝对路径和相对路径在shell环境中经常遇到,各有用处。
2.1touch
touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
• 语法
• 选项
• 参数
文件:指定要设置时间属性的文件列表。
• 实例
使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:
首先,使用ls命令查看testfile文件的属性,如下所示:
执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:
使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:
3文件与目录的默认权限与隐藏权限
3.1umask
umask命令用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。
• 语法
• 选项
• 参数
权限掩码:指定权限掩码。
• 实例
利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消:
执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。
应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。
不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令umask u=, g=w, o=rwx,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。
也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。
可以使用下面的命令检查新创建文件的默认权限:
选项-s表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。
3.2chattr
chattr命令用来改变文件属性。这项指令可改变存放在ext2和ext3文件系统上的文件或目录属性,这些属性共有以下8种模式:
• 语法
• 选项
• 实例
用chattr命令防止系统中某个关键文件被修改:
然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
3.3 lsattr
lsattr命令用于查看文件的第二扩展文件系统属性。
• 语法
• 选项
lsattr经常使用的几个选项-D,-E,-R这三个选项不可以一起使用,它们是互斥的,经常使用的还有-l,-H,使用lsattr时,必须指出具体的设备名,用-l选项指出要显示设备的逻辑名称,否则要用-c,-s,-t等选项唯一的确定某个已存在的设备。
• 参数
文件:指定显示文件系统属性的文件名。
• 实例
3.3file
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
• 语法
• 选项
• 参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
• 实例
显示文件类型
显示符号链接的文件类型
4linux文件特殊权限(SUID、SGID、SBIT)
4.1Set UID
当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?主要是以下作用:
1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。
SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。
统中的用户密码是保存在/etc/shadow中的,其实有没有r权限不重要,因为我们的root用户是拥有最高的权限,什么都能干了。关键是要把密码写入到/etc/shadow中。我们知道,除了root用户能修改密码外,用户自己同样也能修改密码,为什么没有写入权限,还能修 改密码,就是因为这个SUID功能。
下面就是passwd这个命令的执行过程:
1、因为/usr/bin/passwd的权限对任何的用户都是可以执行的,所以系统中每个用户都可以执行此命令。
2、而/usr/bin/passwd这个文件的权限是属于root的。
3、当某个用户执行/usr/bin/passwd命令的时候,就拥有了root的权限了。
4、于是某个用户就可以借助root用户的权力,来修改了/etc/shadow文件了。
5、最后,把密码修改成功。
这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上也是无效的。
4.2Set GID
我们前面讲过,当s这个标志出现在文件所有者的x权限上时,则就被称为Set UID。那么把这个s放到文件的所属用户组x位置上的话,就是SGID。如开头的/usr/bin/wall命令。那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。这相SGID有几点需要我们注意:
1、SGID对二进制程序有用;
2、程序执行者对于该程序来说,需具备x的权限;
3、SGID主要用在目录上;
理解了SUID,我想SGID也很容易理解。如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。
4.3Sticky Bit
这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。
注:这个SBIT对文件不起作用。
4.4SUID/SGID/SBIT权限设置
可参考链接内容: 。
5命令与文件的查询
5.1which
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
• 语法
• 选项
• 参数
指令名:指令名列表。
• 实例
查找文件、显示命令路径:
说明:which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的PATH配置内容所找到的命令当然不一样的!
5.2whereis
whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
whereis命令用来定位指令的二进制程序、源代码文件和man 手册页等相关文件的路径。
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find 相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍locate 时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
• 语法
• 选项
• 参数
指令名:要查找的二进制程序、源文件和man手册页的指令名。
• 实例
将相关的文件都查找出来
说明:tomcat没安装,找不出来,svn安装找出了很多相关文件
只将二进制文件查找出来 。
说明:whereis -m svn查出说明文档路径,whereis -s svn找source源文件。
5.3 locate/socate
locate命令和slocate命令都用来查找文件或目录。
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb 命令,手动更新数据库。
• 语法
• 选项
• 参数
查找字符串:要查找的文件名中含有的字符串。
• 实例
搜索etc目录下所有以sh开头的文件:
搜索用户主目录下,所有以m开头的文件:
搜索用户主目录下,所有以m开头的文件,并且忽略大小写:
5.4find
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
• 语法
• 选项
• 参数
起始目录:查找文件的起始目录。
• 实例
(1) 根据文件或者正则表达式进行匹配
列出当前目录及子目录下所有文件和文件夹
在/home目录下查找以.txt结尾的文件名
同上,但忽略大小写
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
匹配文件路径或者文件
基于正则表达式匹配文件路径
同上,但忽略大小写
(2)否定参数
找出/home下不是以.txt结尾的文件
(%1) 根据文件类型进行搜索
类型参数列表:f 普通文件、l 符号连接、d 目录、c 字符设备、b 块设备、s 套接、p Fifo。
(%1) 基于目录深度搜索
向下最大深度限制为3
搜索出深度距离当前目录至少2个子目录的所有文件
(%1) 根据时间戳进行搜索
搜索最近七天内被访问过的所有文件
搜索超过七天内被访问过的所有文件
搜索访问时间超过10分钟的所有文件
找出比file.log修改时间更长的所有文件
(%1) 根据文件大小进行匹配
文件大小单元:b —— 块(512字节)、c —— 字节、w —— 字(2字节)、k —— 千字节、M —— 兆字节、G —— 吉字节、搜索大于10KB的文件。
搜索大于10KB的文件
搜索小于10KB的文件
搜索等于10KB的文件
(%1) 删除匹配文件
删除当前目录下所有.txt文件
(%1) 根据文件权限/所有权进行匹配
当前目录下搜索出权限为777的文件
找出当前目录下权限不是644的php 文件
找出当前目录用户tom拥有的所有文件
找出当前目录用户组sunk拥有的所有文件
(%1) 借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
将30天前的.log文件移动到old目录中
找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
(%1) 搜索但跳出指定的目录
查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
(%1) 其他技巧
要列出所有长度为零的文件
5.5hexdump
hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。
• 语法
• 选项
每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似print的格式字符串,如:
还有一些特殊的用法:
同一行如果要显示多个格式字符串,则可以跟多个-e选项。
• 实例
往期回顾
1.每日学习:数字IC设计前后端学习资料推荐与下载
2.每日学习:Linux文件与目录管理常用命令解析
3.每日学习:在布局布线后对版图进行DRC有何意义呢?
4.每日学习:Linux改变文件属性与权限常用的三个命令
5.每日学习:机器学习在IC设计中的应用(一)--利用率可达99%的神技--Placement及Relative Placement
6.每日学习:机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA
7.每日学习:机器学习在IC设计中的应用(四)-- 预测DRC
8.每日学习:数字IC设计EDA软件教程整理
9.每日学习:Linux的起源、发展和一些学习体会
10.每日学习:记忆深处有尘埃——Memory Compiler
特别鸣谢摩尔精英的支持