04 文件内容查阅与文件属性
1. 查阅文件内容⚓
命令:
- nl:输出时显示行号。默认不列出空行的行号,与cat相反。
- less:可以向前翻页,man调用此命令显示
- od:以二进制的方式读取文件内容
- head:行数为负数时,列出
总行数-行数
的前几行
比如,有一个文件是100行,head -n -60 file 会显示前40行。
- tail:行数为正数+N(比如+25)时,列出第N行(包括第N行)以后的行
比如,有一个文件是100行,tail -n +60 file 会显示60行开始以后的行。
假设/etc/man_db.conf
有100行,截取第31~55行之间的内容:
[shark@linux ~]$ cat -n /etc/man_db.conf | head -n -45 | tail -n +31
# 或者
[shark@linux ~]$ cat -n /etc/man_db.conf | head -55 | tail -32
2. 文件状态⚓
stat [OPTION]... FILE...
Display file or file system status.
-f, --file-system display file system status instead of file status
[root@centos7 ~]# stat ttt
File: ‘ttt’
Size: 2 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 8409185 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-11 23:05:46.388101352 +0800
Modify: 2020-04-11 23:05:46.388101352 +0800
Change: 2020-04-11 23:05:46.388101352 +0800
Birth: -
3. 文件时间⚓
- modification time(mtime): 当该文件的内容变更时,就会更新这个时间。
ls
默认显示此时间。 - change time(ctime): 当该文件的状态改变时,就会更新这个时间。比如权限、属性、大小被更改了,都会更新这个时间。
ls -cl
- access time(atime): 当该文件的内容被取用时,就会更新这个读取时间 。 举例来说,我们使用 cat 去读取 /etc/man_db.conf,就会更新该文件的 atime 了 。
ls -ul
# 实际上默认显示的就是mtime,--time的参数中没有该选项
[shark@linux ~]$ ll root_data ; ll --time=atime root_data ; ll --time=ctime root_data
-rw-------. 1 root root 0 Aug 1 16:52 root_data
-rw-------. 1 root root 0 Aug 1 16:53 root_data
-rw-------. 1 root root 0 Aug 7 11:31 root_data
3.1 touch命令修改文件时间⚓
touch [OPTION]... FILE...
Update the access and modification times of each FILE to the current time.
-a change only the access time
-c, --no-create do not create any files
-d, --date=STRING parse STRING and use it instead of current time
-m change only the modification time
-r, --reference=FILE use this file's times instead of current time
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time
4. 文件/目录隐藏属性⚓
4.1 chattr
改变文件/目录隐藏属性⚓
需要看文件系统(xfs、ext4等)是否支持这些属性。
chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
4.2 lsattr
显示文件/目录隐藏属性⚓
lsattr [ -RVadv ] [ files... ]
选项类似与ls
。
$ chattr +i upgrade-nodes.yml.bak
$ rm upgrade-nodes.yml.bak
rm: remove regular file ‘upgrade-nodes.yml.bak’? y
rm: cannot remove ‘upgrade-nodes.yml.bak’: Operation not permitted
$ mv upgrade-nodes.yml.bak goaway
mv: cannot move ‘upgrade-nodes.yml.bak’ to ‘goaway’: Operation not permitted
$ lsattr upgrade-nodes.yml.bak
----i----------- upgrade-nodes.yml.bak
$ chattr -i upgrade-nodes.yml.bak
5. 寻找文件⚓
5.1 whereis⚓
whereis [options] file
Options:
-b search only for binaries
-B <dirs> define binaries lookup path
-m search only for manuals
-M <dirs> define man lookup path
-s search only for sources
-S <dirs> define sources lookup path
-f terminate <dirs> argument list
-u search for unusual entries,查找不在-b、-m、-s中的文件
-l output effective lookup paths
主要查找二进制文件和man手册文件。
5.2 locate⚓
locate [OPTION]... [PATTERN]...
Search for entries in a mlocate database.
-A, --all only print entries that match all patterns
-b, --basename match only the base name of path names。即查询只有文件名包含PATTERN的文件
-c, --count only print number of found entries
-d, --database DBPATH use DBPATH instead of default database (which is
/var/lib/mlocate/mlocate.db)
-e, --existing only print entries for currently existing files
-L, --follow follow trailing symbolic links when checking file
existence (default)
-i, --ignore-case ignore case distinctions when matching patterns
-l, --limit, -n LIMIT limit output (or counting) to LIMIT entries
-P, --nofollow, -H don't follow trailing symbolic links when checking file
existence
-0, --null separate entries with NUL on output
-S, --statistics don't search for entries, print statistics about each
used database
-q, --quiet report no error messages about reading databases
-r, --regexp REGEXP search for basic regexp REGEXP instead of patterns
--regex patterns are extended regexps
-w, --wholename match whole path name (default)
CentOS 7.x 是每天更新数据库一次,使用updatedb
手动更新。
5.3 find⚓
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
默认路径是当前目录;默认 expression 是 -print;
expression 有以下四种: operators(操作符), options, tests, and actions:
operators (优先级是递减;没有指定的话就是 -and ):
括号:( EXPR )
非:! EXPR -not EXPR
与:EXPR1 -a EXPR2 EXPR1 -and EXPR2
或:EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
positional options (always true): -daystart -follow -regextype
normal options (always true, specified before other expressions):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race
tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
-cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
-ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N
-mtime N (N:在N天之前的一天之内被改动过的文件;+N:在N天之前(不包含N天本身)被改动过的文件;-N:在N天之内(包含N天本身)被改动过的文件)
-name PATTERN
-newer FILE (列出比 FILE 还要新的文件文件名)
-nouser -nogroup -path PATTERN
-perm [-/]MODE (-MODE:查找权限包含该MODE的文件;/MODE:查找含有该MODE任意权限的文件。MODE只能是数字表示法)
-regex PATTERN
-readable -writable -executable
-wholename PATTERN -size N[bcwkMG] -true
-type [bcdpflsD] (一般正规文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s) ,及 FIFO(p))
-uid N
-used N -user NAME -xtype [bcdpfls]
-context CONTEXT
actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;
# 列出当前文件夹下的今天改动的文件
$ find . -mtime 0
$ find . -mtime -1
# 查找包含SUID、SGID、SBIT权限的文件
$ find . -perm /7000