文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
目录:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
修改文件的属主:chown
修改文件的属组:chgrp
修改文件权限:chmod
修改一类用户的所有权限: u= g= o= ug= a= u=,g=
修改一类用户某位或某些位权限:u+ u- g+ g- o+ o -a+ a- + -
umask值可以用来保留在创建文件权限
新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
全局设置:/etc/bashrc用户设置:~/.bashrc
Linux文件系统上的特殊权限
权限设定 chmod u+s FILE... chmod u-s FILE...
chmod g+s DIR... chmod g-s DIR...
chmod o+t DIR... chmod o-t DIR...
设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能追加内容
lsattr 显示特定属性
访问控制列表
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人
setfacl -m u:wang:rwx file 设置acl
setfacl -k dir 删除默认ACL权限
setfacl –b file1 清除所有ACL权限
文本处理工具
文件查看命令cat, tac,rev
cat
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪显示文件fd新追加的内容,常用日志监控
相当于--follow=descriptor
-F: 跟踪文件名,相当于—follow=name --retry
cut
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
wc -l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
sort
-r 执行反方向(由上至下)整理
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理能够使用多次
uniq命令:从输入中删除前后相接的重复的行
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
连续且完全相同方为重复
Linux文本处理三剑客
--color=auto: 对匹配到的文本着色显示
-v: 显示不被pattern匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整个单词
-E:使用ERE
-F:相当于fgrep,不支持正则表达式
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或\b 词首锚定,用于单词模式的左侧
\> 或\b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进
行处理,如:\(root\)\+
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的
模式所匹配到的字符
示例: \(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2
或者:\|
示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat
扩展正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定:
^ :行首
$ :行尾
\<, \b :语首
\>, \b :语尾
分组:
()
后向引用:\1, \2, ...
或者:
a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat
VIM文本编辑器
文本编辑种类:
行编辑器: sed
全屏编辑器:nano, vi
vim - Vi Improved
vim [OPTION]... FILE...
+#: 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
三种主要模式:
命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
插入(Insert)或编辑模式: 修改文本
扩展命令(extended command )模式: 保存,退出等
Esc键 退出当前模式
命令模式 --> 插入模式
i: insert, 在光标所在处输入
I:在当前光标所在行的行首输入
a: append, 在光标所在处后面输入
A:在当前光标所在行的行尾输入
o: 在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
扩展模式:
:q 退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
按“:”进入Ex模式
创建一个命令提示符: 处于底部的屏幕左侧
命令:
w 写(存)磁盘文件
wq 写入并退出
x 写入并退出
q 退出
q! 不存盘退出,即使更改都将丢失
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
!command 执行命令
r!command 读入命令的输出
字符间跳转:
h: 左 l: 右 j: 下 k: 上
#COMMAND:跳转由#指定的个数的字符
单词间跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
#COMMAND:由#指定一次跳转的单词数
字符编辑:
x: 删除光标处的字符
#x: 删除光标处起始的#个字符
xp: 交换光标所在处的字符及其后面字符的位置
~:转换大小写
J:删除当前行后的换行符
替换命令(r, replace)
r: 替换光标所在处的字符
R:切换成REPLACE模式
删除命令:
d: 删除命令,可结合光标跳转字符,实现范围删除
d$: 删除到行尾
d^:删除到非空行首
d0:删除到行首
dw:
de:
db:
#COMMAND
dd: 删除光标所在的行
#dd:多行删除
D:从当前光标位置一直删除到行尾,留空行,等同于d$
复制命令(y, yank):
y: 复制,行为相似于d命令
y$
y0
y^
ye
yw
yb
#COMMAND
yy:复制行
#yy: 复制多行
Y: 复制整行
粘贴命令(p, paste):
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下
方;否则,则粘贴至当前光标所在处的后面
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上
方;否则,则粘贴至当前光标所在处的前面
改变命令(c, change)
c: 修改后切换成插入模式
命令模式 --> 插入模式
c$
c^
c0
cb
ce
cw
#COMMAND
cc:删除当前行并输入新内容,相当于S
#cc:
C:删除当前光标到行尾,并切换成插入模式
查找并替换
s: 在扩展模式下完成查找替换操作
格式:s/要查找的内容/替换为的内容/修饰符
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现
gc:全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,例如
s@/etc@/var@g
s#/boot#/#i
撤消更改
u撤销最近的更改
#u撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
按Ctrl - r重做最后的“撤消”更改
. 重复前一个操作
n.重复前一个操作n次
可视化模式
允许选择的文本块
v 面向字符
V 面向行
ctrl-v 面向块
可视化键可用于与移动键结合使用:
w ) } 箭头等
突出显示的文字可被删除,复制,变更,过滤,搜索,替换等
多文件模式
vim FILE1 FILE2 FILE3 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall
使用多个“窗口”
多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口间切换:Ctrl+w, Arrow
单文件窗口分割:
Ctrl+w,s: split, 水平分割
Ctrl+w,v: vertical, 垂直分割
ctrl+w,q:取消相邻窗口
ctrl+w,o:取消全部窗口
:wqall 退出
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
第三周作业
1、编写脚本/root/bin/backup.sh ,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
#!/bin/bash
cp -av /etc/ /data/etc`date +%F`
2、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
#!/bin/bash
df |grep "/dev/sd"|egrep -o "\<[[:digit:]]+%"|tr -d %|sort -nr|head -n1
3、编写脚本/root/bin/nologin.sh 和login.sh,实现禁止和充许普通用户登录系统
#!/bin/bash
read -p "请输入禁止的用户:" user
uid=$( id $user |tr " " @ |cut -d@ -f1 |grep -o "[0-9]\{3,\}" )
[ $uid -ge 500 ] && usermod -s /bin/nologin $user || echo '该用户为系统用户,无法禁止!'
echo '该用户已禁止登陆'
#!/bin/bash
read -p "请输入允许登录的用户:" user
uid=$( id $user |tr " " @ |cut -d@ -f1 |grep -o "[0-9]\{3,\}" )
[ $uid -ge 500 ] && usermod -s /bin/bash $user || echo '该用户为系统用户,无法禁止!'
echo '该用户已允许登陆'
4、查找/var目录下不属于root、lp、gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \)
5、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和 sed两种方法分别实现)
egrep -o "\<[[:alpha:]]+\>" /etc/init.d/functions|sort|uniq -c|sort -n
6、利用sed 取出ifconfig命令中本机的IPv4地址
ifconfig | sed -r -n '/inet /s/^[[:space:]]+inet (.*) net.*$/\1/p'|head -n1
7、总结yum的配置和使用,包括yum仓库的创建
c/s结构 http:// https:// ftp:// file://
配置文件后缀为repo 存放路径:/etc/yum.repos.d
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库建立:
[base]
basenameurl=http:// https:// ftp:// file://
gpgcheck=0
yum install 安装
yum groupinstall 组安装
yum remove 卸载
yum groupremove 组卸载
yum list 显示所有包
yum clean all 清除缓存
yum故障:1、配置文件 2、清除缓存
8、编写系统初始化脚本reset.sh ,包括别名,提示符颜色,yum仓库配置文件, 安装tree,ftp,lftp,telnet等包
echo "alias cdnet='cd /etc/sysconfig/network-scripts/'" >> /root/.bashrc
echo "PS1='\[\e[1;31;34m\][\u@\h \W]\\$\[\e[0m\]'" >>/etc/profile.d/env.sh
touch /etc/yum.repos.d/base.repo
echo "[base]">>/etc/yum.repos.d/base.repo
echo "name=base">>/etc/yum.repos.d/base.repo
echo "baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/">>/etc/yum.repos.d/base.repo
echo "gpgcheck=0">>/etc/yum.repos.d/base.repo
yum install tree ftp lftp telnet -y
9、在CentOS7上编译安装apache2.4源码包,并启动此服务
关闭防火墙、关闭selinux
安装依赖包:
(1)、安装apr
tar -zxvf apr-1.4.5.tar.gz
cd apr-1.4.5
./configure --prefix=/usr/local/apr
make && make install
(2)、安装apr-util
tar -zxvf apr-util-1.3.12.tar.gz
cd apr-util-1.3.12
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
(3)、安装pcre
unzip pcre-8.10.zip
cd pcre-8.10/
./configure --prefix=/usr/local/pcre
make && make install
(4)、安装Apache
tar -xvf httpd-2.4.38.tar.gz
cd httpd-2.4.38
./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so --with-apr=/usr/local/apr --with-apr-
util=/usr/local/apr-util --with-pcre=/usr/local/pcre --with-included-apr
make && make install