1、文本编辑工具vim的使用方法总结
2、文件查找命令find的使用方法总结
find命令用法详解:
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
查找条件:
根据文件名进行查找:
-name "文件名称",字串内可用通配符 如*, ?, []等
-iname "文件名称":不区分字符大小写,支持使用通配符;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME: 查找属主为指定用户的文件;
-group GROUPNAME: 查找指定属组的文件
-uid UserID: 查找指定uid的文件;
-gid GroupID: 查找指定gid的文件
-nouser: 查找没有属主的文件;
-nogroup:查找没有属组的文件;
根据文件类型进行查找:
-type TYPE :f: 普通文件\\d: 目录\\l: 符号链接\\b: 块设备\\c: 字符设备\\p: 命名管道\\s: 套接字
多个条件组合查找:
与条件:-a :连接两个不同的条件(两个条件必须同时满足)
或条件:-o :连接两个不同的条件(两个条件满足其一即可)
非条件:-not, ! : 对条件取反的
以下两个范例需要注意 1、!A -o !B = !(A -a B) 2、!A -a !B = !(A -o B)
根据文件大小来查找:
-size [+|-]数字和单位 单位:k, M, G;-size [+|-]3M
3M=(3-1,3]:表示文件大小大于等于3M且小于4M
+3M=(3,+oo):表示文件大于3
-3M=[0,3-1]:表示文件大于0且小于3
根据时间戳来查找:
以“天”为单位
-atime [+|-]#:按照文件被访问的天数来查找,+-=同上面文件大小的意义
-mtime:按照文件被更改的天数来查找
-ctime:按照文件被创建的天数来查找
以“分钟”为单位
-amin\-mmin\-cmin:表述同以天为单位
根据权限来查找:
-perm [/|-]MODE
MODE: 精确权限匹配,0表示任何权限都可,:222
/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件:/222
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件:-222
当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。
例:find \(�Cname ’tmp’ �Cxtype c -user ’inin’ \)
处理动作:
- print: 默认处理动作
-ls:类似于对查找到的每个文件做"ls -l"的操作;
-delete: 删除查找到的文件;
-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;
-ok COMMAND {} \;执行相应的shell,{}代表查找的结果集,对每个文件执行指定的命令之前需要用户事先确认;
-exec COMMAND {} \;无需用户确认;
3、bash环境变量相关内容总结
bash配置文件按照生效范围划分,存在两类:
全局配置:
/etc/profile, /etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
按功能划分,存在两类:
profile类:为交互式登录的shell提供配置
/etc/profile, /etc/profile.d/*.sh
~/.bash_profile
功用:
(1) 定义环境变量,例如PATH、PS1
(2) 运行命令或脚本
bashrc类:为非交互式登录shell提供配置
/etc/bashrc
~/.bashrc
功用:
(1) 定义命令别名;
(2) 定义本地变量;
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
位置变量:$1, $2
特殊变量:$?
变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
自定义变量:
变量赋值:变量名=值
bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
定义本地变量:
name=value
查看:set
定义环境变量:
export name=value
declare -x name=value
查看:env, printenv, export
撤消变量:unset name
引用变量:${name}, $name
bash中的引用符号:
' ': 强引用,变量替换不会发生
" ":弱引用
``: 命令引用
shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su -l Username命令实现的用户切换;
非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
su Username;
配置文件作用次序:
交互式登录:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置如何生效?
(1) 重新登录;
(2) 让当前shell进程去重新读取指定的配置文件;
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
注意:副作用,多条记录
4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;
进程的安全上下文规则:
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3) 进程拥的访问权限,取决其属主的访问权限:
(a) 进程的属主,同文件属主,则应用文件属主权限;
(b) 进程的属主,属于文件的属组,则应用文件属组权限;
(c) 则应用其它权限;
SUID:
(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;
(2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
权限设定:
chmod u+s FILE... 添加
chmod u-s FILE... 删除
s: 属主原本拥有x权限;
S: 属主原本无x权限;
SGID:
默认情况下,用户创建文件时,其属级为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
权限设定:sS描述同SUID
chmod g+s FILE... 添加
chmod g-s FILE... 删除
Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
权限设定
chmod o+t FILE...
chmod o-t FILE...
SUID, SGID, STICKY数字表示为(4,2,1)添加在用户权限前
chmod 4777 = SGID+用户组other的(rwx)
chmod 3755 = SGID+STICKY+用户(rwx)+组(r-x)+other(r-x)
5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;
磁盘管理工具:
分区工具:fdisk, parted, sfdisk
fdisk工具的使用:最多支持在一块硬盘上的15个分区;
分区管理子命令:
p: 显示/n: 创建/d: 删除/t: 修改分区ID/l: 列出所有支持ID类型/w: 保存退出/q: 放弃修改并退出/m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
# cat /proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS 5: partprobe [DEVICE]-老版本不需要考虑了
CentOS 6,7: partx/kpartx
partx命令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
kpartx命令:
kpartx -af DEVICE
Linux文件系统相关知识
文件系统:VFS:Virtual File System
Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
光盘:iso9660
Windows: fat32(vfat), ntfs
Unix: ffs, ufs, jfs, jfs2
网络文件系统:nfs, cifs
集群文件系统:ocfs2, gfs2
分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs
(1) 日志型文件系统
非日志型文件系统:ext2
日志型文件系统:ext3
(2) swap:交换分区
创建文件系统:在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件:
内核中:支持此种文件系统
用户空间:有文件系统管理工具
创建工具:mkfs (make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
ext系列文件系统的专用管理工具:
mke2fs -t {ext2|ext3|ext4} DEVICE
-b BLOCK(块大小): 1024, 2048, 4096
-L 'LABEL': 设定卷标
blkid命令:
blkid DEVICE
LABEL, UUID, TYPE
Linux文件系统管理:
mkfs, mkfs -t type = mkfs.type
ext:mke2fs
创建文件系统:
mke2fs [OPTION]... DEVICE
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: mke2fs -t ext3
-m #: 预留磁盘空间占据多大百分比的空间为后期管理使用;
-O FEATURE[,...]
-O ^FEATURE:关闭此特性
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
:%s/^[[:space:]]//g
7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
:%s/^[[:space:]]/#\1/gc
8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
:%s@/etc/sysconfig/init@/var/log@gc
9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
:%s/^# //gc
10、查找/var目录属主为root,且属组为mail的所有文件;
find /var -user root -a -group mail -ls
11、查找/usr目录下不属于root、bin或hadoop的所有文件;
find /usr ! -user root -ls -o -user bin -o -user hadoop
12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
find /etc -mtime 7 -a -user root -a -user hadoop -ls
13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
find / -atime 7 -nouser -nogroup
14、查找/etc目录下大于20k且类型为普通文件的所有文件;
find /etc -size +20k -type f -ls
15、查找/etc目录下所有用户都没有写权限的文件;
find /etc ! -perm /222
16、查找/etc目录下至少有一类用户没有执行权限的文件;
find /etc ! -perm /111
17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
find /etc/init.d -perm /111 -a -perm /002
18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
chmod u+s /tmp/cat
19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
chmod g+s /test/data
chmod o+t /test/data