RHCE7认证学习笔记:访问文件系统
1、查看分区和设备文件
/dev路径下面保存了系统的设备文件
查看系统已经挂载分区:
(1)
[root@linuxidc ~]# cat /proc/partitions
major minor #blocks name
2 0 4 fd0
8 0 20971520 sda
8 1 512000 sda1
8 2 20458496 sda2
11 0 3655680 sr0
253 0 18358272 dm-0
253 1 2097152 dm-1
(2)
[root@linuxidc ~]# df -hTP
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 18G 3.1G 15G 18% /
devtmpfs devtmpfs 485M 0 485M 0% /dev
tmpfs tmpfs 494M 80K 494M 1% /dev/shm
tmpfs tmpfs 494M 7.1M 487M 2% /run
tmpfs tmpfs 494M 0 494M 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 119M 379M 24% /boot
查看文件系统的UUID,UUID标记的是文件系统,而非分区,使用UUID标记的好处是在分区发生错位的情况下,比如sda5,sda6,sda7:如果sda5被删除了,则sda6变成sda6,sda7变成sda6,那么在文件/etc/fstab挂载中,如果还是写sda6,sda7,则挂载会出现问题;所以最好再fstab里面挂载时写UUID
[root@linuxidc ~]# blkid
/dev/sda1: UUID="64d32c15-8708-44a2-893a-a437c0f43156" TYPE="xfs"
/dev/sda2: UUID="4Ice1U-52dB-jxhY-80pW-vWus-rv1n-MVBJQ5" TYPE="LVM2_member"
/dev/sr0: UUID="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUID="6e18526c-e4fa-4854-adcd-d2e463a53bf9" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="b4476c9f-7681-48d8-8cba-3904f4ebce61" TYPE="swap"
2、挂载文件系统
查看文件夹大小,而不是内容:
[root@linuxidc ~]# ls -ld /boot/
dr-xr-xr-x. 3 root root 4096 Dec 26 15:33 /boot/
查看文件夹内容的大小使用du命令:
[root@linuxidc ~]# du -h /boot/
0/boot/grub2/themes/system
0/boot/grub2/themes
2.4M/boot/grub2/i386-pc
3.3M/boot/grub2/locale
2.5M/boot/grub2/fonts
8.1M/boot/grub2
94M/boot/
[root@linuxidc ~]# du -hs /boot/
94M/boot/
使用mount命令挂载文件系统:
常用选项:
-o: 选项1,选项2... 文件系统 挂载点
ro:只读选项;
remount:重新挂载
[root@linuxidc ~]# mount /dev/cdrom /iso/
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxidc ~]# mount UUID="2014-05-07-03-58-46-00" /iso/
当挂载点挂载一个文件系统的时候,那么挂载点里面原有的东西都会被隐藏;
卸载文件系统:umount ;
卸载文件系统的时候,如果文件系统被某个进程占用,则卸载会提示系统繁忙,无法卸载:
[root@linuxidc iso]# umount /iso/
umount: /iso: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
这时候使用fuser命令,查看占用的进程,然后kill命令杀死,再卸载即可:
[root@linuxidc iso]# fuser -mv /iso/
USER PID ACCESS COMMAND
/iso: root kernel mount /iso
root 6256 ..c.. bash
[root@linuxidc ~]# kill -9 6256
输入mount命令可以查看所有的挂载选项:
3、开机自动挂载文件系统
编辑/etc/fstab文件,编辑开机自动挂载文件系统:
9 /dev/mapper/rhel-root / xfs defaults 1 1
10 UUID=64d32c15-8708-44a2-893a-a437c0f43156 /boot xfs defaults 1 2
11 /dev/mapper/rhel-swap swap swap defaults 0 0
文件系统 挂载点 文件系统 挂载选项 dump fsck检查(一般写0)
配置完成fstab后,使用mount -a 命令挂载文件系统;
4、文件的软硬链接
分区的每个block默认大小是4K,一个block只能存储一个文件;inode相当于分区的索引,记录了文件的属性信息;
硬链接,文件的inode相同,实质上指的是相同的文件,相当于一个文件两个名称,修改其中的一个文件,另一个也会改变,删除其中一个文件,不会影响另一个文件:
1234 [root@linuxidc tmp]# touch aa
[root@linuxidc tmp]# ln aa bb
[root@linuxidc tmp]# ls -i aa bb
102819918 aa 102819918 bb
inode只能记录本分区的block信息,硬链接不能跨分区
创建一个文件夹,默认就会有2个硬链接,一个是文件夹本身,另一个是文件夹的".":, “..” 返回上一层目录也是一个硬链接:
”[root@linuxidc tmp]# mkdir aa
[root@linuxidc tmp]# ls -ld aa/
drwxr-xr-x. 2 root root 6 Jan 14 16:32 aa/
5、文件查找
whereis + 文件
which + 命令
locate:利用数据库来根据名字查询文件,查询速度很快,但是数据库一周更新一次;可以使用updatedb命令手工更新数据库:
find: find + 目录+属性+值
属性值:
1、name;
2、size;
3、user group;
4、uid,gid;
5、perm;查找权限 222完全匹配,-222至ugo分别少要含有相对应的权限222,+222,/222或关系,ugo分别只要满足其中一个权限即可
6、type;
7、ctime/cminu;
8、newer;
find查找出来的内容要执行命令,则按照以下两种方式操作:
[root@linuxidc tmp]# find -name "*" | xargs ls -l
[root@linuxidc tmp]# find -ctime +1 -exec ls -l {} \;
6、find命令参数详解
SYNOPSIS语法格式
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
选项:
-P:不查找链接文件内容,这是默认选项;
-L:查找链接文件内容,如果文件时链接文件,那么加入这个选项,命令将会查看链接所指的文件的内容:
例如,2个链接文件,一个指向文件,一个指向目录:
[root@linuxidc tmp]# ll bb cc
lrwxrwxrwx. 1 root root 12 Jan 15 14:59 bb -> /root/passwd
lrwxrwxrwx. 1 root root 5 Jan 15 15:11 cc -> /root
不加-L选项时,查找bb和cc文件:
[root@linuxidc tmp]# find bb cc -type f 没有结果
加入-L选项,将会查找链接文件指向的真正内容:
[root@linuxidc tmp]# find -L bb cc -type f
-H:这个选项和-L选项类似,不同的区别是,假如查找的链接文件是坏链接,则将会显示链接文件的信息;
-follow:这个选项后面的链接文件也会被指向其链接的真正文件;
-D: 诊断信息
诊断选项:
help Explain the debugging options
tree Show the expression tree in its original and optimised form.
stat Print messages as files are examined with the stat and lstat system calls. The find program tries to min?imise such calls.
opt Prints diagnostic information relating to the optimisation of the expression tree; see the -O option.
rates Prints a summary indicating how often each predicate succeeded or failed.
-Olevel;优化层级
0:
1:默认层级
2:
3:
表达式expression由三个部分组成,由运算符分隔开:
选项option,所有选项返回true值:
常用选项
-d,-depth:处理目录的内容的层级
-maxdepth:处理目录的最大层级;
-noleaf:针对于CD-ROM,MS-DOS,AFS等不符合unix文件系统规范的文件;
测试tests:
-ctime;
-atime:
-perm:
-iname:
-path
-mmin:
-mtime:
-newer:
-name
-size:文件大小
-type:文件类型:b,c,d,f,l,p,s,d
-uid:
-gid:
操作actions:
-delete:
-exec command: 执行多个命令,直到遇到带;的命令
-exec comand {} \; :
-execdir command:
-execdir comand {} \; :只执行查找的文件的当前目录
-fprint:
-prune:修剪,只显示文件所所指向的目录:
find的运算符:
(expr):
!:非
not:
expr1 expr2:并且
expr1 -a expr:并且
expr1 -and expr2:并且
expr1 -o expr2:或者
expr1 -or expr2:或者
三种标准格式:POSIX,GNU,BSD
环境变量:
LANG:
LC_ALL:
PATH:
POSIXLY_CORRECT: 设置了这个环境变量,那么 -perm +zzz这样的模式会出错
Determines the block size used by -ls and -fls. If POSIXLY_CORRECT is set, blocks are units of 512 bytes. Other‐
wise they are units of 1024 bytes.
When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a valid symbolic mode.
When POSIXLY_CORRECT is set, such constructs are treated as an error.
常见使用例子:
找到文件名为core的文件,并删除:
find /tmp -name core -type f -print | xargs /bin/rm -f
如果文件或目录含有单引号、双引号、换行符,以下的find也能找到:
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
找到当前目录下面的文件,并执行file命令:
find . -type f -exec file '{}' \;
或:find . -type f -exec file {} \;
遍历跟目录,查找setuid的文件和目录并保存到/root/suid.txt,查找大于100M的文件并保存到/root/big.txt,%#m=文件权限前面加特殊标记位,%u =UID,%p=文件名称,%s=文件大小:
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) \
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
查找家目录下面在最近24小时内修改的文件:
find $HOME -mtime 0
寻找sbin目录下面可执行但是不可读的文件,!是非的意思,使用转义字符\进行转义:
find /sbin /usr/sbin -executable \! -readable -print
精确匹配:
find . -perm 664
find . -perm -664 至少包含644权限
find . -perm /222 ugo的权限位只要满足一个条件即可
find . -perm /220
find . -perm /u+w,g+w
find . -perm /u=w,g=w
find . -perm -444 -perm /222 ! -perm /111
find . -perm -a+r -perm /a+w ! -perm /a+x
find repo/ -exec test -d {}/.svn \; -or \
-exec test -d {}/.git \; -or -exec test -d {}/CVS \; \
-print -prune