目录
- 练习1
- 知识点2 /etc/group文件
- 知识点3 group操作
- 知识点3.1 groupadd groupdel
- 知识点3.2 groupmod newgrp
- 知识点3.3 Linux组帐号
- 知识点4 gpasswd命令
- 知识点5 linux加密
- 知识点6 /etc/login.defs文件
- 知识点7 useradd命令在后台到底做了哪些工作?
- 知识点8 /etc/skel/*文件
- 练习9 每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log
- 知识点10 Shell启动配置文件的区别
- 知识点11 .bash_history
- 知识点12 bash的启动脚本初始化
- 知识点13 用户和组账户查询
- 知识点14 终端设备名称
- 知识点15 文件/目录的权限
- 知识点16 文件/目录的权限
- 知识点17 socket(套接字)
- 知识点18 Linux内核五大子系统
- 知识点19 进程
- 知识点20 /根目录下
- 知识点21 可执行权限
- 示例
- 知识点22 Shell文件执行方式
- 知识点23 chmod命令
- 知识点24 chmod命令
博客cpen_web
练习1
1、如何知道一个用户是否在linux系统里存在?
cat /etc/passwd
或者 id命令
2、如何禁用一个用户登陆linux系统
使用usermod -L 锁定用户
usermod -s /sbin/nologin root
3、如何知道一个用户属于哪些组
使用id命令查看
使用groups命令查看
查看/etc/group里用户所属的组
4、如何知道哪些用户现在已经登录在linux里? 哪些用户曾经登陆过linux系统?
使用w命令查看用户登录情况
使用last命令查看曾经登录过的用户
示例:w who 看当前登录的用户
#注:w看的更详细些
[root@localhost ~]# w
09:37:40 up 8:32, 5 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 四09 6:28 0.09s 0.09s -bash
root pts/3 192.168.136.1 09:29 4.00s 0.05s 0.03s w
[root@localhost ~]# who
root tty1 2020-11-05 09:31
root pts/3 2020-11-06 09:29 (192.168.136.1)
5、如何给用户重新设置密码
passwd
6、linux的root密码忘记了怎么办
进入单用户模式
1、开机,按任意键停住启动界面,然后选择对应的内核,按 e 进行编辑
2、找到linux16这一行,在最后输入 rd.break
3、按 Ctrl-x 启动,然后按照以下操作破解 root 密码
示例:忘记root用户密码怎么办?
答:进入单用户模式
https://blog.csdn.net/qq_37960324/article/details/84589565
https://www.cnblogs.com/jsjrj01/p/10301603.htm
7、如何将已经登录在系统里的用户踢出去?并且防止它再次登陆?
1.踢出可疑的root登录用户,马上修改密码
2.sshd—》/etc/hosts.deny hosts.allow -->ip
3./etc/ssh/sshd_config -->DenyUsers -->用户
8、怎么把普通用户变成root用户
1.(不推荐)修改 /etc/passwd 文件,找到要修改的普通用户,把用户ID修改为 0
2.sudo 权限
· 创建目录/tech/cali和/tech/sanle,分别用于保存个项目组中用户帐号的宿主目录;
· 为两个项目组添加组帐号cali、sanle,GID号分别为1001、1002;为技术部添加组帐号tech,GID号为200;
· 添加2个用户,分别为b1、b2,要求他们的基本组是cali,附加组是tech,宿主目录均使用/tech/cali目录中与帐号同名的文件夹(例如b1用户的宿主目录/tech/cali/b1);其中b2用户帐号设置2012-12-31日后失效;
· 添加2个用户,分别为a1、a2,要求他们的基本组是sanle,附加组是tech;宿主目录均使用/tech/sanle目录中与帐号同名的文件夹(例如a1用户的宿主目录/tech/cali/a1) ;其中a2用户帐号登录的shell为/bin/ksh
所有新建用户密码都是123456;
1、mkdir -p /tech/cali /tech/sanle
2、groupadd -g 1001 cali
groupadd -g 1002 sanle
groupadd -g 200 tech
3、useradd -g cali -G tech -d /tech/cali/b1 b1
useradd -g cali -G tech -d /tech/cali/b2 -e 2020-11-6 b2
4、useradd -g sanle -G tech -d /tech/sanle/a100 a1
useradd -g sable -G tech -d /tech/sanle/a200 -s /bin/ksh a2
5、echo 123456|passwd a1 --stdin
echo 123456|passwd a2 --stdin
示例:过期账户不能登录
[root@sanchuang-linux ~]# useradd -e "2012-11-22" sanle3 # 注:过期账户不能登录
[root@sanchuang-linux ~]# su - sanle3 #注:可以切换,不能登录
[sanle3@sanchuang-linux ~]$
知识点2 /etc/group文件
#注:/etc 存放配置文件的地方
/etc/group文件 # 注:可以查看哪些账户的次要组是
组帐号:
·主要组(私有组)
·次要组(附属组)
GID:(Group Identify,组标识号)
Linux组帐号
·主要组(私有组)
与用户相关的默认组,在/etc/passwd文件的第四个字段定义
·次要组(附属组)
用户可以同时属于其他的组,在/etc/group文件的第四个字段定义
用户的主要组的名称和GID相关
示例
[root@sanchuang-linux ~]# useradd -g sanchuang4 -G sanchuang5 sanchuang10
[root@sanchuang-linux ~]# useradd -g sanchuang4 -G sanchuang5 sanchuang12
[root@sanchuang-linux ~]# useradd -g sanchuang5 -G sanchuang4 sanchuang13
[root@sanchuang-linux ~]# cat /etc/group
sanchuang4:x:1100:sanchuang13 # 注:只显示次要组的组成员列表
sanchuang5:x:1200:sanchuang10,sanchuang12 # 注:只显示次要组的组成员列表
#注:组账号名:sanchuang5;GID:1200;组成员列表sanchuang10,sanchuang12
#注:只显示次要组的组成员列表
示例:怎样查看一个组里有哪些用户
#注:联系2个文件 /etc/passwd /etc/group
[root@sanchuang-linux ~]# awk -F: '/sanchuang5/{print $3,$4}' /etc/group
1200 sanchuang10,sanchuang12 # 注:模糊匹配,匹配包含sanchuang5的行
[root@sanchuang-linux ~]# awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group # 注:加引号
1200 sanchuang10,sanchuang12 # 注:精确匹配
[root@sanchuang-linux ~]# vim group_member.sh
#!/bin/bash
group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
echo $group_msg #注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
[root@sanchuang-linux ~]# sh group_member.sh sanchuang5
1200 sanchuang10,sanchuang12
[root@sanchuang-linux ~]# a='1200 sanchuang10,sanchuang12'
[root@sanchuang-linux ~]# s1=(a b c d e)
[root@sanchuang-linux ~]# s2=($a) # 注:转化为数组
[root@sanchuang-linux ~]# echo $s2
1200
[root@sanchuang-linux ~]# echo $s2[@]
1200[@]
[root@sanchuang-linux ~]# echo ${s2[@]} # 注:获取数组里全部元素
1200 sanchuang10,sanchuang12
[root@sanchuang-linux ~]# echo ${#s2[@]} # 注:获取数组长度
2
[root@sanchuang-linux ~]# echo ${#s2} # 注:获取第一个元素 字符的长度
4
[root@sanchuang-linux ~]# echo ${s2[0]} # 注:获取数组里第一个元素
1200
[root@sanchuang-linux ~]# echo ${s2[1]} # 注:获取数组里第二个元素
sanchuang10,sanchuang12
group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
#注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
#注:获取数组里第一个元素
group_lst=($group_msg) #注:转变成数组
group_id=${group_lst[0]} # 注:gid
group_user_1=${group_lst[1]} # 注:该组(次要组)成员
[root@sanchuang-linux ~]# vim group_member.sh
#!/bin/bash
group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
#注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
#注:获取数组里第一个元素
group_lst=($group_msg) #注:转变成数组
group_id=${group_lst[0]}
group_user_1=${group_lst[1]}
#注:获取/etc/passwd 主要组 成员;tr "\n" "," 指定分隔符为,;过滤出 $4==group_id 的行
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd|tr "\n" ","`
echo $group_user_2$group_user_1 # 注:直接拼接 不需要加“+”号
[root@sanchuang-linux ~]# sh group_member.sh sanchuang5
sanchuang13,sanchuang10,sanchuang12
[root@sanchuang-linux ~]# cat /etc/passwd
sanchuang13:x:1034:1200::/home/sanchuang13:/bin/bash # 注:gid 位置 $4
总结:查看组中有哪些成员
#shell与awk参数传递:
https://blog.csdn.net/imzoer/article/details/8738581
[root@sanchuang-linux ~]# cat group_member2.sh
#!/bin/bash
group_name=$1
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
group_lst=($group_msg)
group_id=${group_lst[0]}
group_user_1=${group_lst[1]}
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd| tr "\n" ","`
echo $group_user_2$group_user_1
[root@sanchuang-linux ~]# sh group_member2.sh sanchuang5
sanchuang13,sanchuang10,sanchuang12
知识点3 group操作
知识点3.1 groupadd groupdel
groupadd命令
格式:groupadd [-g GID] 组帐号名
groupdel命令
格式:groupdel 组帐号名
示例:groupadd groupdel
[root@sanchuang-linux ~]# groupadd -g 5000 sanle # 注:创建gid为5000的sanle组
[root@sanchuang-linux ~]# less /etc/group #↑注:添加组账号sanle
sanle:x:5000:
[root@sanchuang-linux ~]# groupdel sanle # 注:删除组账号sanle
[root@sanchuang-linux ~]# less /etc/group # 注:没有了
知识点3.2 groupmod newgrp
groupmod命令
·用途:设置组名和组id
·格式:groupmod [选项]… 组帐号名
常用命令选项
·-n:修改组名
·-g:修改组id
newgrp改变有效组
·用户必须是要改变组的成员
有效组:(用的很少)
新建文件或者文件夹的时候,使用的gid
gid使用哪个组,哪个就是有效组
示例:newgrp改变有效组
[root@sanchuang-linux lianxi]# ll # 注:ll查看目录详细信息
-rw-r--r--. 1 root root 86 9月 25 14:23 abcd.txt
-rw-r--r--. 1 root root 158 9月 25 09:47 backup_log.sh
#注:第一个root是文件的 属主
#注:第二个root是文件的 属组
[root@sanchuang-linux lianxi]# newgrp sanchuang4
[root@sanchuang-linux lianxi]# touch aa
[root@sanchuang-linux lianxi]# ll
-rw-r--r-- 1 root sanchuang4 0 11月 6 11:25 bb # 注:属组发生改变
[root@sanchuang-linux lianxi]# su - sanchuang10
[root@sanchuang-linux lianxi]# touch cc
[sanchuang10@sanchuang-linux ~]$ ll
总用量 0
-rw-r--r-- 1 sanchuang10 sanchuang4 0 11月 6 11:27 cc
[sanchuang10@sanchuang-linux ~]$ newgrp sanchuang # 注:普通用户想切换有效组,有效组里面必须有这个普通用户
密码:
newgrp: failed to crypt password with previous salt: 无效的参数
#注:普通用户想切换有效组,有效组里面必须有这个普通用户
知识点3.3 Linux组帐号
Linux组帐号
·主要组(私有组)
与用户相关的默认组,在/etc/passwd文件的第四个字段定义
·次要组(附属组)
用户可以同时属于其他的组,在/etc/group文件的第四个字段定义
用户的主要组的名称和GID相关
知识点4 gpasswd命令
gpasswd命令
·用途:设置组帐号密码(极少用)、添加/删除组成员
·格式:gpasswd [选项]… 组帐号名
示例:删除组成员root
[root@localhost ~]# gpasswd -d root market
正在将用户“root”从“market”组中删除
示例:设置组账号密码
[root@sanchuang-linux ~]# gpasswd sanchuang
正在修改 sanchuang 组的密码
新密码:
请重新输入新密码:
[root@sanchuang-linux ~]#
知识点5 linux加密
Linux加密
默认采用sha512算法
采用哈希算法–》散列值求取
把任意长度的输入,映射成固定长度的输出,该输出就是散列值
是一种单向加密技术
hash算法:md5 sha1 sha2 sha256 sha512
示例:md5sum
[root@sanchuang-linux ~]# echo "123456"|md5sum # 注:md5sum也是一种哈希算法
f447b20a7fcbf53a5d5be013ea0b15af - # 注:无论给的是 都会返回特点长度的输出
[root@sanchuang-linux ~]# echo "123456xyzzzzz"|md5sum # 注:单向加密的算法
bcdd6694d1ece311bd7bd668da54b9b9 -
[root@sanchuang-linux ~]# echo "xxxxxxxxxxxxxxxxxxxxxxxx"|md5sum
7373d8394616d74ba2c42402266ae3aa -
示例:撞库 加盐
#注:撞库
[root@sanchuang-linux ~]# echo "123456"|md5sum # 注:加密字符串相同,输出的散列值相同
f447b20a7fcbf53a5d5be013ea0b15af -
[root@sanchuang-linux ~]# echo "123456"|md5sum
f447b20a7fcbf53a5d5be013ea0b15af -
#注:加盐 # 注:提高密码安全性
[root@sanchuang-linux ~]# echo "123456xndfoaei242"|md5sum # 注:xndfoaei242 盐值
15465f7aa2929cca95ed7efb97ffeba0 -
示例
root:$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0::0:99999:7:::
密码字段:
加
密
算
法
i
d
加密算法id
加密算法id盐值$真正的密文
加密底层使用内核的crypt函数实现
python实现(sha512)
>>> import crypt
>>> crypt.crypt('123456','$6$i4J5vzOUIMpchLRj') # 注:$加密算法id$盐值,密文和上面相同
'$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0'
$6 代表sha512算法
$i4J5vzOUIMpchLRj 盐值
$nTCbYWgA5cpv……aeq0 真正的密文
哈希算法用途:用来判定文件md5值是否改变
知识点6 /etc/login.defs文件
/etc/login.defs文件
·对账户初始的属性设置
·设置普通用户的UID和GID范围等
示例
[root@sanchuang-linux ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail # 注:设置默认地址
PASS_MAX_DAYS 99999 # 注:密码的过期天数
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
知识点7 useradd命令在后台到底做了哪些工作?
知识点8 /etc/skel/*文件
/etc/skel/*文件
·新建用户帐号时,复制到用户宿主目录中
主要控制用户初始配置文件
.bash_profile: 用户每次登录时执行
.bashrc: 每次进入新的Bash环境时执行
.bash_logout: 用户每次退出登录时执行
.bash_history : 记录存放上次注销前使用的历史命令
登陆的时候:
.bash_profile
~/.bash_profile --> ~/.bashrc --> /etc/bashrc
进入新bash环境:
~/.bashrc --> /etc/bashrc
#注:登录的时候都会执行 .bash_profile
#注:登录的时候都会执行 .bashrc # 注:.bash_profile里面调用了.bashrc
#注:登录的时候 先执行.bash_profile,.bash_profile里面调用了.bashrc
#注:进入了一个新的bash环境,执行.bashrc
#注:到新bash环境下,执行了.bashrc,不执行.bash_profile。登录时执行.bash_profile
/etc/bashrc 系统用户的环境设置,别名设置,其他的函数
/etc/bashrc 相当于全局配置,此文件只能root用户修改 # 注:/etc/bashrc 只有root用户才能修改
~/.bashrc 个人配置,个性化配置,自己家目录下有权限修改 # 注:家目录下的.bashrc文件
/etc/profile 系统全局用户环境配置
~/.bash_profile 个人配置
原因:
全局配置,影响所有用户。
家目录下配置,影响当前用户。
示例:家目录下配置
[root@sanchuang-linux ~]# less .bash_profile
# .bash_profile
if [ -f /etc/bashrc ]; then # 注:判断有没有 /etc/bashrc,有就在当前执行/etc/bashrc
. /etc/bashrc # 注:/etc/bashrc 执行初始化的用户环境设置
fi # 注:用. 去执行,. 代表当前bash
PATH=$PATH:$HOME/bin
export PATH
[root@localhost ~]# less .bashrc
# .bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
if [ -f /etc/bashrc ]; then
. /etc/bashrc # 注:最终执行的是这个文件
fi
[root@sanchuang-linux ~]# which ls # 注:ls执行的是/usr/bin/ls,通过PATH环境变量从前往后找
alias ls='ls --color=auto'
/usr/bin/ls
示例:/etc/skel/*文件
#注:新建用户帐号时,复制到用户宿主目录中
[root@sanchuang-linux ~]# cd /etc/skel/
[root@sanchuang-linux skel]# ls -al
总用量 24
drwxr-xr-x. 2 root root 62 9月 16 13:23 .
drwxr-xr-x. 90 root root 8192 11月 6 15:15 ..
-rw-r--r--. 1 root root 18 11月 9 2019 .bash_logout
-rw-r--r--. 1 root root 141 11月 9 2019 .bash_profile
-rw-r--r--. 1 root root 312 11月 9 2019 .bashrc
示例:.bash_history 记录存放上次注销前使用的历史命令
.bash_history 存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件
第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里
[root@sanchuang-linux ~]# history #注:history只是查看当前用户的命令历史
#注:用户退出时,命令历史才会写入.bash_history
#注:新建用户时,不会生成.bash_history文件,只有退出后 再次登录 才会生成.bash_history文件
#注:不是所有的命令都写入history,不是很准确
[root@sanchuang-linux ~]# cat .bash_history # 注:在当前用户的家目录下查看.bash_history文件
练习9 每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log
步骤
1.在sanchuang用户下,修改.bash_profile文件,添加 # 注:因为每次登陆都会先执行这个文件
now_date=`date`
echo $now_date"login..." >> /tmp/sanchuang_log
2.在sanchuang用户下,修改.bash_logout文件,添加 # 注:因为每次退出时都会执行这个文件
now_date=`date`
echo $now_date"logout..." >> /tmp/sanchuang_log
3.监控文件变化,新增末尾行 # 注:经常用 tail -f 监控文件
$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化(新增的末尾行)
示例
[root@sanchuang-linux log]# su - sanchuang # 注:普通用户 在自己的家目录下操作
上一次登录:五 11月 6 14:59:23 CST 2020pts/1 上
[sanchuang@sanchuang-linux ~]$ vim ~/.bash_profile # 注:家目录下的.bash_profile操作
now_date=`date`
echo $now_date"login..." >> /tmp/sanchuang_log
[sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化
2020年 11月 06日 星期五 15:05:26 CSTlogin...
[sanchuang@sanchuang-linux ~]$ vim ~/.bash_logout
now_date=`date`
echo $now_date"logout..." >> /tmp/sanchuang_log
[sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化
2020年 11月 06日 星期五 15:05:26 CSTlogin...
2020年 11月 06日 星期五 15:07:33 CSTlogout...
知识点10 Shell启动配置文件的区别
Shell启动配置文件的区别
· /etc/profile: 配置全局环境变量,影响所有用户
· ~/.bash_profile : 配置个人环境,影响一个用户
· /etc/bashrc : 配置全局的别名或者shell选项,影响所有用户
· ~/.bashrc : 配置个人别名或者shell选项,影响一个用户
知识点11 .bash_history
.bash_history
存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件
第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里
知识点12 bash的启动脚本初始化
知识点13 用户和组账户查询
id命令
·用途:查询用户身份标识
·格式:id [用户名]
who、w、users命令
·用途:查询已登录到主机的用户信息
groups命令
·用途:查询用户所属的组
last、lastlog命令使用
示例:w who
[root@sanchuang-linux ~]# w # 注:看的是你以哪个用户登录进来,而不是当前你切换到的用户
15:26:24 up 6:11, 6 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 四15 58:07 0.07s 0.07s -bash # 注:tty真实终端
root pts/0 192.168.0.42 14:28 0.00s 0.18s 0.01s w # 注:远程登录pts虚拟终端
root pts/1 192.168.0.42 14:28 12:24 0.07s 0.01s -bash
#注:真实终端FORM为空
#注:虚拟终端显示的是物理机的ip地址
#注:WHAT当前环境做的事情
#注:15:26:24 当前时间
#注:6:11 开机总时间
#注:6 users 登录用户数量
#注:load average cpu平均负载,数值越大,机器越繁忙
[root@sanchuang-linux ~]# who # 注:看的没有w详细
root tty1 2020-11-05 15:13
root pts/0 2020-11-06 14:28 (192.168.0.42)
root pts/1 2020-11-06 14:28 (192.168.0.42)
[root@sanchuang-linux ~]# users # 注:查看当前有哪些用户登录
root root root root root root
[root@sanchuang-linux ~]# groups sanchuang10 # 注:显示用户所属的基本组和附加组
sanchuang10 : sanchuang4 sanchuang5
[root@sanchuang-linux ~]# id sanchuang10
uid=1032(sanchuang10) gid=1100(sanchuang4) 组=1100(sanchuang4),1200(sanchuang5)
[root@sanchuang-linux ~]# last # 注:查看之前有哪些用户登录过
root tty1 Wed Sep 16 13:41 - 13:41 (00:00)
root pts/0 192.168.136.1 Wed Sep 16 13:29 - 13:40 (00:11)
reboot system boot 4.18.0-193.el8.x Wed Sep 16 13:26 - 13:42 (00:15)
[root@sanchuang-linux ~]# lastlog # 注:查看每一个用户的最近登录状态
用户名 端口 来自 最后登陆时间
root pts/0 五 11月 6 15:18:46 +0800 2020
bin **从未登录过**
shutdown **从未登录过**
知识点14 终端设备名称
终端设备名称
名称 设备
ttyn 虚拟控制台
pts/n 伪终端
:0 X服务器
知识点15 文件/目录的权限
文件/目录的权限
访问权限
·可读(read):允许查看文件内容、显示目录列表
·可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
·可执行(execute):允许运行程序、切换目录
归属(所有权)
·文件拥有者(owner):拥有该文件或目录的用户帐号
·属组(group):拥有该文件或目录的组帐号
·其它人(others):除了属主和属组的其他人
#注:区分是对于文件而言还是对于目录而言
示例1:查看文件权限 ls -al
[root@sanchuang-linux ~]# ls -al #注:查看文件权限
总用量 668
-rw-r--r--. 1 root root 211 9月 18 10:31 '!'
dr-xr-x---. 21 root root 12288 11月 6 15:16 .
[root@sanchuang-linux ~]# ls -al zuoye.sh # 注:查看单个文件权限
-rw-r--r--. 1 root root 1212 10月 29 20:20 zuoye.sh
[root@sanchuang-linux ~]# ls -al /home # 注:查看/home目录下所有文件的权限
总用量 18348
drwxr-xr-x. 43 root root 4096 11月 6 15:36 .
dr-xr-xr-x. 38 root root 4096 11月 5 15:12 ..
[root@sanchuang-linux ~]# ls -al *.sh # 注:查看文件权限
-rw-r--r--. 1 root root 0 9月 25 09:35 backup_log.sh
-rw-r--r--. 1 root root 41 10月 28 20:27 file_test.sh
示例2:查看目录权限 ls -ld /home
[root@sanchuang-linux ~]# ls -ld /home # 注:查看/home 目录的权限
drwxr-xr-x. 43 root root 4096 11月 6 15:36 /home
知识点16 文件/目录的权限
[root@localhost ~]# ls -ld first.py
-rw-r--r--. 1 root root 1097 10月 13 10:20 first.py
文件类型 访问权限 所有者 属组
示例:drwxr-xr-x
第一列:表示文件类型与权限
第一个字符
- 普通文件 file
d 表示目录
s 表示socket文件 # 注:socket(套接字) 进程之间通信的一种方式。
p 管道文件 pipe
c 字符设备文件 tty
b 块设备文件 磁盘(disk)
#权限 r 可读 w 可写 x 可执行
·第2-第4个字符
表示属主的权限
·第5-第7个字符
表示属组的权限
·后三个
表示其他人的权限
知识点17 socket(套接字)
#注:socket(套接字) 进程之间通信的一种方式,通常用于不同主机不同进程之间的通信方式(网络编程)
ftp有vsftp的服务,vsftpd服务端服务起来了开启21号端口。ftp客户端要想连接这个服务,ftp客户端需要开启一个随机端口去连接21号端口,进行网络传输。通过网络指定某种特定协议,进行网络连接。
开启一个vsftpd,会产生一个socket文件
开放了端口基本上都会有一个socket文件
[root@localhost mail]# cd /data/mysql
[root@localhost mysql]# ls -al
srwxrwxrwx 1 mysql mysql 0 10月 7 12:04 mysql.sock # 注:s socket文件 (粉色)
知识点18 Linux内核五大子系统
Linux内核五大子系统:
1、文件系统
2、内存管理
3、进程通信
4、进程调度
5、网络接口
知识点19 进程
进程是系统进行资源分配的基本单位,不同进程之间资源是互相隔离的
进程之间通信:
1、管道
2、信号 (kill -9)
3、共享内存
4、socket套接字
5、消息队列
示例1:管道 #注:管道是进程之间通信的一种方式
示例
[root@sanchuang-linux ~]# cat /etc/passwd |grep sanchuang # 注:通过管道把前进程的输出赋给后进程的输入
sanchuang:x:1005:1005::/home/sanchuang:/bin/bash
#注:适用于相同主机不同进程
示例2:信号
示例:kill -9 pid
[root@sanchuang-linux ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1………………
[root@sanchuang-linux ~]# ps -ef |grep nginx
root 5868 5691 0 16:29 pts/0 00:00:00 grep --color=auto nginx
[root@sanchuang-linux ~]# kill -9 2868 # 注:发送9这个信号给1209进程
示例3:共享内存
#注:A、B之间创建了一片新的内存空间,可以一起去拿
#注:适用于相同主机不同进程
示例4:socket套接字
#注:用于不同主机之间不同进程 网络通信
示例5:消息队列
#注:相当于排队的 1,2,3,4,5,6
#注:AB共享的内存空间里,A产生的B去获取。A产生1,B取出来,1从A里出去
知识点20 /根目录下
/etc 存放配置文件
/dev 存放设备文件 # 注:硬件相关的 磁盘、网卡、socket
/root # 注:root用户家目录
/home # 注:存放普通用户的家目录文件
[root@sanchuang-linux ~]# cd /dev
[root@sanchuang-linux dev]# ls -al
crw-rw-rw- 1 root tty 5, 0 11月 6 11:32 tty # 注:字符设备文件 tty
crw--w---- 1 root tty 4, 0 11月 5 15:12 tty0
crw--w---- 1 root tty 4, 1 11月 6 14:28 tty1
brw-rw---- 1 root disk 8, 0 11月 5 15:12 sda # 注:块设备文件 磁盘
知识点21 可执行权限
#权限 r 可取 w 可写 x 可执行
第2-第4个字符
表示属主的权限
第5-第7个字符
表示属组的权限
后三个
表示其他人的权限
示例
[root@sanchuang-linux ~]# ls -al men_test.sh
-rw-r--r--. 1 root root 0 10月 30 16:26 men_test.sh
[root@sanchuang-linux ~]# bash men_test.sh # 注:使用bash解释器去执行(生成一个新的bash)
[root@sanchuang-linux ~]# sh men_test.sh # 注:使用sh解释器去执行(生成一个新的sh)
[root@sanchuang-linux ~]# . men_test.sh # 注:使用当前bash去执行,会继承当前环境变量
#注:相当于当前bash,当前环境
[root@sanchuang-linux ~]# ./men_test.sh # 注:权限不够,本身没有可执行权限
-bash: ./men_test.sh: 权限不够 # 注:有可执行权限的文件 可以直接./men_test.sh执行
知识点22 Shell文件执行方式
Shell文件执行方式(3种)
[root@sanchuang-linux ~]# vim test_aa.sh
echo "testaa..."
echo $a
echo $b
[root@sanchuang-linux ~]# a=1
[root@sanchuang-linux ~]# b=2
[root@sanchuang-linux ~]# . test_aa.sh # 注:使用当前bash去执行test_aa.sh,会继承当前环境变量
testaa...
1
2
[root@sanchuang-linux ~]# bash test_aa.sh # 注:创建一个新的bash环境去执行命令
testaa... # 注:新bash中没有定义a、b变量
# 注:没有输出父bash的a、b
[root@sanchuang-linux ~]# sh test_aa.sh # 注:创建一个新的sh环境去执行命令
testaa...
# 注:没有输出
[root@sanchuang-linux ~]# ./test_aa.sh # 注:执行文件本身,没有可执行权限
-bash: ./test_aa.sh: 权限不够
总结
. test_aa.sh 不需要可执行权限 当前bash进程执行
bash test_aa.sh 不需要可执行权限 新的bash进程运行
sh test_aa.sh 不需要可执行权限 新的bash进程运行
./test_aa.sh 需要可执行权限 新的bash进程运行
知识点23 chmod命令
chmod命令
格式1:chmod [ugoa] [±=] [rwx] 文件或目录…
·u、g、o、a 分别表示
u属主、g属组、o其他用户、a所有用户
·+、-、= 分别表示
+增加、-去除、=设置权限
·rwx
对应的权限字符
常用命令选项
·-R:递归修改指定目录下所有文件、子目录的权限
示例
[root@sanchuang-linux ~]# chmod u+x men_test.sh # 注:对属主+可执行权限
[root@sanchuang-linux ~]# ls -al men_test.sh
-rwxr--r--. 1 root root 0 10月 30 16:26 men_test.sh # 注:可执行文件 都是绿的
#注:可执行文件 都是绿的
#注:socket文件 都是粉的
[root@sanchuang-linux ~]# ./men_test.sh # 注:可以直接执行了
[root@sanchuang-linux lianxi]# chmod a-x sc -R # 注:-R递归,把该目录和该目录下的所有子文件都去除可执行权限
[root@sanchuang-linux lianxi]# chmod a+x sc -R
#注:根目录只有root用户能用
[root@sanchuang-linux ~]# ls -ld /
dr-xr-xr-x. 38 root root 4096 11月 5 15:12 /
[root@mysql-binary ~]# chmod u+x group_member.sh
[root@mysql-binary ~]# ./group_member.sh sanchuang5 # 注:添加了可执行权限后可以 ./运行
sanchuang5,sanchuang11,sanchuang13,sanchuang10,sanchuang12
知识点24 chmod命令
chmod命令
格式2:chmod nnn 文件或目录… # 注:nnn表示3位八进制数
权限项 读 写 执行 读 写 执行 读 写 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1
权限分配 文件所有者 文件所属组 其他用户
常用命令选项
·-R:递归修改指定目录下所有文件、子目录的权限
示例
[root@sanchuang-linux ~]# chmod 777 sc # 注:都有读写执行的权限
[root@sanchuang-linux ~]# chmod 700 sc # 注:属主有读写执行的权限
[root@sanchuang-linux home]# ls -ld sanchuang # 注:查看目录权限 ls -ld
drwx------. 4 sanchuang sanchuang 122 11月 6 17:10 sanchuang
[root@sanchuang-linux home]# chmod 777 /home/sanchuang # 注:都有读写执行的权限
[root@sanchuang-linux home]# ls -ld sanchuang
drwxrwxrwx. 4 sanchuang sanchuang 122 11月 6 17:10 sanchuang
[root@sanchuang-linux home]# chmod 777 /home/sanchuang -R # 注:-R:递归修改指定目录下所有文件、子目录的权限
[root@sanchuang-linux home]# ls -ld sanchuang
drwxrwxrwx. 4 sanchuang sanchuang 122 11月 6 17:10 sanchuang
#注:用户的家目录下(如/home/sanchuang)授予所有对象读写执行权限,会造成普通用户sanchuang无法进行远程登录