文件查找:在文件系统上查找符合条件的文件。
工具:locate——非实时查找(数据库查找,基于索引,索引需要维护,有间隔,所以有不一致的情况存在)。find——实时查找
locate:依赖于事先构建的索引:索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新数据库(updatedb);索引构建过程需要遍历整个根文件系统,及其消耗资源。
工作特定:查找速度快;模糊查找;非实时查找。
locate KEYWORD
find:实时查找工具,通过遍历指定路径下的文件系统完成文件查找。
工作特定:查找速度略慢;精确查找;实时查找。
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径:默认当前目录;
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件。
处理动作:对符合条件的文件做什么操作,默认输出至标准输出
查找条件:
根据文件名查找:
-name “文件名称” : 支持使用glob:*,?,[],[^],文件名区分大小写
-iname “文件名称”:不区分字母大小写
-regex “PATTERN”:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME :查找属主为指定用户的文件;
-group GROUPNAME :查找属组为指定用户的文件;
-uid UserID : 查找属主为指定UID的文件;
-gid GroupID : 查找属组为指定GID的文件;
-nouser : 查找没有属主的文件(即只有UID,没有用户名,用户被删除的情况);
-nogroup:查找没有属组的文件(即只有GID,没有用户组名,用户组被删除的情况);
根据文件类型查找:
-type TYPE:f,普通文件; d,目录文件; l,符号链接文件;s,套接字文件;b,块设备文件;c,字符设备文件;p,管道文件;
组合条件:
与:-a ; 或:-o ; 非:-not ;
根据文件大小来查找:
-size [+|-]#UNIT : 常用单位:k,M,G
#UNIT : (#-1,#] ; -#UNIT:[0,#-1] ; +#UNIT:(#,~)
根据时间戳查找:
以“天”为单位:
-atime [+|1]# :# , [#,#+1) ; +#, [#+1,~) ; -#, [0,#)
-mtime [+|1]# :
-ctime [+|1]# :
以“分钟”为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [+|-]MODE :
MODE:精确权限匹配;
+MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;centos7改为/MODE
-MODE:每一类对象都必须同时拥有为其指定的权限标准;
处理动作:
-print:默认动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令;
-delete:删除查找到的文件;(有危险的操作)
-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \;:对查找到的每个文件执行由COMMAND指定的命令,执行命令之前,会交互式要求用户确认;
-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND指定的命令,无确认;
{}:用于引用查找到的文件名称自身。
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,有些命令不能接受过多参数,此时命令执行可能失败;另一种方式可规避此问题:
find | xargs COMMAND
Linux文件系统上的特殊权限:SUID、SGID,Sticky
1、进程的安全上下文:进程有属主属组,文件有属主属组。
1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限;
2)启动为进程之后,其进程的属主为发起者;进程的属组为发起者的属组;
3)进程访问目标文件时的权限,取决于进程的发起者:
a、进程的发起者,同文件的属主,则应用文件属主权限;
b、进程的发起者,属于文件的属组,则应用文件属组权限;
c、否则应用文件“其他”权限
2、SUID
1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限;
2)启动为进程之后,其进程的属主为源文件的属主;
权限设定:chmod u+s FILE...、chmod u-s FILE...
3、SGID
默认情况下,用户创建文件时,其属组为此用户所属的基本组;一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录所属的组。
权限设定: chmod g+s DIR... 、 chmod g-s DIR...
4、Sticky
对于一个多人可写的目录,如果设置了Stick,则每个用户仅能删除自己的文件。
权限设定:chmod o+t DIR... 、 chmod o-t DIR...
/tmp、/var/tmp都具有此权限
SUID SGID STICKY:000~111,映射为一个八进制数字。
chmod 1777 /tmp/a.txt
几个权限位映射:
SUID:user,占据属主的执行权限位;s:属主拥有x权限;S:属主没有x权限
SGID:group,占据属组的执行权限位;s:属组拥有x权限;S:属组没有x权限
Sticky:other,占据other的执行权限位;t:other拥有x权限;T:other没有x权限
bash脚本编程:
选择执行:
if 判断条件; then
......
fi
if 判断条件;then
......
else
.......
fi
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "At least one args"
exit 1
fi
if id $1 &>/dev/null; then
echo "$1 exists"
else
useradd $1
[ $? -eq 0 ] && echo "$1" | passwd --stdin $1 &> /dev/null
fi
Linux磁盘管理:
I/O Ports:I/O设备地址
块设备:block,存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信;
设备号码:
主设备号:major number ,标识设备类型 ;
次设备号:minor number,标识同一类型设备下的不同设备;
硬盘接口类型:
并口: IDE:133MB/s SCSI: 640MB/s
串口: SATA: 6Gbps SAS: 6Gbps USB:480MB/s
rpm:rotation per minute,每分钟转速
/dev/DEV_FILE
磁盘设备的设备文件命名:
IDE: /dev/hd
SCSI,SATA,SAS,USB:/dev/sd
不同设备:a-z /dev/sda,/dev/sdb。。。
同一设备上的不同分区:1,2,3,。。。/dev/sda1,/dev/sdb2...
机械式硬盘:track,磁道;cylinder,柱面;sector,扇区,512bytes;
如何分区:按柱面
0磁道0扇区:MBR——Master Boot Record,共512字节,
446字节为boot loader
64字节存储分区表,每16字节标识一个分区,所以共4个分区
2字节为55AA,标识
4个主分区,3主分区+1扩展分区(N个逻辑分区)
UEFI,GPT
Linux分区管理工具: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
Centos5:使用partprobe /dev/DEVICE
Linux文件系统管理:
Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
swap:交换分区
光盘:iso9660
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
类比:这可以与在windows上的操作进行比较,用户空间管理工具,类似windows中的format带上文件系统格式参数,如fat32、ntfs等,内核模块就是format去调用的windows内核功能,然后对分区进行格式化。
Linux的虚拟文件系统:VFS
cat /proc/filesystems
lsmod
blkid /dev/sda1
创建文件系统:
mkfs命令:
mkfs.FS_TYPE /dev/DEVICE
ext4,xfs,btrfs,vfat...
mkfs -t FS_TYPE /dev/DEVICE
-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 #:数据空间每多少个字节创建一个inode,此大小不应该小于block的大小。
-N #:为数据空间创建多少个inode。
-m #:为管理人员预留的空间占据的百分比。
-O FEATURE[,...]:启用指定特性,-O ^FEATURE,关闭指定特性
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID:根据指定的UUID查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系统文件系统的LABEL
e2label DEVICE [LABEL]
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息
-L ‘LABEL’:修改卷标
-m #:修改预留给管理员的空间百分比
-j:将ext2升级为ext3
-O:文件系统属性启用或禁用
-o:调整文件系统的默认挂载选项
-U UUID:修改UUID号
dumpe2fs:
-h:查看超级块信息
mkswap:创建交换分区
mkswap [options] device
-L 'LABEL':卷标设置
前提:调整其分区ID为82
文件系统检测:
fsck:file system check
fsck.FS_TYPE
fsck -t FS_TYPE
-a : 自动修复错误
-r :交互式修复错误
注意:FS_TYPE一定要与分区上已有文件系统类型相同;
e2fsck:ext系列文件系统专用的检测修复工具
-y:自动回答为yes;
-f:强制修复;
命令小结:
locate KEYWORD
find [OPTION]... [查找路径] [查找条件] [处理动作]
find /etc -name "passwd"
find /etc -name "passwd*"
find /etc -name "passwd?"
find /etc -name "passwd???"
find -user tom
find -l /tmp -user root
find /tmp -user root
find -uid 501
find -nouser -ls
find -nouser
find -type s
find -type c
find -type f
find -type l
find -nouser -o -nogroup
find -nouser -o -nogroup -ls
find \(-nouser -o -nogroup\) -ls
find \( -nouser -o -nogroup \)
find \(-nouser -o -nogroup\) -ls
find -not -user root -ls
find -not -user root -ls -a
find -size 3k -ls
find -size 3k -lh
find -size 3k -ls
find -size 3k -exec ls -h
find -size 3k -exec 'ls -h'
find /var -user root -a -group
find /var -user root -group mail
find /usr -not -user root -a
find /usr -not -user root -a
find /usr -not -user root -a
find /usr -not -user root -a
find /usr -not \( -user root
find /etc -mtime -7 -a -not
find /etc -mtime -7 -a -not
find ./ -nouser -a -nogroup
find ./ -nouser -a -nogroup -a
find /etc -size +1M -type f
find /etc -not -perm +222
find /etc -not -perm +222 -ls
find /etc -not -perm -222
find /etc -not -perm -111
find /etc/init.d -perm -113
fdisk -l [-u] [device ...]
cat /proc/partations
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE
mkfs.FS_TYPE /dev/DEVICE
mkfs -t FS_TYPE /dev/DEVICE
mke2fs
blkid [OPTION]... [DEVICE]
e2label DEVICE [LABEL]
tune2fs
dumpe2fs
mkswap [options] device
fsck
e2fsck