linux基础篇二:

本文详细介绍了Linux系统的文件权限、用户管理、特殊权限、umask、grep命令及其正则表达式用法,以及find命令。内容涵盖权限类型、SUID、SGID、SBIT的含义和设置,用户与组的创建、修改与权限控制,umask的用法,以及grep命令在文本搜索中的应用,包括基本正则表达式和扩展正则表达式。同时,还涉及到了find命令的使用,如按名称、权限、类型、大小和属主查找文件。最后,文章提到了Linux的计划任务(Crontab)和ACL访问控制列表,以及Bash脚本编程的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux基础篇二linux基础篇二:

权限:
文件类型:Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来
加以区分,常见的字符如下所示
9.创建用户user100,并将该用户添加到group200组中
10.修改user100用户名为user1000
11.锁定用户user1000,进行测试及结果
12.解锁用户user1000,进行测试及结果
useradd user1 -G bin,root -s /bin/bash -c "user1_info"
groupadd admins
useradd natasha -G admins
useradd harry -G admins
useradd sarah -s /sbin/nologin
echo centos | passwd --stdin natasha #其它两个密码省略
useradd user1 -u 10000 -G root -d /home/user100
userdel -r user1
groupadd user200; useradd user100; usermod -G group200 user100
usermod -l user1000 user100
usermod -L user1000
usermod -U user1000
#usermod -U -L的解析
#usemod -L
Lock a user's password. This puts a '!' in front of the encrypted password, effectively
disabling the password.
#usermod -U
Unlock a user's password. This removes the '!' in front of the encrypted password.
useradd alice
echo 'alice' | passwd --stdin 'alice'
cat /etc/passwd | tail -n1
cat /etc/shadow | tail -n1
usermod -L alice
cat /etc/shadow | tail -n1 #注意和上个结果比对
#在打开另一个终端测试用户是否能正常登录
usermod -U alice
cat /etc/shadow | tail -n1 #注意比对
#passwd -l 锁定账户,在密码字符串的前面加上!
#passwd -u 是去掉密码字符串前面的!
#usermod -L 默认只是锁定密码,在密码字符串前面加!
#usermod -U 默认只是解锁密码,去掉密码字符串前面的!
符号 描述
-: 普通文件(Regular file)
d: 目录(Directory files)
l: 符号连接文件(Symbolic link file)
b: 块文件(Block file)
c: 字符设备文件(Character device file)
p: 管道文件(Named pie file or just a pipe file)
Linux权限基于UGO模型进行控制;U代表User,G代表Group,O代表Other;每一个文件的权限基于UGO
进行设置
Linux的基本权限分为读、写、执行(r、w、x),可用数字4、2、1来表示
3. Linux特殊权限
特权权限是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有
执行权限的二进制程序有效)
SGID让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件,通常对目录设置
chmod #用于设置文件或目录的权限
chown #用于修改文件属性和权限
chgrp #用于修改文件属性和权限
练习:
4. Linux Umask
预设权限!
umask命令用来设置限制新建文件权限的掩码
umask #结果是八进制掩码,转换后则为022,oct(0022)
#suid
ll /etc/passwd
ll /usr/bin/passwd
ll /usr/bin/su #x权限会被s代替,无执行权限为S
cp /usr/bin/passwd .
ll passwd
chmod u+s passwd #设置suid,也可以使用数字的方式设置
ll passwd
chmod u-s passwd #取消suid
ll passwd
#sgid
chomd g+s file #设置sgid
chmod 2xxx file #数字形式设置
#sbit
ls -ld /tmp
chmod o+t file #设置sbit
#suid,sgid,sbit数字表示
SUID 4
SGID 2
SBIT 1
研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B;
1.建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用
户不能对该目录进行任何的访问操作;
2.建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不
能对该目录进行任何的访问操作;
3.建立目录“/project”,该目录里面的文件可由研发部、行政部人员读取、增加、删除、修改以及执行,其他部
门用户只可以对该目录进行只读的访问操作
#此题只给出两个组,其实要想实现此功能需要3个组。研发部一个组,行政部一个组,包含研发部和行政部需要一
个组。此题目的在于熟悉组、用户、权限相关命令
groupadd a;groupadd b;groupadd ab
echo '1' | passwd --stdin david #其它用户省略
mkdir /project_a;mkdir /project_b;mkdir /project
chgrp ab /project;chgrp a /project_a;chgrp b /project_b
usermod -G a,ab david;usermod -G a,ab peter;usermod -G b,ab mike;usermod -G b,ab jack
chmod 774 /project; chmod 770 /project_a; chmod 770 /project_b
umask 目录 文件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660
常用umask值及对应文件和目录权限
测试:
参数 作用
--color 匹配到的字符串显示颜色
-i 忽略字符大小写
-o 仅显示匹配的字串
-v 反向选取, 即显示不匹配的行
-E 使用扩展正则表达式
-n 显示行号
5. Grep及基本正则表达式
正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法
对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志
文件分析其内容,都会用到正则表达式
Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep),sed,awk
正则表达式分为两种:
基本正则表达式(BRE,basic regular expression)
扩展正则表达式(ERE,extended regular expression)
grep常用基本参数及作用:
正则表达式常用:
文件最大权限为 rwx rwx rwx (777)
umask 为022 --- -w- -w-
目录权限为 rwx r-x r-x (755)
文件权限 rw- r-- r-- (644)
元数据 意义和范例
^word 搜寻word开头的行
  搜寻以#开头的行,grep -n '^#' file
word$ 搜寻word结尾的行
  搜寻以.结尾的行,grep -n '.$' file
. 匹配任意一个字符
  匹配e和e之间有任意一个字符,grep -n 'e.e' file
\ 转义字符
* 前面的一个字符重复0到多次
  匹配gle,gogle,google,gooogle等,grep -n 'go*gle' file
[list] 匹配一系列字符中的一个
[n1-n2] 匹配一个字符范围中的一个字符
  匹配数字字符,grep -n '[0-9]' file
[^list] 匹配字符集以外的字符
  匹配非o字符,grep -n  '[^o]' file
\{n1,n2\} 前面的单个字符重复n1,n2次
  匹配google,gooogle,grep -n ' go\{2,3\}gle ' file
\<word 单词的开头
  匹配以g开头的单词,grep -n  \<g file
word\> 单词的结尾
  匹配以tion结尾的单词,grep -n  tion\> file
‘ ‘ 强引用,引号内的内容不变
“ ” 弱引用,变量会替换
[[:alnum:]] 代表英文大小写字符及数字,即 0-9, A-Z, a-z
[[:alpha:]] 代表任何英文大小写字符,即 A-Z, a-z
[[:space:]] 任何会产生空白的字符,包括空白键, [Tab] 等等
[[:digit:]] 代表数字,即 0-9
[[:lower:]] 代表小写字符,即 a-z
元数据 意义和范例
[[:upper:]] 代表大写字符,即 A-Z
  以上6项为常用的特殊符号
测试:
1.显示/proc/meminfo文件中以大写或小写S开头的行
grep -i "^s" /proc/meminfo
grep -E "^(s|S)" /proc/meminfo
2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1,7
3.显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户
grep "/bin/bash$" /etc/passwd | cut -d: -f1,7
grep "/bin/bash$" /etc/passwd | cut -d: -f1,7 | sort -t: -k3 -n | head -n 1 | cut -d: -f1,7
4.找出/etc/passwd文件中的一位数或两位数
grep "\<[[:digit:]]\{1,2\}\>" /etc/passwd
#用特殊符号的写法易出错,步骤拆解,如下
#grep '[[:digit:]]' /etc/passwd #不要忘记[]
#grep '[[:digit:]]\{\}' /etc/passwd #特殊符号的转义
#grep '[[:digit:]]\{1,2\}' /etc/passwd
#grep '\<[[:digit:]]\{1,2\}>\' /etc/passwd #首尾限定
#grep "\<[0-9]\{1,2\}\>" /etc/passwd #这样也是可行的
5.显示/boot/grub/grub.conf中以至少一个空白字符开头的行
grep "^[[:space:]]\{1,\}" /boot/grub2/grub.cfg
6.找出netstat -tan命令执行结果中以'LISTEN'结尾的行
netstat -nat | grep "LISTEN[[:space:]]*$"
7.显示当前系统上root、user1用户的默认shell
grep -E "^(root|user1)" /etc/passwd | cut -d: -f1,7
8.找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号"()"行
grep "\<[[:alpha:]]\{1,\}\>()" /etc/rc.d/init.d/functions
9.找出ifconfig命令结果中的1-255之间的数字
ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
#步骤拆解
#2
#25
#255 要注意规律
#ifconfig | grep -E "\<([1-9]|[1-9][0-9])\>" #| 为或
#ifconfig | grep -E '\<(1[0-9][0-9])\>'
#ifconfig | grep -E '\<(2[0-4][0-9]|25[0-5])\>'
练习:
#以这个为练习文档,注意最后一行有空行,复制并保存为regular_txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.^M
GNU is free air not free beer.^M
Her hair is very beauty.^M
I can't finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh! My god!
The gd software is a library for drafting programs.^M
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am ghost
------------------------------------------------------------
1.取得所有 the 字符相关信息及行号
2.取得无 the 字符相关信息及行号
3.取得 test 或 taste 这两个单字相关信息及行号
4.取得所有 oo 字符相关信息及行号
5.不想取 oo 前面有 g 的字符相关信息及行号
6.oo 前面不想要有小写的字符相关信息及行号
7.取得 the 只在行首相关信息及行号
8.取得有 数字 相关信息及行号
9.取得开头是小写 相关信息及行号
10.不想要开头是英文字母 相关信息及行号
11.取得行尾结束为小数点. 相关信息及行号
12.取得空白行 相关信息及行号
13.取得g??d 的字符相关信息及行号
14.取得至少两个 o 以上的字符相关信息及行号
15.取得开头与结尾都是 g ,两个g 之间仅能存在至少一个 o 相关信息及行号
16.取得g 开头与 g 结尾的字符,当中的字符可有可无 相关信息及行号
17.取得两个连续 o 的字符相关信息及行号
18.取得g 后面连接2到5个 o,然后再接一个 g 的字符相关信息及行号
1.grep -n 'the' regular_txt
2.grep -vn 'the' regular_txt
3.grep -n 't[ae]st' regular_txt
4.grep -n 'oo' regular_txt
5.grep -n 'goo' regular_txt
6.grep -n 'a-zoo' regular_txt
7.grep -n '^the' regular_txt
8.grep -n '[0-9]' regular_txt
9.grep -n '^the' regular_txt
10.grep -n '^a-zA-Z' regular_txt
11.grep -n '.$' regular_txt
参数 作用
-n 数值排序
-r 降序
-t 字段分隔符
-k 以哪个字段为关键字进行排序
-u 排序后相同的行只显示一次
-f 排序时忽略字符大小写
样例参考 https://blog.youkuaiyun.com/monkeyduck/article/details/10097829
扩展:
sort,以行为单位对多行数据进行排序
常用参数及意义:
6. egrep及扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展
命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价(grep -E == egrep)
一般情况下,基本正则表达式就够用了
特殊情况下,复杂的扩展表达式,可以简化字符串的匹配
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据
12.grep -n '^$' regular_txt
#空行扩展;常用的就是“^$” 表示空行;结合“^#”,看下面代码!
more /etc/ssh/sshd_config
grep -vE '^#|^$' /etc/ssh/sshd_config
13.grep -n 'g..d' regular_txt
14.grep -n 'ooo*' regular_txt
15.grep -n 'go*g' regular_txt
16.grep -n 'g*g' regular_txt
17.grep -n 'o{2}' regular_txt
18.grep -n 'go{2,5}g' regular_txt
元数据 意义和范例
+ 重复前面字符1到多次
  匹配god,good,goood等字符串,grep -nE go+d' file
? 匹配0或1次前面的字符
  匹配gd,god,grep -nE 'go?d' file
| 或or的方式匹配多个字符串
  匹配god或者good,grep -nE'god|good' file
() 匹配整个括号内的字符串,原来都是匹配单个字符
  搜索good或者glad,grep -nE 'g(oo|la)' file
* 前面的字符重复0到多次
参数 作用
-name: 按照名字查找
-perm: 安装权限查找
-prune: 不再当前指定的目录下查找
-user: 文件属主来查找
-nogroup: 文件所属组来查找
-nouser: 查找无有效所属组的文件
-type: 按照文件类型查找
7. Find命令及用法
which #通过PATH环境变量查找可执行文件
whereis #通过文件环境变量查找,比whic范围大一些
locate #通过索引数据库查找文件,centos7下要安装mlocate
find #通过直接搜索硬盘查找,功能强大
测试:
mkdir -p ./dir/a{1,2,3}
mkdir -p ./dir/b{1,2,3}
mkdir -p ./dir/c{1,2,3}
touch ./dir/A11
按名称查找
find ./dir/ -name 'a*'
find ./dir/ -iname 'a*'
find / -regex /r.*/dir/a.* #基于正则表达式的模式查找,匹配的是整个路径,而非单个文件名
根据文件从属关系查找
find . -user root #查找属主指定用户的所有文件
find . -group root #查找属组指定用户的所有文件
find . -uid 0 #查找属主指定的UID的所有文件
find . -gid 0 #查找属组指定的UID的所有文件
find /home -nouser #查找没有属主的文件
find /home -nogroup #查找没有属组的文件
类型 作用
f 普通文件
d 目录文件
l 符号链接文件
b 块设备文件
c 字符设备文件
p 管道文件
s 套接字文件
根据文件类型查找
find . -type f
find . -type d
根据文件的大小查找
常用的单位k,m,G
find . -size +10k #大于10k的条件
find . -size -60k #小于60k的条件
根据权限查找
find . -perm 755
8. Linux计划任务
Linux系统下一个自动执行指定任务的程序(计划任务),使用Crontab命令来添加任务
more /etc/crontab #Crontab配置文件
常用参数
参数 描述
-u
user
用来设置某个用户的crontab服务
-l
显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内

-e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
-i 在删除用户的crontab文件时给确认提示
-r
从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前
用户的crontab文件
测试:
* * * * * command #每1分钟执行一次command
3,15 * * * * command #每小时的第3和第15分钟执行
3,15 8-11 * * * command #在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command #每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command #每个星期一的上午8点到11点的第3和第15分钟执行
30 21 * * * systemctl restart httpd #每晚的21:30重启httpd
45 4 1,10,22 * * systemctl restart httpd #每月1、10、22日的4 : 45重启httpd
10 1 * * 6,0 systemctl restart httpd #每周六、周日的1:10重启httpd
0,30 18-23 * * * systemctl restart httpd #每天18 : 00至23 : 00之间每隔30分钟重启httpd
0 23 * * 6 systemctl restart httpd #每星期六的晚上11:00 pm重启httpd
* */1 * * * systemctl restart httpd #每一小时重启httpd
* 23-7/1 * * * systemctl restart httpd #晚上11点到早上7点之间,每隔一小时重启httpd
*/1 * * * * echo "hello,test" >> /root/hello_t #如果执行不成功或错误,查看日志进行排查
crontab -l -u user #查询指定用户的任务
crontab -r -u user #删除指定用户的任务
建议把作业都存为一个脚本,结过测试后,放在定时任务来执行!
练习:
参数 描述
-m: 设置后续acl参数,不可与-x合用
-x: 删除后续acl参数,不可与-m合用
-b: 删除全部的acl参数
-k: 删除默认的acl参数
-R: 递归设置acl,包括子目录
-d: 设置默认acl,只对目录有效
9. Linux ACL访问控制列表
如果你有一个目录,需要给一多人使用,每个人或每个群组所需要的权限并不相同时,在过去,传统的 Linux
三种身份的三种权限是无法达到的, 因为传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他
人设置权限而已,无法针对单一用户或个人来设计权限
主要用在与提供传统的UGO的读写执行权限之外进行更细致的权限设置,可以针对单一文件,单一用户,单
一目录来进行权限设置
查询ACL功能是否启用(默认都启用)
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i ext4 #centos6,如手工创建的文件系统,需要手工开
启ACL功能
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs #centos7
设置ACL
setfacl
查询ACL
getfacl
例:
1.每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存文件名格式为bak_etc_2018-01-01
2.每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存文件名格式为
bak_msg_2018-01-01
3.每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/backup/memory文件中
4.工作日的时间内,每两小时执行一次echo "hello work"
1. 0 */4 * * * cp -af /etc /backup/bak_etc_-`date +%F`
2. 0 1 * * 2,4,6 cp -af /var/log/messages /backup/msg-`date +%F`
3. 0 */2 * * * sed -n '/^S/p' /proc/meminfo &>> /backup/memory
4. 0 8-17/2 * * 1-5 echo "hello work"
基于文件的设置
useradd alice
touch acl_file1;ll acl_file1
setfacl -m u:alice:rx acl_file1; ll acl_file1
setfacl -m u::rxw acl_file1; ll acl_file1 #acl用户默认权限
查看文件的设置
getfacl acl_file1
基于组的设置
setfacl -m g:group1:rx acl_file1
getfacl acl_file1
基于mask的设置
setfacl -m m:r acl_file1
在一个已经设置了acl目录下,增加文件或目录时,该文件或目录是否能够具有 ACL 的设置?
以上问题如何解决?
setfacl -m d:u:alice:rx /project #使用默认权限设置目录未来文件的 ACL 权限继承“ d:[u|g]:
[user|group]:权限 ”
取消权限
setfacl -b
练习:
getfacl acl_file1
# file: acl_file1
# owner: root
# group: root
user::rw-
user:alice:r-x #effective:r--(有效权限)使用者或群组所设置的权限必须要存
在于 mask 的权限设置范围内才会生效
group::r--
group:group1:r-x #effective:r--
mask::r--
other::r--
#用户只有r权限,并没有x权限!mask的意义
10. Bash脚本编程入门
大多数Linux发行版的默认shell都是GNU bash shell
GNU bash shell能提供对Linux系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启
动。登录时系统启动的shell依赖于用户账户的配置
shell的类型
系统启动什么样的shell程序取决于你个人的用户配置
more /etc/passwd | head -n1 #root用户使用bash shell作为默认的shell
ls -lF /bin/bash #-F文件的类型标识符;“*”表示具有可执行权限的普通文件
ll /bin/bash
shell的父子关系
用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一 个父shell;
当输入bash、生成子shell的时候,你是看不到任何相关的信息的
ps -f
bash
ps -f
ps --forest #子shell间的嵌套结构
进程列表
pwd; ls; cd /etc; pwd; cd; pwd; ls #在一行中指定要依次运行的一系列命令,加“;”
以上并不是进程列表,如果想成为进程列表,这些命令必须包含在括号里
(pwd; ls; cd /etc; pwd; cd; pwd; ls) #括号的加入使命令列表变成了进程列表,生成了一个子shell来
执行对应的命令
echo $BASH_SUBSHELL #查询否生成了子shell,0则没有子shell,大于1则使用子shell
pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL
(pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL)
在shell脚本中,经常使用子shell进行多进程处理,但成本也会很高,系统速度会变慢!
一些其它用法
后台模式
sleep
在/opt/里创建的新文件自动属于g1组,组 g2的成员如:alice能对这些新文件有读写权限,组g3 的成员
如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹
mkdir -p /opt/dir
groupadd g1 && groupadd g2 && groupadd g3
useradd -G g2 alice
useradd -G g3 tom
chgrp g1 /opt/dir
chmod g+s /opt/dir
chmod o= /opt/dir
setfacl -Rm d:g:g2:rw /opt/dir
setfacl -Rm d:g:g3:r /opt/dir
sleep 10
sleep 100& #&表示后台模式
ps -f
jobs #查看作业
shell的内建命令、外部命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行
外部命令
type cd; type exit #type查看类型;既不需要通过衍生出子进程来执行,也不需要打开程序文件,内
建命令的执行速度要更快,效率高
有些命令有多种实现,既有内建命令也有外部命令。两种实现略有不同。查看type -a
type -a echo
which echo
type -a pwd
which pwd
内建命令
history
history -a #退出shell会话之前强制将命令历史记录写入.bash_history文件;对于其他打开的终端会
话,历史记录并不会自动更新。因为.bash_history文件只有在打开首个终端会话时才会被读取。想强制
重新读取.bash_history文件,更新终端会话的历史记录,可以使用history -n
alias #命令别名;临时生效,强制生效则需要修改配置文件:




权限:
文件类型:Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来
加以区分,常见的字符如下所示
9.创建用户user100,并将该用户添加到group200组中
10.修改user100用户名为user1000
11.锁定用户user1000,进行测试及结果
12.解锁用户user1000,进行测试及结果
useradd user1 -G bin,root -s /bin/bash -c "user1_info"
groupadd admins
useradd natasha -G admins
useradd harry -G admins
useradd sarah -s /sbin/nologin
echo centos | passwd --stdin natasha #其它两个密码省略
useradd user1 -u 10000 -G root -d /home/user100
userdel -r user1
groupadd user200; useradd user100; usermod -G group200 user100
usermod -l user1000 user100
usermod -L user1000
usermod -U user1000
#usermod -U -L的解析
#usemod -L
Lock a user's password. This puts a '!' in front of the encrypted password, effectively
disabling the password.
#usermod -U
Unlock a user's password. This removes the '!' in front of the encrypted password.
useradd alice
echo 'alice' | passwd --stdin 'alice'
cat /etc/passwd | tail -n1
cat /etc/shadow | tail -n1
usermod -L alice
cat /etc/shadow | tail -n1 #注意和上个结果比对
#在打开另一个终端测试用户是否能正常登录
usermod -U alice
cat /etc/shadow | tail -n1 #注意比对
#passwd -l 锁定账户,在密码字符串的前面加上!
#passwd -u 是去掉密码字符串前面的!
#usermod -L 默认只是锁定密码,在密码字符串前面加!
#usermod -U 默认只是解锁密码,去掉密码字符串前面的!
符号 描述
-: 普通文件(Regular file)
d: 目录(Directory files)
l: 符号连接文件(Symbolic link file)
b: 块文件(Block file)
c: 字符设备文件(Character device file)
p: 管道文件(Named pie file or just a pipe file)
Linux权限基于UGO模型进行控制;U代表User,G代表Group,O代表Other;每一个文件的权限基于UGO
进行设置
Linux的基本权限分为读、写、执行(r、w、x),可用数字4、2、1来表示
3. Linux特殊权限
特权权限是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有
执行权限的二进制程序有效)
SGID让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件,通常对目录设置
chmod #用于设置文件或目录的权限
chown #用于修改文件属性和权限
chgrp #用于修改文件属性和权限
练习:
4. Linux Umask
预设权限!
umask命令用来设置限制新建文件权限的掩码
umask #结果是八进制掩码,转换后则为022,oct(0022)
#suid
ll /etc/passwd
ll /usr/bin/passwd
ll /usr/bin/su #x权限会被s代替,无执行权限为S
cp /usr/bin/passwd .
ll passwd
chmod u+s passwd #设置suid,也可以使用数字的方式设置
ll passwd
chmod u-s passwd #取消suid
ll passwd
#sgid
chomd g+s file #设置sgid
chmod 2xxx file #数字形式设置
#sbit
ls -ld /tmp
chmod o+t file #设置sbit
#suid,sgid,sbit数字表示
SUID 4
SGID 2
SBIT 1
研发部开发人员David和Peter属于组A,行政部人员Jack和Mike属于组B;
1.建立目录“/project_a”,该目录里面的文件只能由研发部开发人员读取、增加、删除、修改以及执行,其他用
户不能对该目录进行任何的访问操作;
2.建立目录“/project_b”,该目录里面的文件只能由行政部人员读取、增加、删除、修改以及执行,其他用户不
能对该目录进行任何的访问操作;
3.建立目录“/project”,该目录里面的文件可由研发部、行政部人员读取、增加、删除、修改以及执行,其他部
门用户只可以对该目录进行只读的访问操作
#此题只给出两个组,其实要想实现此功能需要3个组。研发部一个组,行政部一个组,包含研发部和行政部需要一
个组。此题目的在于熟悉组、用户、权限相关命令
groupadd a;groupadd b;groupadd ab
echo '1' | passwd --stdin david #其它用户省略
mkdir /project_a;mkdir /project_b;mkdir /project
chgrp ab /project;chgrp a /project_a;chgrp b /project_b
usermod -G a,ab david;usermod -G a,ab peter;usermod -G b,ab mike;usermod -G b,ab jack
chmod 774 /project; chmod 770 /project_a; chmod 770 /project_b
umask 目录 文件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660
常用umask值及对应文件和目录权限
测试:
参数 作用
--color 匹配到的字符串显示颜色
-i 忽略字符大小写
-o 仅显示匹配的字串
-v 反向选取, 即显示不匹配的行
-E 使用扩展正则表达式
-n 显示行号
5. Grep及基本正则表达式
正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法
对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志
文件分析其内容,都会用到正则表达式
Linux中的正则表达式,最常应用正则表达式的命令是grep(egrep),sed,awk
正则表达式分为两种:
基本正则表达式(BRE,basic regular expression)
扩展正则表达式(ERE,extended regular expression)
grep常用基本参数及作用:
正则表达式常用:
文件最大权限为 rwx rwx rwx (777)
umask 为022 --- -w- -w-
目录权限为 rwx r-x r-x (755)
文件权限 rw- r-- r-- (644)
元数据 意义和范例
^word 搜寻word开头的行
  搜寻以#开头的行,grep -n '^#' file
word$ 搜寻word结尾的行
  搜寻以.结尾的行,grep -n '.$' file
. 匹配任意一个字符
  匹配e和e之间有任意一个字符,grep -n 'e.e' file
\ 转义字符
* 前面的一个字符重复0到多次
  匹配gle,gogle,google,gooogle等,grep -n 'go*gle' file
[list] 匹配一系列字符中的一个
[n1-n2] 匹配一个字符范围中的一个字符
  匹配数字字符,grep -n '[0-9]' file
[^list] 匹配字符集以外的字符
  匹配非o字符,grep -n  '[^o]' file
\{n1,n2\} 前面的单个字符重复n1,n2次
  匹配google,gooogle,grep -n ' go\{2,3\}gle ' file
\<word 单词的开头
  匹配以g开头的单词,grep -n  \<g file
word\> 单词的结尾
  匹配以tion结尾的单词,grep -n  tion\> file
‘ ‘ 强引用,引号内的内容不变
“ ” 弱引用,变量会替换
[[:alnum:]] 代表英文大小写字符及数字,即 0-9, A-Z, a-z
[[:alpha:]] 代表任何英文大小写字符,即 A-Z, a-z
[[:space:]] 任何会产生空白的字符,包括空白键, [Tab] 等等
[[:digit:]] 代表数字,即 0-9
[[:lower:]] 代表小写字符,即 a-z
元数据 意义和范例
[[:upper:]] 代表大写字符,即 A-Z
  以上6项为常用的特殊符号
测试:
1.显示/proc/meminfo文件中以大写或小写S开头的行
grep -i "^s" /proc/meminfo
grep -E "^(s|S)" /proc/meminfo
2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1,7
3.显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户
grep "/bin/bash$" /etc/passwd | cut -d: -f1,7
grep "/bin/bash$" /etc/passwd | cut -d: -f1,7 | sort -t: -k3 -n | head -n 1 | cut -d: -f1,7
4.找出/etc/passwd文件中的一位数或两位数
grep "\<[[:digit:]]\{1,2\}\>" /etc/passwd
#用特殊符号的写法易出错,步骤拆解,如下
#grep '[[:digit:]]' /etc/passwd #不要忘记[]
#grep '[[:digit:]]\{\}' /etc/passwd #特殊符号的转义
#grep '[[:digit:]]\{1,2\}' /etc/passwd
#grep '\<[[:digit:]]\{1,2\}>\' /etc/passwd #首尾限定
#grep "\<[0-9]\{1,2\}\>" /etc/passwd #这样也是可行的
5.显示/boot/grub/grub.conf中以至少一个空白字符开头的行
grep "^[[:space:]]\{1,\}" /boot/grub2/grub.cfg
6.找出netstat -tan命令执行结果中以'LISTEN'结尾的行
netstat -nat | grep "LISTEN[[:space:]]*$"
7.显示当前系统上root、user1用户的默认shell
grep -E "^(root|user1)" /etc/passwd | cut -d: -f1,7
8.找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号"()"行
grep "\<[[:alpha:]]\{1,\}\>()" /etc/rc.d/init.d/functions
9.找出ifconfig命令结果中的1-255之间的数字
ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
#步骤拆解
#2
#25
#255 要注意规律
#ifconfig | grep -E "\<([1-9]|[1-9][0-9])\>" #| 为或
#ifconfig | grep -E '\<(1[0-9][0-9])\>'
#ifconfig | grep -E '\<(2[0-4][0-9]|25[0-5])\>'
练习:
#以这个为练习文档,注意最后一行有空行,复制并保存为regular_txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.^M
GNU is free air not free beer.^M
Her hair is very beauty.^M
I can't finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh! My god!
The gd software is a library for drafting programs.^M
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am ghost
------------------------------------------------------------
1.取得所有 the 字符相关信息及行号
2.取得无 the 字符相关信息及行号
3.取得 test 或 taste 这两个单字相关信息及行号
4.取得所有 oo 字符相关信息及行号
5.不想取 oo 前面有 g 的字符相关信息及行号
6.oo 前面不想要有小写的字符相关信息及行号
7.取得 the 只在行首相关信息及行号
8.取得有 数字 相关信息及行号
9.取得开头是小写 相关信息及行号
10.不想要开头是英文字母 相关信息及行号
11.取得行尾结束为小数点. 相关信息及行号
12.取得空白行 相关信息及行号
13.取得g??d 的字符相关信息及行号
14.取得至少两个 o 以上的字符相关信息及行号
15.取得开头与结尾都是 g ,两个g 之间仅能存在至少一个 o 相关信息及行号
16.取得g 开头与 g 结尾的字符,当中的字符可有可无 相关信息及行号
17.取得两个连续 o 的字符相关信息及行号
18.取得g 后面连接2到5个 o,然后再接一个 g 的字符相关信息及行号
1.grep -n 'the' regular_txt
2.grep -vn 'the' regular_txt
3.grep -n 't[ae]st' regular_txt
4.grep -n 'oo' regular_txt
5.grep -n 'goo' regular_txt
6.grep -n 'a-zoo' regular_txt
7.grep -n '^the' regular_txt
8.grep -n '[0-9]' regular_txt
9.grep -n '^the' regular_txt
10.grep -n '^a-zA-Z' regular_txt
11.grep -n '.$' regular_txt
参数 作用
-n 数值排序
-r 降序
-t 字段分隔符
-k 以哪个字段为关键字进行排序
-u 排序后相同的行只显示一次
-f 排序时忽略字符大小写
样例参考 https://blog.youkuaiyun.com/monkeyduck/article/details/10097829
扩展:
sort,以行为单位对多行数据进行排序
常用参数及意义:
6. egrep及扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展
命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价(grep -E == egrep)
一般情况下,基本正则表达式就够用了
特殊情况下,复杂的扩展表达式,可以简化字符串的匹配
扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据
12.grep -n '^$' regular_txt
#空行扩展;常用的就是“^$” 表示空行;结合“^#”,看下面代码!
more /etc/ssh/sshd_config
grep -vE '^#|^$' /etc/ssh/sshd_config
13.grep -n 'g..d' regular_txt
14.grep -n 'ooo*' regular_txt
15.grep -n 'go*g' regular_txt
16.grep -n 'g*g' regular_txt
17.grep -n 'o{2}' regular_txt
18.grep -n 'go{2,5}g' regular_txt
元数据 意义和范例
+ 重复前面字符1到多次
  匹配god,good,goood等字符串,grep -nE go+d' file
? 匹配0或1次前面的字符
  匹配gd,god,grep -nE 'go?d' file
| 或or的方式匹配多个字符串
  匹配god或者good,grep -nE'god|good' file
() 匹配整个括号内的字符串,原来都是匹配单个字符
  搜索good或者glad,grep -nE 'g(oo|la)' file
* 前面的字符重复0到多次
参数 作用
-name: 按照名字查找
-perm: 安装权限查找
-prune: 不再当前指定的目录下查找
-user: 文件属主来查找
-nogroup: 文件所属组来查找
-nouser: 查找无有效所属组的文件
-type: 按照文件类型查找
7. Find命令及用法
which #通过PATH环境变量查找可执行文件
whereis #通过文件环境变量查找,比whic范围大一些
locate #通过索引数据库查找文件,centos7下要安装mlocate
find #通过直接搜索硬盘查找,功能强大
测试:
mkdir -p ./dir/a{1,2,3}
mkdir -p ./dir/b{1,2,3}
mkdir -p ./dir/c{1,2,3}
touch ./dir/A11
按名称查找
find ./dir/ -name 'a*'
find ./dir/ -iname 'a*'
find / -regex /r.*/dir/a.* #基于正则表达式的模式查找,匹配的是整个路径,而非单个文件名
根据文件从属关系查找
find . -user root #查找属主指定用户的所有文件
find . -group root #查找属组指定用户的所有文件
find . -uid 0 #查找属主指定的UID的所有文件
find . -gid 0 #查找属组指定的UID的所有文件
find /home -nouser #查找没有属主的文件
find /home -nogroup #查找没有属组的文件
类型 作用
f 普通文件
d 目录文件
l 符号链接文件
b 块设备文件
c 字符设备文件
p 管道文件
s 套接字文件
根据文件类型查找
find . -type f
find . -type d
根据文件的大小查找
常用的单位k,m,G
find . -size +10k #大于10k的条件
find . -size -60k #小于60k的条件
根据权限查找
find . -perm 755
8. Linux计划任务
Linux系统下一个自动执行指定任务的程序(计划任务),使用Crontab命令来添加任务
more /etc/crontab #Crontab配置文件
常用参数
参数 描述
-u
user
用来设置某个用户的crontab服务
-l
显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内

-e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
-i 在删除用户的crontab文件时给确认提示
-r
从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前
用户的crontab文件
测试:
* * * * * command #每1分钟执行一次command
3,15 * * * * command #每小时的第3和第15分钟执行
3,15 8-11 * * * command #在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command #每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command #每个星期一的上午8点到11点的第3和第15分钟执行
30 21 * * * systemctl restart httpd #每晚的21:30重启httpd
45 4 1,10,22 * * systemctl restart httpd #每月1、10、22日的4 : 45重启httpd
10 1 * * 6,0 systemctl restart httpd #每周六、周日的1:10重启httpd
0,30 18-23 * * * systemctl restart httpd #每天18 : 00至23 : 00之间每隔30分钟重启httpd
0 23 * * 6 systemctl restart httpd #每星期六的晚上11:00 pm重启httpd
* */1 * * * systemctl restart httpd #每一小时重启httpd
* 23-7/1 * * * systemctl restart httpd #晚上11点到早上7点之间,每隔一小时重启httpd
*/1 * * * * echo "hello,test" >> /root/hello_t #如果执行不成功或错误,查看日志进行排查
crontab -l -u user #查询指定用户的任务
crontab -r -u user #删除指定用户的任务
建议把作业都存为一个脚本,结过测试后,放在定时任务来执行!
练习:
参数 描述
-m: 设置后续acl参数,不可与-x合用
-x: 删除后续acl参数,不可与-m合用
-b: 删除全部的acl参数
-k: 删除默认的acl参数
-R: 递归设置acl,包括子目录
-d: 设置默认acl,只对目录有效
9. Linux ACL访问控制列表
如果你有一个目录,需要给一多人使用,每个人或每个群组所需要的权限并不相同时,在过去,传统的 Linux
三种身份的三种权限是无法达到的, 因为传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他
人设置权限而已,无法针对单一用户或个人来设计权限
主要用在与提供传统的UGO的读写执行权限之外进行更细致的权限设置,可以针对单一文件,单一用户,单
一目录来进行权限设置
查询ACL功能是否启用(默认都启用)
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i ext4 #centos6,如手工创建的文件系统,需要手工开
启ACL功能
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs #centos7
设置ACL
setfacl
查询ACL
getfacl
例:
1.每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存文件名格式为bak_etc_2018-01-01
2.每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存文件名格式为
bak_msg_2018-01-01
3.每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/backup/memory文件中
4.工作日的时间内,每两小时执行一次echo "hello work"
1. 0 */4 * * * cp -af /etc /backup/bak_etc_-`date +%F`
2. 0 1 * * 2,4,6 cp -af /var/log/messages /backup/msg-`date +%F`
3. 0 */2 * * * sed -n '/^S/p' /proc/meminfo &>> /backup/memory
4. 0 8-17/2 * * 1-5 echo "hello work"
基于文件的设置
useradd alice
touch acl_file1;ll acl_file1
setfacl -m u:alice:rx acl_file1; ll acl_file1
setfacl -m u::rxw acl_file1; ll acl_file1 #acl用户默认权限
查看文件的设置
getfacl acl_file1
基于组的设置
setfacl -m g:group1:rx acl_file1
getfacl acl_file1
基于mask的设置
setfacl -m m:r acl_file1
在一个已经设置了acl目录下,增加文件或目录时,该文件或目录是否能够具有 ACL 的设置?
以上问题如何解决?
setfacl -m d:u:alice:rx /project #使用默认权限设置目录未来文件的 ACL 权限继承“ d:[u|g]:
[user|group]:权限 ”
取消权限
setfacl -b
练习:
getfacl acl_file1
# file: acl_file1
# owner: root
# group: root
user::rw-
user:alice:r-x #effective:r--(有效权限)使用者或群组所设置的权限必须要存
在于 mask 的权限设置范围内才会生效
group::r--
group:group1:r-x #effective:r--
mask::r--
other::r--
#用户只有r权限,并没有x权限!mask的意义
10. Bash脚本编程入门
大多数Linux发行版的默认shell都是GNU bash shell
GNU bash shell能提供对Linux系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启
动。登录时系统启动的shell依赖于用户账户的配置
shell的类型
系统启动什么样的shell程序取决于你个人的用户配置
more /etc/passwd | head -n1 #root用户使用bash shell作为默认的shell
ls -lF /bin/bash #-F文件的类型标识符;“*”表示具有可执行权限的普通文件
ll /bin/bash
shell的父子关系
用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一 个父shell;
当输入bash、生成子shell的时候,你是看不到任何相关的信息的
ps -f
bash
ps -f
ps --forest #子shell间的嵌套结构
进程列表
pwd; ls; cd /etc; pwd; cd; pwd; ls #在一行中指定要依次运行的一系列命令,加“;”
以上并不是进程列表,如果想成为进程列表,这些命令必须包含在括号里
(pwd; ls; cd /etc; pwd; cd; pwd; ls) #括号的加入使命令列表变成了进程列表,生成了一个子shell来
执行对应的命令
echo $BASH_SUBSHELL #查询否生成了子shell,0则没有子shell,大于1则使用子shell
pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL
(pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL)
在shell脚本中,经常使用子shell进行多进程处理,但成本也会很高,系统速度会变慢!
一些其它用法
后台模式
sleep
在/opt/里创建的新文件自动属于g1组,组 g2的成员如:alice能对这些新文件有读写权限,组g3 的成员
如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹
mkdir -p /opt/dir
groupadd g1 && groupadd g2 && groupadd g3
useradd -G g2 alice
useradd -G g3 tom
chgrp g1 /opt/dir
chmod g+s /opt/dir
chmod o= /opt/dir
setfacl -Rm d:g:g2:rw /opt/dir
setfacl -Rm d:g:g3:r /opt/dir
sleep 10
sleep 100& #&表示后台模式
ps -f
jobs #查看作业
shell的内建命令、外部命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行
外部命令
type cd; type exit #type查看类型;既不需要通过衍生出子进程来执行,也不需要打开程序文件,内
建命令的执行速度要更快,效率高
有些命令有多种实现,既有内建命令也有外部命令。两种实现略有不同。查看type -a
type -a echo
which echo
type -a pwd
which pwd
内建命令
history
history -a #退出shell会话之前强制将命令历史记录写入.bash_history文件;对于其他打开的终端会
话,历史记录并不会自动更新。因为.bash_history文件只有在打开首个终端会话时才会被读取。想强制
重新读取.bash_history文件,更新终端会话的历史记录,可以使用history -n
alias #命令别名;临时生效,强制生效则需要修改配置文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值