Linux02(目录、文件、用户、用户组管理)
目录
rootfs:根文件系统
/boot:引导文件存放目录,内核文件(vmlinuz)、initrd、引导加载器(bootloader,grub)都存放于此目录
/bin:可执行文件,所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
静态库,.a
动态库, .dll, .so(shared object)
/lib/modules:内核模块文件
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home:管理员的家目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b:block device,随机访问,数据块
c:character device,线性访问,按字符为单位
设备号:主设备号(major)和次设备号(minor)
/opt: 第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared,read-only data
bin:保证系统拥有完整功能而提供的应用程序
sbin:
lib:32使用
lib64:只存在64位系统
include:c程序的头文件(header files)
share:结构化独立的数据,例如doc,man等
local:第三方应用程序的安装位置
bin,sbin,lib,lib64,etc,share
/proc:用于输出内核与进程信息相关的虚拟文件系统,伪文件系统;当系统没启动时,该文件夹时空的,当系统启动时,这个文件夹显示的是内核的映射(映像)文件
/sys:伪文件系统;跟硬件设备相关的属性映射文件
/selinux:security enhanced Linux,selinux相关的安全策略等信息的存储位置
# bin,sbin下是跟系统启动相关的命令
/usr(shared,read-only):全局的共享的只读文件
/usr/bin
/usr/sbin
/usr/lib
# usr下bin、sbin在系统自身启动起来以后,为了提供一些基本功能应该具备的命令或者可执行程序
/usr/local:
/usr/local/bin
/usr/local/sbin
/usr/local/lib
命名规则:
1.文件名长度不能超过255个字符;
2.不能使用/当文件名;
3.严格区分大小写;
# 应用程序的组成部分
二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc/,/etc/DIRECTORY,/usr/local/etc
帮助文件:/usr/share/man,/usr/share/doc,/usr/lcoal/share/man,/usr/local/share/doc
# CentOS7以后版本目录结构变化
/bin和/usr/bin
/sbin和/usr/sbin
/lib和/usr/lib
lib64和/usr/lib64
范例:
#CentOS7
[root@nat ~]# ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 Mar 28 2021 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Mar 28 2021 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 28 2021 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Mar 28 2021 /sbin -> usr/sbin
#CentOS6
[root@nat ~]# ls /bin /sbin /lib /lib64 -ld
lrwxrwxrwx. 1 root root 7 Mar 28 2021 /bin
lrwxrwxrwx. 1 root root 7 Mar 28 2021 /lib
lrwxrwxrwx. 1 root root 9 Mar 28 2021 /lib64
lrwxrwxrwx. 1 root root 8 Mar 28 2021 /sbin
#ubuntu
[20:29:06 root@zhangchao]#ll /bin /usr/bin -d
drwxr-xr-x 2 root root 4096 Nov 7 2021 /bin/
drwxr-xr-x 2 root root 20480 Jun 14 10:56 /usr/bin/
相对路径
绝对路径
# basename命令 和dirname命令
basename:基名,只取文件名而不要路径
basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
dirname:只取路径,不要文件名
dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
文件管理
目录管理
ls
cd
cd - # 返回到上一次的目录
pwd:当前目录路径
$OLDPWD:上一次目录路径
mkdir:创建空目录
-p:多级目录
-v:显示创建多级目录的创建信息
# mkdir -pv /root/m/n/l
1.如何一句命令创建/mnt/test/x/m,y?
方法一:mkdir -pv /mnt/test/x/m /mnt/test/y
方法二:mkdir -pv /mnt/test/{x/m,y}
2.如何在/mnt/test2下创建a_b,a_c,d_b,d_c文件夹?
(a+b)(c+d)=ab+ac+bc+bd
{a,b}_{c,d}
方法:mkdir -pv /mnt/test2/{a,b}_{c,d}
rmdir (remove directory) # 删除空目录
# 文件的创建何删除
1. touch # 本不是创建文件的命令,只是歪打正着了。
touch 文件名
# eg:touch a
2. nano 文件名
eg: nano abb
在Linux下在同一个文件夹下不能创建同一个名字的文件或文件夹
touch: # 它是改变文件的时间戳的命令
touch -c c # 表示不创建文件名为c的文件
touch -a a.txt # chang only the access time,不指定时间,默认将a.txt文件的权限时间修改成当前时间。
touch -m # chang onlu the modification time
touch -m -t 201810181818 a.txt # 表示将a.txt文件的modify时间改成指定的201810181818
stat: # 查看文件属性信息:主要是看Access Modify Change三种状态下的时间戳
stat 文件名
eg:stat a.txt
cp:
# 一个文件到一个文件,多个文件到一个目录
cp /etc/passwd /tmp 表示将etc下的passwd文件拷贝到tmp文件夹下,并且文件名还是passwd
cp /etc/passwd /tmp/test # 如果test不存在,表示将etc下的passwd文件拷贝到tmp下并重命名为test;如果test存在,1:如果test是个文件,则提醒我们是否要覆盖掉test文件;如果test是个目录,则将etc下的passwd拷贝到/tmp/test文件夹下,文件名仍是passwd。
# 如果源文件是多个文件,则目标必须是个目录
cp /etc/passwd /etc/issue /etc/inittab /tmp/abc # 这里abc必须存在,且是一个目录。
cp -a # 是把原文件或文件夹原样打包一份,归档复制,常用于备份。
cp -L # 拷贝原文件或者文件夹连接所指向的文件或者文件夹
cp -d # 只拷贝源文件或文件夹链接
# eg: cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp
mv: # 移动文件
1. mv 源文件或目录 目标文件或目录
# 如何将一个文件或目录重命名?
mv abc mn # 表示将当前目录下的abc文件重命名为mn,或者当前目录下的abc目录重命名位mn目录
# mv还有一种特殊用法!!!!!!!
2. mv -t 目标文件或目录 源文件或目录 # 加-t与1相反
install:
-d DIRECTORY...:创建目录
-m 指定修改文件的权限,不指定默认有执行权限
install -d /tmp/install.1 /tmp/install.2 等同于 install -d /tmp/{install.1,install.2} # 可以用来创建目录,可以同时创建多个。类似mkdir
install /etc/passwd /var/tmp/install.file # 表示将passwd文件拷贝到/var/tmp下,并重命名为install.file,但是install.file文件有了执行权限,可以通过-m指定权限。类似cp
install -t DIRECTORY SRC... # 表示将源文件或文件夹拷贝到DIRECRTORY中。类似cp
du: # 显示文件或目录所占用的磁盘空间。
-h 输出文件系统分区使用的情况,例如:10KB,10MB,10GB等
-s 显示文件或整个目录的大小,默认单位是KB
du -sh # 显示当前目录的大小
du -sh httpd # 显示某个目录或文件的大小
du -sh ./* # 显示当前目录下所有文件的大小
du -h --max-depth=1 # 查找占用空间最大的文件与目录
查看文件
1. cat
cat -n 文件名 # 显示文件的行号
cat -E /etc/issue # 对于Linux系统而言,文本文件的行结束符是$符;而windows的文本行结束符是$+enter(回车)
2. tac
tac /etc/issue # 将issue文本逆向显示,与cat显示文本的方式相反。
3. more # 向后翻,向前翻到最后一行自动推出
4. less # 向前翻,到最后一行不会退出,按q键推出
5. head
head -n 5 /etc/passwd # 指定显示文件的前5行,不指定行数,默认显示开头的10行
6. tail
tail -n -5 /etc/passwd # 指定显示文件的后5行,不指定行数,默认显示末尾的10行
tail -f /tmp/hello.txt # 显示hello文本的后 行内容,并且不会退出;此时如果有其它进程往这个文本末尾追加内容,等待显示新增加内容
文本处理
# cut join sed awk
1. cut
-d # 指定字段分隔符,不指定的话,默认是空格;
-f # 指定要显示的字段 -f1:表示显示第一个字段 -f 1,3表示显示1和3字段 -f 1-3 表示显示1到3的字段
eg:
cut -d : -f1 /etc/passwd
cut -d : -f 1,2 /etc/passwd
cut -d : -f 1-3 /etc/passwd
2. join
文本排序
# sort
1. sort
-n:数值排序
-r:降序
-t:字段分隔符
-u:排序后相同的行只显示一次
-f:排序时忽略字符大小写
sort 文件名 # 按照ASCII码表对行进行升序排序
sort -n 文件名 # 按照数字大小进行升序排序
sort -r 文件名 # 按照ASCII码表对行进行逆序排序
sort -r -n # 按照数字大小进行降序排序
sort -t: -k3 /etc/passwd # 按照第3个字段,按照ascii码进行排序
sort -t: -k3 -n /etc/passwd # 按照第3个字段,按照数值大小进行排序
sort -n -u sort.test
2. uniq(report or omit repeated lines):# 报告相邻重复的行
uniq 文件名 # 将文件中相邻重复的行删除一行
uniq -d 文件名 # 只显示相邻重复的行,只显示重复行当中的一行
uniq -D 文件名 # 显示相邻重复行中的所有行
uniq -c 文件名 # 显示相邻每一行重复的次数
文本统计
wc(word count)
-l:只显示行数
-w:只显示单词数
-m:只显示字符数
-c:只显示字节数
-L:表示最长的一行包含多少个字符
字符处理命令
tr:转换或删除字符
tr [OPTION]... SET1 [SET2]
-d:删除出现在字符集中的所有字符
tr -d 'ab'
tr 'ab' 'AB'
tr 'a-z' 'A-Z' < /etc/passwd # 将passwd文本中全部的小写字母转换成大写字母 <是重定向
bash及其特性
shell:外壳
GUI:Gnome,KDE,Xfce
CLI:sh(bsh),csh,ksh(商业化的产品,需要付费才能使用,后来分为社区版和商业版),bash(兼具csh,ksh,比sh更加强大),tcsh(增强版),zsh(功能更加强大,但是还不是很流行),在红帽系列和众多的发行版上使用的都是bash,所以学习bash是首选。
history:
1.命令历史
bash会自动记录执行的命令,会将使用的命令放入缓冲区。
-c:清空命令历史
-d OFFSET [n]:
-w:保存命令历史至文件中
-n:
history -d 500 # 删除第500个命令
history -d 500 10 # 从第500个命令开始,删除10个命令
set +o history # 执行此命令之后,再执行其他的命令将不会被记录到.bash_history文件中
set -o history # 执行此命令之后,再执行其他命令将会记录到.bash_history文件中
命令历史的使用技巧:
!n: 执行命令历史中的第n条命令
!-n:执行命令历史的倒数第n条命令
!!:执行上一条命令
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数 # 方式1
# eg:nano !$
!*:将上一个命令的所有参数引用过来
!string 重复前一个以"string"开头的命令
!?string 重复其哪一个包含string的命令
^string 删除上一条命令中的第一个string
^sting1^string2 将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中的第一个string1替换为string2
使用up(向上)down(向下)键来上下浏览从前输入的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`':
Ctrl+g:从历史搜索模式退出
#重要新调用前一个命令中最后一个参数
!$ 表示前一个命令中最后一个参数
Esc,. 点击Esc键后松开,然后点击 . 键
Alt+ . 按住Alt键的同时点击 . 键
command !^ 利用上一个命令的第一个参数做command的参数
command !$ 利用上一个命令的最后一个参数做command的参数
command !* 利用上一个命令的全部参数做command的参数
command !:n 利用上一个命令的第n个参数做command的参数
command !n:^ 调用第n条命令的第一个参数
command !n:$ 调用第n条命令的最后个参数
command !n:m 调用第n条命令的第m个参数
command !n:* 调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的n个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
按下'ESC'键之后按'.',会自动弹出上一个变量;# 方式2
ALT+. # 方式3
输入命令的开头字母,连续两次'tab键',将显示与该字母开头的所有命令。
让文件中被执行的历史命令以指定的时间格式显示:
在/etc/profile.d/env.sh中编辑:export HISTTIMEFORMAT="%F %T " # F代表年月日,T代表时分秒。
2.管道、重定向
3.命令别名
alias 别名='COMMAND [options] [arguments]'
在shell 中定义的别名仅在当前shell生命周期中有效:别名的有效范围仅为当前shell进程。
# eg:
1. alias 查看系统中已命名的别名
2. alias cls=clear
取消别名:
unalias 别名
# eg: unalias cls
如果重命名的别名与命令相同且别名后带有参数,想使用原命令,需要 \CMD
4.命令行编辑bash的快捷键
Ctrl+l:清屏,相当于clear命令
Ctrl+l 清屏,相当于clear命令
Ctrl+o 执行当前命令,并重新显示本命令
Ctrl+s 阻止屏幕输出,锁定
Ctrl+q 允许屏幕输出,解锁
Ctrl+c 终止命令
Ctrl+z 挂起命令
Ctrl+a 光标移到命令行首,相当于Home
Ctrl+e 光标移到命令行尾,相当于End
Ctrl+f 光标向右移动一个字符
Ctrl+b 光标向左移动一个字符
Ctrl+xx 光标在命令行首和光标之间移动
Alt+f 光标向右移动一个单词位
Alt+b 光标向左移动一个单词位
Ctrl+u 从光标处删除至命令行首
Ctrl+k 从光标处删除至命令行尾
Alt+r 删除当前整行
Ctrl+w 从光标处向左删除至单词首
Alt+d 从光标处向右删除至单词尾
Alt+Backspace 删除左边单词
Ctrl+d 删除光标处的一个字符
Ctrl+h 删除光标前的一个字符
Ctrl+y 将删除的字符粘贴至光标后
Alt+c 从光标处开始向右更改为首字母大写的单词
Alt+u 从光标处开始,将右边一个单词更改为大写
Alt+l 从光标处开始,将右边一个单词更改为小写
Ctrl+t 交换光标处和之前的字符位置
Alt+t 交换光标处和之前的单词位置
Alt+# 提示输入指定字符后,重复显示该字符#次
注意:Alt组合快捷键经常和其他软件冲突
范例:xshell中启动alt键 # 如下图
5.命令行展开
6.文件通配符:# 通过 man 7 glob 命令查看特殊字符的通配符
*:任意长度的任意字符
?: 任意单个字符,如果需要匹配指定个数的字符,就需要指定个数的'?'
~:当前用户家目录
~zhang:用户zhang的家目录
~+和. :当前工作目录
~- : 前一个工作目录
[0-9]: 匹配数字范围
[a-z]:一个字母
[A-Z]:一个字母
[zhang]:匹配列表中的任何的一个字符
[^wang]:匹配列表中的所有字符以外的字符
[^a-z]:匹配列表中的所有字符以外的字符
[]: 匹配指定范围内的单个字符,eg:[abc],[a-m],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]
[^]:匹配指定范围之外的任意单个字符,eg:ls [^0-9]*
另外还有在Linux系统中预定义的字符类:man 7 glob
[:space:]: 空白字符
[:punct:]: 所有的标点符号
[:digit:]:任意数字,相当于0-9
[:lower:]: 小写字母
[:upper:]: 大写字母
[:alpha:]: 大小写字母
[:alnum:]: 数字和大小写字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
# eg: 如何表示字母开头、字母结尾、中间有空格的文件?
[[:alpha:]]*[[:space:]]*[[:alpha:]]
7.变量
环境变量:
PATH:命令搜索路径
HISTSIZE:命令历史缓冲区大小
SHELL:用于保存当前用户默认shell的
8.编程
9.bash支持的引号有3种:
``:里面的内容必须是能执行的命令并且有输出信息,变量和命令都识别,并且会将反向单引号的内容当成命令进行执行后,再交给调用反向单引号的命令继续,“最聪明”
"":弱引用,不能识别命令,可以识别变量,“半傻不精”
'':强引用,六亲不认,变量和命令都不识别,都当成了普通的字符串,“最傻”
范例:
echo "This is system's name is $(hostname)"
This is system's name is zhangchao.com
echo "I am `whoami`"
I am root
touch $(date +%F).log
ls
2021-04-09.log
touch `date +%F`.txt
touch `hostname`-`date+%F`.log
touch `date +%F_%H-%M-%S`.log
touch `date -d '-1 day' +%F`.log
命令替换: $(COMMAND),使用反引号也是一样的 `COMMAND`
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
$(COMMAND) 或 `COMMAND`
范例:比较"",'',``三者的区别
echo "echo $HOSTNAME"
echo centos8.localdomain
echo 'echo $HOSTNAME'
echo $HOSTNAME
echo `echo $HOSTNAME`
centos8.localdomain
把命令中某个子命令替换为其执行结果的过程。
范例:$()和``
`echo`date +%F`.txt`
-bash: .txt command not found
ls: cannot access 'date':No such fule or directory
ls: cannot access '+%F': No such file or directory
ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Mar 20 20:37 2021-04-09
ll `echo $(date +%F).txt`
-rw-r--r-- 1 root root 0 Mar 20 20:37 2021-04-09
ll $(echo `date +%F`.txt)
-rw-r--r-- 1 root root 0 Mar 20 20:37 2021-04-09
echo 'the current directory is $(pwd)'
touch flie-$(date +%F-%H-%M-%S).txt
touch flie-`date +%F-%H-%M-%S`.txt
用户、组、权限
# 权限:r、w、x
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x:可执行,executable,可以命令提示符下当作命令提交内核运行;
目录:
r:可以对此目录执行ls以列出内部的所有文件;
w:可以在此目录创建文件;
x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
用户:UID,/etc/passwd
组:GID,/etc/group
影子口令:
用户:/etc/shadow # 用户密码的存放位置
组:/etc/gshadow # 组密码实际存放位置
用户类别:
管理员:# UID永远为0
普通用户:1-65535
系统用户:1-499,
一般用户:500-60000
用户组类别:
管理员组:
普通组:
系统组:
一般组:
用户组类别:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组
附加组,额外组:默认组以外的其它组
# 分析passwd文件下七个字段的所代表的含义
whatis passwd # 查看passwd有几个章节的慢文档
man 5 passwd # 第5个章节是对配置文件的说明
# /etc/passwd
account:登录名
password:密码 # 如果密码的位置是X,则x是一个占位符,密码真正的存放位置在shadow中
UID:
GID:基本组ID
comment:注释
HOME DIR:家目录
SHELL:用户的默认shell
# 分析shadow文件下七个字段的所代表的含义
whatis shadow # 查看shadow有几个章节的慢文档
man 5 shadow # 第5个章节是对配置文件的说明
# /etc/shadow
account:登录名
encrypted password:加密的密码
date of last password change: # 上一次修改密码的时间
minimum password age: # 最短使用天数
maximum password age:# 密码最长使用期限,99999天,表示永不过期
password warning period # 离过期之前的警告时间
password inactivity period: #
account expiration date:
reserved field
# 查看当前系统中由哪些可用的shell
cat /etc/shells
cat /etc/shadow:
两个 !! 表示不让其登录,所以如果不想让某个用户登录可以在shadow文件中对应的用户加上两个“!!”
$6,表示一种加密方式,其中$1是MD5加密。
用户管理
创建用户和添加密码
useradd(或者adduser) 用户名 # 普通用户或者root用户都可以创建新用户,只不过普通用户没办法给新建用户添加登录的密码,这样用户就没办法登录,要想创建的账户可以登录,需要用root用户给这个用户添加密码。创建用户时,会在passwd,shadow,group,gshadow中分别增加一条记录,只有在给新建用户创建密码后,在shadow中用户的密码才从‘!!’变成加密的密码
passwd 用户名 # 给新建用户添加密码,连续两次输入密码。
useradd
-u UID 用户名
-g GID 用户名 # 指定基本组
-G GID,... 用户名 # 指定额外组(附加组)
-c "COMMNET" 用户名 # 指定注释
-d(directory) /path/to/somedirectory # 创建用户时给用户指定家目录
-s shell路径 用户名 # 给新建用户指定shell,最好是/etc/shells文件中已存在的shell
-m -k # 如果用户没有家目录,强制给用户创建家目录, -m和-k一般组合使用,在创建用户时,指定-k,会把/etc/skel下的.logout .bash_history .bashrc .bash_profile复制到用户的家目录中
-M 用户名 # 创建用户,但不给其指定(创建)家目录(默认创建用户时,不指定家目录路径,就以用户名作为用户的家目录),这在 /etc/login.refs文件中都有配置说明,具体详细查看该文件。
-r:添加系统用户(会从0-499随机选一个uid作为用户的id,但是不能登录,也没有家目录,即使在/etc/passwd下给了路径,在/home文件夹下没有这个用户的家目录)
eg:useradd -r apache
删除用户
# id 查看用户信息
id # 显示当前用户的id信息
id 用户名 # 显示此用户的id信息
id -u # 只显示用户的uid信息
id -G # 只显示用户的gid信息
id -u -n # 显示用户的用户名
id -G -n # 显示用户的组名
# finger:查看用户账号信息
finger # 查看当前用户信息
finger USERNAME # 查看指定用户信息
finger -l USERNAME@host # 查看远程用户信息
userdel [OPTION] USERNAME
userdel 用户名 # 默认是不会删除这个用户的家目录的
-r 用户名 # 同时删除用户的家目录
修改用户账号属性
usermod
-u: # 修改用户的UID
-g: # 修改用户的GID
-a -G: # 不使用-a选项,会覆盖此前的附加组;使用-a则在原有的附加组基础之上追加新的附加组
-c:
-d: # 给用户指定新的家目录,通常和 -m一起使用,表示即给用户指定新的家目录,还给用户的家目录下的文件一起复制到新的家目录中。
-s: # 修改用户的shell
-l: # 修改用户的登录名
-L(Lock): # 锁定用户账号,锁定之后这个用户就不能登录了。
-U(Unlock): # 解锁账号
chsh(chageshell): # 修改用户的shell
chsh 用户名
chfh(change finger): # 修改账户注释信息(/etc/passwd7个字段中的comment)
chfh 用户名
用户密码管理
passwd 用户名
--stdin # 接收标准输入的。Linux的哲学思想是:尽量避免与用户交互
-l(lock):
-u(unlock)
-d(delete):# 删除用户密码,用户就不能登录了。
pwck: # 检查用户账号完整性
组管理
创建组
# cat /ect/group
用户组名:
用户密码:
GID:
以这个组为附加组的用户列表:
# 创建组
groupadd 组名 # 不指定组id,默认是从500以后的上一个组加1.
-g GID
-r: 添加一个系统组
eg:groupadd -r nginx
-n groupname
删除组
groupdel
给组加密码
gpasswd:为组添加密码,一般在切换组的时候使用。
newgrp 组名(必须是当前用户已经有的附加组): # 给当前用户切换组,第一次需要输入密码;如果再次切换为原来的组,直接exit退出即可。
组和用户联系题
-
change:修改用户密码的过期信息
-d: 最近一次的修改时间 -E: 过期时间 -I: 非活动时间 -m: 最短使用期限 -M: 最长使用期限 -W: 警告时间
用户权限管理
三类用户: u:属主(owner) g:属组(group) o:其他用户(other) ''' 每一类用户的权限都有8中权限的变化形式,有权限就加上对应权限,没有权限就用-代替,就是0-7的8进制位表示。 ''' chown:改变文件属主(只有管理员可以使用此命令) # chown USERNAME file... -R(recursive):修改目录及其内部文件的属主 --reference=/path/to/somefile file,... # 将flie的属主和属组设置的和/path/to下的somefile一样(设定新文件和参考文件一样) # chown也可以同时修改属主和属组 chown USERNAME:GRPNAME file... # 即改属主又改属组 chown :GRPNAME file... # 表示只改属组 chown USERNAME: file... # 和chown USERNAME:GRPNAME file... 效果一样 chown USERNAME:GRPNAME file... # 还支持-R选项,改变文件夹及其内部文件的属主和属组 chown USERNAME.GRPNAME flie... # 效果和:是一样的,都是同时改变属主和属组 chown -R USERNAME:GRPNAME Directory # 递归同时修改文件夹下的所有文件及文件夹的属组和属主 chgrp(修改文件或者文件夹属组):只有管理员才能使用此命令; chgrp 组名(已存在) flie... -R:默认只修改指定文件或文件夹的属组,如果要修改文件夹及其内部文件或文件夹的属组,要加-R选项。 --reference=/path/to/somefile file... # 和chown用法一样
文件权限管理
chmod: 修改文件的权限
1.修改三类用户的权限:
chmod 75 /tmp/abc.txt # 如果给的位数不够,会从前面补0,变成075
chmod 5 /tmp/abc.txt # 如果给的位数不够,会从前面补0,变成005
-R: # 同chown和chgrp,也支持-R
--reference=/path/to/somefile file... # 同chown和chgrp,也支持reference
2.修改某类用户或某些类用户权限:
u(user),g(group),o(other),a(all)
chmod 某类用户类别=MODE file...
chmod u=rwx /tmp/abc # 不支持的写法:chmod u=7 /tmp/abc
chmod g=rw /tmp/abc # 等同于 chmod g=rw- /tmp/abc
chmod o=rx /tmp/abc # 等同于 chmod o=r-x /tmp/abc
chmod g=r,o=r /tmp/abc # 同时修改两类用户只有读权限,等同于 chmod go=r /tmp/abc
chmod go=rw /tmp/abc # 表示修改g,o两类用户同时有读写权限
chmod g=rx,o= /tmp/abc # 给g用户读和执行的权限,o用户无权限。
3.修改某类用户的某位或某些位权限:
u,g,o,a
chmod 用户类别+|-MODE file...
chmod u-x /tmp/abc # 表示给u用户去掉执行权限
chmod u+x,g-x /tmp/abc # 同时给多类用户修改某一类权限,中间用逗号隔开
chmod a+x /tmp/abc # 将abc文件的3类用户都加上执行权限
小练习1:
1、新建一个没有家目录的用户openstack;
# useradd -M openstack
2、 复制/etc/skel为/home/openstack
# cp -r /etc/skel /home/openstack
3、 改变/home/openstack及其内部文件的属主属组均为openstack;
# chown -R openstack:openstack /home/openstack
4、 /home/openstack及其内部的文件,属组和其他用户没有任何访问权限;
# chmod -R go= /home/openstack
su - openstack
小练习2:
手动添加用户hive,基本组为hive(5000),附加组为(mygroup)。
1. nano /etc/group
2. nano /etc/passwd
3. nano /etc/shadow
4. cp -r /etc/skel/ /home/hive
5. chown -R hive.hive /home/hive # 修改属主(root)和属组(root)为hive
6. chmod -R go= /home/hive
# 经过以上6个步骤,用户hive还不能登录,只能通过管理员su过去,现在需要在/etc/passwd文件中hive用户对应的字段添加密码。
7.
方式1:passwd # 直接使用passwd命令生成
方式2:openssl passwd # 使用openssl命令生成md5形式的密码
8. 用openssl输入的明文密码登录
bc是一个计算器,可以进行数字运算 # 默认是没有保留小数位的精度的,可以在命令行打开bc之后,通过scale在命令行直接设置,比如:scale=2表示保留两位小数。
管理员与普通用户创建文件夹和文件的权限
管理员用户:
创建的目录权限:755
创建的文件权限:644
普通用户:
创建的目录权限:775
创建的文件权限:664
umask[遮罩码(用户创建文件或目录用到的遮罩码)]:
创建文件:666-umask
创建目录:777-umask
root用户的umask:022
普通用户的umask:002
'''
所以root用户和普通用户创建文件和目录的权限是以上的权限。。。。
'''
umask:命令显示遮罩码
umask 遮罩码 :可以用来设置遮罩码
eg:在普通用户下设置其遮罩码和root用户一样,均为022;
umask o22
之后再次创建文件的权限就是644,创建目录的权限就是755
umask:023
文件:666-023=643
目录:777-023=754
'''
实际用023的遮罩码在创建目录的权限符合我们设置的754,但是创建文件的权限没有变成643(3:写和执行权限),而是644;
得出结论:文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;
'''
umask:027 # 如果自己创建的文件或目录不想让别人看到,就使用027
修改普通用户的遮罩码和root用户一样,则创建的文件权限就是644,创建的目录权限就是755了。。。。如下图:
用户登录
站在用户登录角度来说,SHELL的类型:
# 登录式shell:
1. 正常通过某终端登录;
2. su - USERNAME; # 加 - 是完全切换
3. su -l USERNAME;
# 非登录式shell:
1. su USERNAME; # 不加 - 是半切换
2. 图形终端下打开命令窗口;
3. 自动执行的shell脚本;
bash的配置文件:
全局配置:
/etc/proflie,/etc/profile.d/*.sh,/etc/bashrc
个人配置:
~/.bash_profile, ~/.bashrc, ~/.bash_logout, .~/.bash_history
'''
如果想设置一个环境变量对所有的用户都生效,可以在/etc/proflie文件中定义,或者在/etc/profile.d/文件夹下创建一个以.sh结尾的文件,在这个文件中定义也可以。
如果只对当前用户生效,可以在当前用户的.bash_profile文件中添加这个环境变量。。。
'''
profile类的文件:
设定环境变量
运行命令或脚本(一般是用户登录前的一些准备工作,在用户登录时,在这个文件中定义执行某个脚本)
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件的顺序?
/etc/proflie --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell如何读取配置文件?
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
加密方法
对称加密:加密和解密使用同一个密码
公钥加密:每个密码成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单项加密,散列加密(由明文到密文,不可解密):提取数据特征码,常用于数据完整性校验
1. 雪崩效应 :初始条件微小改变,可能会引起结果的巨大变化(防止暴力破解)
2. 定长输出
MD5:Message Digest:128位的定长输出
SHA1:Secure Hash Algorithm(安全的hash算法),160位的定长输出。
w: # 看的是你以哪个用户登录进来,而不是当前你切换到的用户
who: # 看的没有w详细
users: # 查看当前有哪些用户登录
groups 用户名: # 显示用户所属的基本组和附加组
last: # 查看之前有哪些用户登录过
lastlog: # 查看每一个用户的最近登录状态
[root@server0 ~]# whatis passwd
passwd: nothing appropriate. # 如果查看帮助提示这个,请执行mandb重建帮助文档索引
[root@server0 ~]# mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man4'. Wait...mandb: can't open /usr/share/man/man/man4/crontabs.4: No such file or directory
mandb: warning: /usr/share/man/man4/run-parts.4.gz: bad symlink or ROFF `.so' request
Updating index cache for path `/usr/share/man/man8'. Wait...mandb: warning: /usr/share/man/man8/fsck.fat.8.manpage-fix.gz: ignoring bogus filename
mandb: warning: /usr/share/man/man8/numad.8.gz: whatis parse for numad(8) failed
Updating index cache for path `/usr/share/man/mann'. Wait...done.
Checking for stray cats under /usr/share/man...
Checking for stray cats under /var/cache/man...
Processing manual pages under /usr/share/man/cs...
Updating index cache for path `/usr/share/man/cs/man8'. Wait...done.
Checking for stray cats under /usr/share/man/cs...
Checking for stray cats under /var/cache/man/cs...
Processing manual pages under /usr/share/man/da...
Updating index cache for path `/usr/share/man/da/man8'. Wait...done.
Checking for stray cats under /usr/share/man/da...<----省略若干行--->
Checking for stray cats under /var/cache/man/local...
102 man subdirectories contained newer manual pages.
7346 manual pages were added.
0 stray cats were added.
0 old database entries were purged.
[root@server0 ~]# whatis mandb
mandb (8) - create or update the manual page index caches
权限、文件管理可参考博客:https://www.cnblogs.com/miaocbin/articles/11740305.html
设备管理
软件管理
进程管理
网络管理
命令小结:
目录管理:
ls/cd/pwd/mkdir/rmdir/tree
文件管理:
touch/stat/file/rm/cp/mv/nano
日期时间:
date/clock/hwclock/cal
文本处理:
cat/more/less/head/tail/cut/sort/uniq/grep