文件查找
? 在文件系统上查找符合条件的文件
? 文件查找:locate,find
? locate 非实时查找 find 实时查找
? locate:依赖于事先构建的索引;索引的构建是在系统较为空闲时自动自行(周期性任务);也可以手动更新数据库(updatedb)
? 索引的构建过程需要遍历整个根文件系统,非常消耗资源
? 工作特点:查找速度快;模糊查找;非实时查找
? locate KEYWORD
? find:实时查找工具,通过遍历指定路径下的文件系统完成文件查找
? 工作特点:查找速度略慢;精确查找;实时查找
? 语法:
? find [OPTION]… [查找路径] [查找条件] [处理动作]
? 查找路径:指定具体目标路径,默认为当前目录
? 查找条件:指定查找标准,可以是文件名、大小、类型、权限等标准进行,默认找出指定路径下的所有文件
? 处理动作:对符合条件的文件做什么操作,默认输出至屏幕
? 1、查找条件
(1)根据文件名查找
-name "文件名称" 支持使用glob
-iname "文件名称" 不区分大小写
-regex "PATTERN" 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
[root@localhost mnt]
[root@localhost mnt]
/etc/passwd
(2)根据属主、属组查找
-user USERNAME 查找属主为指定用户的文件
-group GROUPNAME 查找属组为指定组的文件
-uid UserID 查找属主为指定的UID的文件
-gid GroupID 查找属组为指定GID号的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
(3)根据文件类型查找
-type TYPE
f: 普通文件
d: 目录文件
l: 符号链接文
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
(4)组合条件
与:-a
或:-o
非:-not, !
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
例:找出/tmp目录下,属主不是root,且文件名不是fstab的文件
find /tmp \(-not -user root -a -not -name 'fstab' \) -ls
find /tmp -not \( -user root -o -name 'fstab' \) -ls
例:找出/tmp目录下没有属主或没有属组的文件
[root@localhost tmp]
(5)根据文件大小来查找
-size [+|-]
常用单位:k,M,G
-
+
[root@localhost tmp]
(6)根据时间戳
以“天”为单位;
-atime [+|-]
+
-
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
(7)根据权限查找
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;
-MODE:每一类对象都必须同时拥有为其指定的权限标准;
find /etc -perm /060 -ls 文件属组有读或者写的权限即可
find /etc -perm -644 -ls 文件的属主有读写权限,属组和其它有读权限
2、处理动作
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls-l”命令;
-delete:删除查找到的文件
-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认;
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
例:
[root@localhost tmp]
[root@localhost tmp]
练习:
1、查找/var目录下属主为root,且属组为mail的所有文件或目录
find /var \( -user root -a -group mail \) -ls
2、查找/usr目录下不属于root、bin或hadoop的所有文件或目录
find /usr -not \( -user root -o -user bin -o -user hadoop \)
3、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录
find /etc -atime -7 -a -user root -a -user hadoop
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录
find / -nouser -a -nogroup -a -atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -size +1M -a -type f
6、查找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm /222
7、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc -not -perm -111
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
find /etc/init.d -perm -113
Linux文件系统上的特殊权限
SUID、SGID、Sticky
1、权限 r,w,x
2、安全上下文
? 前提:进程有属主和属组,文件有属主和属组
? (1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否具有执行权限
? (2)启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
? (3)进程访问文件时的权限,取决于进程的发起者
? (a)进程的发起者,同文件的属主,则应用文件属主权限
? (b)进程的发起者,属于文件的属组,则应用文件属组权限
? (c)应用文件 other 权限
3、SUID
? (1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
? (2) 启动为进程之后,其进程的属主为原程序文件的属主
? 权限设定: chmod u+s FILE… chmod u-s FILE…
4、SGID
? 默认情况下,用户创建文件时,其属组为此用户所属的基本组; ? 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;
? 权限设定: chmod g+s DIR… chmod g-s DIR…
[root@localhost mnt]
[root@localhost mnt]
[root@localhost text]
[root@localhost text]
-rw-r--r--. 1 root root 0 Aug 31 19:36 r1.txt
[root@localhost text]
[root@localhost text]
[root@localhost text]
-rw-r--r--. 1 root gp1 0 Aug 31 19:43 r2.txt
注:一个用户能不能删除一个文件,并不取决于这个文件它有无写权限,而是这个文件所在的目录是否具有写权限
[c2@localhost ~]$ ll /mnt/text/
total 0
-rw-rw-r--. 1 c1 c1 0 Aug 31 19:36 c1.t1
-rw-rw-r--. 1 c1 gp1 0 Aug 31 19:39 c1.t2
-rw-rw-r--. 1 c2 c2 0 Aug 31 19:37 c2.t1
-rw-rw-r--. 1 c2 gp1 0 Aug 31 19:40 c2.t2
[c2@localhost ~]$ rm -rf /mnt/text/c1.t1
[c2@localhost ~]$ ll /mnt/text/
total 0
-rw-rw-r--. 1 c1 gp1 0 Aug 31 19:39 c1.t2
-rw-rw-r--. 1 c2 c2 0 Aug 31 19:37 c2.t1
-rw-rw-r--. 1 c2 gp1 0 Aug 31 19:40 c2.t2
5、Sticky
? 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件
? 权限设定: chmod o+t DIR… chmod o-t DIR…
? /tmp、/var/tmp 在 /tmp 目录下,每个用户均能够进行相关操作,具有Sticky权限后,用户只能够对自己所创建的文件进行删除操作
[root@localhost ~]
drwxrwxrwt. 40 root root 8192 Aug 31 16:49 /tmp
drwxrwxrwt. 51 root root 8192 Aug 31 16:49 /var/tmp
6、几个权限位的映射
? chmod 7777 DIR|FILE 最左侧为特殊权限的授予,数字含义类似于普通权限
SUID: user, 占据属主的执行权限位;
s: 属主拥有x权限
S:属主没有x权限
SGID: group, 占据group的执行权限位;
s: group拥有x权限
S:group没有x权限
Sticky: other, 占据ohter的执行权限位;
t: other拥有x权限
T:other没有x权限
Bash 脚本编程
? 过程式编程语言:顺序执行,选择执行,循环执行
? 选择执行:
? if 判断条件; then
? 条件为真的分支代码
? fi
? if 判断条件; then
? 条件为真的分支代码
? else
? 条件为假的分支代码
? fi
例:
#!/bin/bash
if [ $# -lt 1 ]; then
echo "At least one argument."
exit 1
fi
if id $1 &> /dev/null; then
echo "$1 exists."
exit 0
else
useradd $1
[ $? -eq 0 ] && echo "$1" | passwd --stdin $1 &> /dev/null
fi
Linux磁盘管理
? 块设备:block,存取单位“块”,磁盘 ? 字符设备:char,存取单位“字符”,键盘
? 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信;
? 设备号码: ? 主设备号:major number, 标识设备类型 ? 次设备号:minor number, 标识同一类型下的不同设备
? 硬盘接口类型: ? 并行: ? IDE:133MB/s ? SCSI:640MB/s ? 串口: ? SATA:6Gbps ? SAS:6Gbps ? USB:480MB/s
? /dev/DEV_FILE ? 磁盘设备的设备文件命名:
? IDE: /dev/hd ? SCSI, SATA, SAS, USB: /dev/sd ? 不同设备:a-z ? /dev/sda, /dev/sdb, … ? 同一设备上的不同分区:1,2, … ? /dev/sda1, /dev/sda5
? 机械式硬盘: ? track:磁道 ? cylinder: 柱面 ? secotr: 扇区 ? 512bytes
? 如何分区: ? 按柱面
? 0磁道0扇区:512bytes ? MBR: Master Boot Record ? 446bytes: boot loader ? 64bytes:分区表 ? 16bytes: 标识一个分区 ? 2bytes: 55AA
? 4个主分区; ? 3主分区+1扩展(N个逻辑分区) ? 逻辑分区
? 问题:UEFI, GPT?
分区管理工具:fdisk, parted, sfdisk fdisk:对于一块硬盘来讲,最多只能管理15分区;
fdisk -l [-u] [device…]
fdisk device
? 子命令:管理功能 ? p: print, 显示已有分区; ? n: new, 创建 ? d: delete, 删除 ? w: write, 写入磁盘并退出 ? q: quit, 放弃更新并退出 ? m: 获取帮助 ? l: 列表所分区id ? t: 调整分区id
? 查看内核是否已经识别新的分区:cat /proc/partations
? 通知内核重新读取硬盘分区表: ? partx -a /dev/DEVICE ? -n M:N // 从那个分区开始到那个分区结束
? kpartx -a /dev/DEVICE ? -f: force
? CentOS 5: 使用partprobe ? partprobe [/dev/DEVICE]
Linux文件系统管理
? Linux中的文件系统:ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap ? swap:交换分区 ? Windows:fat32,ntfs ? Unix:FFS,UFS,JFS2 ? 网络文件系统:NFS,CIFS ? 集群文件系统:GFS2,OCFS2 ? 分布式文件系统:ceph,moosefs,mogilefs,GlusterFS,Lustre
? 根据其是否支持"journal"功能: ? 日志型文件系统: ext3, ext4, xfs, … ? 非日志型文件系统: ext2, vfat
? 文件系统的组成部分: ? 内核中的模块:ext4, xfs, vfat ? 用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat
? Linux的虚拟文件系统:VFS
1、创建文件系统: mkfs 命令:
(1)
FS_type:ext4、xfs、btrfs、vfat
(2)
-L 'LABEL':设定卷标 //可通过卷标来调用分区
? mke2fs:ext 系列文件系统专用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096} // 指明块大小,指明后不可修改
-L 'LABEL'
-j: 相当于 -t ext3 // 打开日志功能
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i
-N
-m
-O FEATURE[,...]:启用指定特性
-O ^FEATURE:关闭指定特性
? mkswap:创建交换分区 ? mkswap [options] device ? -L ‘LABEL’ ? 前提:调整其分区的 ID 为82
2、其它常用工具
? blkid:块设备属性信息查看 ? blkid [OPTION]… [DEVICE] ? -U UUID: 根据指定的UUID来查找对应的设备 ? -L LABEL:根据指定的LABEL来查找对应的设备 ? UUID:UUID 意即通用唯一识别码Universally Unique Identifier,它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件
? e2label:管理 ext 系列文件系统的 LABEL ? # e2label DEVICE [LABEL]
? tune2fs:重新设定ext系列文件系统可调整参数的值 ? -l:查看指定文件系统超级块信息;super block ? -L ‘LABEL’:修改卷标 ? -m #:修预留给管理员的空间百分比 ? -j: 将ext2升级为ext3 ? -O: 文件系统属性启用或禁用 ? -o: 调整文件系统的默认挂载选项 ? -U UUID: 修改UUID号
? dumpe2fs ? -h:查看超级块信息
3、文件系统检测
? fsck: File System CheCk ? fsck.FS_TYPE ? fsck -t FS_TYPE ? -a: 自动修复错误 ? -r: 交互式修复错误 note:FS_Type 一定要与分区上已有的文件类型相同
? e2fsck:ext 系列文件专用的检测修复工具 ? -y:自动回答为 yes ? -f:强制修复
|