小红帽第4集:
Linux的文件管理,管道,用户组管理,用户权限管理
文件管理,命令别名和glob
文件管理
相关命令:cp,mv,rm
复制命令:cp
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
cp SRC DEST :SRC是文件
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中。
如果目标存在:
1、如果DEST是文件:将SRC中的内容覆盖至DEST中,此时建议为cp命令使用-i选项。
2、如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中。
cp SRC DEST :SRC…为多个文件
DEST必须存在且要为目录,其它情况均会报错。
cp SRC DEST :SRC是目录
对于源为目录时,要使用:-r选项进行递归复制。
1、如果DEST不存在,则创建指定目录,复制SRC目录中所有文件至DEST中。
2、如果DEST存在,如果DEST是文件,则报错。如果DEST是目录则将所有文件复制至DEST中。
常用选项:
-i, –interactive:交互式提醒。
-R, -r, –recursive:递归复制目录及内部的所有数据。
-a, –archive(归档):该选项主要用来做备份。same as -dR –preserve=all。
–preserve[=ATTR_LIST]:保持某些属性
default: mode(权限),ownership(属主,属组),timestamps(时间戳)。
additional attributes: context(安全上下文), links(符号链接), xattr(扩展属性), all(所有属性)。
-d same as –no-dereference –preserve=links :不追踪符号链接文件。
-p same as –preserve=mode,ownership,timestamps :保留文件的基本属性。
-v, –verbose:显示详细的过程信息。
-t, –target-directory=DIRECTORY :源和目标倒过来。
移动命令:mv 该命令和cp很是类似就不展开了
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
常用选项:
-i, –interactive:交互式提醒。
-f, –force:do not prompt before overwriting
删除命令:rm
rm [OPTION]… FILE…
常用选项:
-i:交互式
-f:强制删除不提醒
-r:递归删除
删除目录时常用:rm -rf DRC
文本编辑器:nano
全屏编辑器,类似windows下的记事本,简单易用,但是效率不高,后面会有vim的描述。
bash的基础特性(二)
1、命令别名(alias)
通过alias命令实现:
(1)直接运行alias命令可查看当前系统所有定义的别名。
(2)alias NAME=’VALUE’ 定义别名NAME,其相当于执行命令VALUE
注意:在命令行中定义的别名仅对当前shell进程有效,如果想永久有效,要定义在配置文件中:
配置文件有两种:
【1】仅对当前用户有效:~./bashrc
【2】所有用户都有效:/etc/bashrc
注意:编辑配置文件给出的新配置不会立即生效,如果要生效需要让bash重读配置文件。
bash重新读去配置文件的方法:
source /path/to/config-file
. /path/to/config-file
撤销定义的命令别名:unalias
unalias [-a] name [name …]:
-a:取消所有别名。
注意:如果别名同原命令的名称,则如果要执行原命令可使用”\ command”。
2、glob(globbing)
bash中用于实现文件名通配的机制
glob中的通配符:*,?,[]
(1)*:表示任意长度的任意字符。
比如:a*b:aab,ab,a123b都可以被a*b匹配到
(2)?:表示任意单个字符
比如:a?b:aab,abb
(3)[]:表示匹配制定范围内的任意单个字符
比如:[abc],[0-9],[a-z],[A-Z]等。
(4)[^]:表示匹配指定范围外的任意单个字符
比如: [ ^0-9]:除数字 [^0-9a-z]:只保留特殊字符
专用字符集合如下:
[:alnum:]:任意数字或字母 [:alpha:]:任意大小写字母 [:blank:]:空白
[:cntrl:]:控制字符 [:digit:]:任意数字相当于0-9 [:graph:]:图片
[:lower:]:任意小写字母 [:print:]:打印字符 [:punct:]:标点符号
[:space:]:空格 [:upper:]:任意大写字母 [:xdigit:]:16进制数字
glob的应用举例如下:
[zhangshuo@localhost test]$ #显示/tmp/test目录下所有以L开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录 |
3、bash的快捷键
Ctrl+l:清屏,相当于clear命令。
Ctrl+a:跳转到命令开始处,即命令行行首。
Ctrl+e:跳转至命令结尾处。
Ctrl+c:取消命令的执行。
Ctrl+u:删除命令行首至光标所在处的所有内容。
Ctrl+k:删除光标所在处至命令行尾部的所有内容。
Ctrl+左右箭头:一次跳一个单词。
IO重定向、管道及文本处理工具
IO重定向
计算机中的程序是由指令加数据组成的。程序在运行时总要读取数据,和计算的数据结果也要进行输出。读取数据的来源可以是键盘,文件,网络等。输出结果的方式也很多比如打印机,显示器,以文件形式输出等,但对于输入来说从键盘读去数据,和输出至屏幕的方式无疑是最好的交互方式和最廉价的数据读去和输入方式。
上面提过Linux的哲学思想中有一条就是一切皆文件,在文件系统描述那一章也提过Linux的文件类型等,比如-,b,l,c,d,p,s等,有不同的文件类型,对于文件类型我们可以使用file命令进行查看。Linux下对于每个打开的文件都有自己的描述符,这里叫做fd(file descriptor)。所以对于输出设备输入设备等也都是以文件形式描述,所以这些设备也应该有自己的描述符。
标准输入:keyborad,描述符用0表示。比如cat命令就默认从键盘读去数据。
标准输出:monitor,描述符用1表示。
标准错误输出:monitor,描述符用2表示。(犯错的人一般都比较2,你懂的)
IO重定向的作用:改变标准输入输出位置,对输入输出重新定义。
输出重定向:COMMAND > NEW_POS,COMMAND > NEW_POS。
\ >:覆盖重定向,目标文件中的原有内容会被清除。
>>:追加重定向,新内容会追加至目标文件尾部。
对于覆盖重定向的操作是比较危险的,因为这样很可能造成重大的事故或重要数据的丢失。比如 echo “hello world” > /dev/sda 这个操作是在/dev/sda设备的开头处写入hello world并清除整个设备。这个操作的结果就是整个磁盘的分区表没有了。所以整个磁盘数据也就丢失了。所以Linux下可以通过某些设置来保护对于有数据的文件不会被覆盖重定向。设置的方式如下。
#set -C
:禁止将内容覆盖输出至已有文件中。
当该功能设置时,如果你很确定我确实是要执行覆盖重定向,可以使用 >| 即可。
#set +C
:关闭该功能。
2>:覆盖重定向错误输出数据流。
2>>:追加重定向错误输出数据流。
对于一个操作,同时对标准输出和错误输出进行重定向到不同的位置时可以使用:
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向双输出流至同一个文件。
&>>:追加重定向双数据流至同一个文件。
COMMAND > /path/to/file.out 2> &1
COMMAND >> /path/to/file.out 2>> &1
输入重定向:<
tr命令:转换或删除字符
tr [OPTION]… SET1 [SET2]
-d, –delete:删除指定字符
对于tr命令来说,是直接从标准输入读去字符然后按参数进行转换的比如:
[zhangshuo@localhost ~]$ tr abc ABC |
对tr命令进行输入重定向,即从文件读取数据进行处理如下:
[zhangshuo@localhost ~]$ tr [a-z] [A-Z] < /etc/passwd | tail -2 |
Here documentation:<< 该符号不是表示追加输入重定向,而是表示在此处生成文档。
对于cat命令默认为标准输入读去数据,这里使用cat命令进行文档生成和保存文件,用法如下:
[zhangshuo@localhost test]$ pwd |
管道
对于管道又体现了Linux的哲学思想之一,那就是可实现组合小程序来完成复杂任务。
用法:COMMAND 1| COMMAND 2 | COMMAND 3 | …:前一个命令的输出,作为后一个命令的输入
Note:最后一个命令会在当前shell进程的子进程中执行,比如:
[zhangshuo@localhost ~]$ echo "$PATH" | tr [a-z] [A-Z] | tr -d 'U' |
上面说到的重定向的方法中,都可以将输出流定义到其它位置,而有时我们又需要一边在屏幕上的输出数据又需要将数据保存至文件便于后期分析,此时管道就可以完美解决问题。
tee命令:
tee [OPTION]… [FILE]…
用法举例:
[zhangshuo@localhost test]$ pwd |
文本处理工具
命令:wc,cut,sort,uniq
wc命令:统计文件的行数,单词数,和字符数等信息
wc [OPTION]… [FILE]…
-l, –lines:行数
-w, –words:单词数
-c, –bytes:字节数
cut命令:remove sections from each line of files(感觉还是英文解释更地道,我翻译过来是对文件中每行中部分内容移动)
cut OPTION… [FILE]…
-d, –delimiter=DELIMITER:指定字段分隔符
-f, –fields=LIST:
#:第#个字段
#,#:离散的多个字段,例如:1,7,9,
#-#:连续的多个字段
–output-delimiter=STRING:输出时将分隔符替换为STRING
sort命令:
sort [OPTION]… [FILE]…
常用选项:
-f, –ignore-case:忽略字符大小写
-r, –reverse:逆序排序
-t, –field-separator=SEP:指明字段分割符
-k, –key=KEYDEF:以指定字段为标准排序
-n, –numeric-sort:以数值大小写进行排序
-u, –unique:排序后去重,相同的内容只显示一次
uniq命令:
uniq [OPTION]… [INPUT [OUTPUT]]
常用选项:
-c, –count:显示每行重复出现的次数
-d, –repeated:仅显示重复过的行
-u, –unique:仅显示未重复的行
举例如下:
[zhangshuo@localhost ~]$ #取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序,最后仅显示各自的第一个字段 |
用户及组管理
计算机的资源是非常宝贵的,通常对于主机来说应该是只允许那些有那能力或是有需要的人进行登陆,而且Linux就是一个多用户,多任务的操作系统,所以需要对登陆用户的身份进行验证,验证通过之后方可准许登陆系统。这就是Linux的用户认证机制。用户认证机制的主要作用是为了实现将有限的计算机资源分配给特定的人。
通常对于用户需要进行如下认证:
1、Authentication:认证(目的是是否允许登陆系统)
2、Authorization:授权(是否允许用户有管理员权限)
3、Accoating:审计(对于管理员来说能力越大就责任越大,所以对于管理员的权限是需要审计的)
Linux下的用户:
管理员:root,UID:0,命令提示符:#
普通用户:UID:1-65535,命令提示符:$
系统用户:UID:1-999。作用:守护进程获取资源进行权限分配
登陆用户:UID:1000+
Linux下的组:
组的作用是实现授权某类用户具有权限
管理员组:root,GID:0
普通组:GID:1-65535
管理员组:GID:1-999
普通用户组:GID:1000+
Linux的安全上下文:
计算机上运行中的程序叫做进程(process),进程是以发起者的身份运行程序的,进程所能够访问的所有资源的权限取决于进程的发起者的身份。就是Linux下的安全上下文。
Linux用户组的类别:
用户的基本组(主组):在用户创建文件时,默认将以主组的身份进行创建。
用户的私有组:组名同用户名,且仅包含该用户的用户的私有组
用户的附加组:用户额外加入的组
Linux用户和组相关的配置文件
/etc/passwd:保存用户及其属性信息
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
/etc/passwd:
name:password:UID:GID:GECOS:Directory:shell
用户:密码占位符x:UID:GID:用户的完整信息:用户的家目录:用户的默认shell
/etc/group:
group_name:password:GID:user_list
组名:组密码:GID:以当前组为附加组的用户列表(以逗号为分隔符)
/etc/shadow:
该文件是由:进行分割的9段组成
用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:密码的最大使用期限:密码的警告时间:密码禁用期:账户过期日期:保留字段
单向加密:这里的密码加密机制是使用单向加密算法进行加密的,即提取数据指纹,常用于数据完整性校验。
1、雪崩效应:初始条件的微小改变将会引起结果的巨大改变
2、定长输出:
md5:message digest 128位定长输出
sha1:secure hash algorithm 160位定长输出
sha224:224位 sha256:256位 sha384:384位 sha512:512位
密码的复杂性策略
1、使用数字,大写字码,小写字母及特殊字符中至少3种
2、密码的长度要足够长
3、使用随机密码
4、定期更换:不要使用最近曾经使用过的密码
用户管理及权限管理
用户创建命令:useradd
useradd [options] LOGIN
-u, –uid UID:指定用户的UID。范围为[UID_MIN,UID_MAX],该区间定义在/etc/login.defs
-g, –gid GROUP:指定用户的基本组,可以为组名,也可以为GID,但是如果要指定组时,该组必须事先存在
-c, –comment COMMENT:用户的注释信息
-d, –home-dir HOME_DIR:指定用户的家目录位置
-s, –shell SHELL:指定用户的默认shell程序,可用列表在/etc/shells文件中,默认定义在/etc/default/useradd文件中
-r, –system:创建系统用户
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:为用户指定附加组,在此之前组必须事先存在
useradd -D [options] :修改添加用户时的默认属性
-s:shell
组创建命令:groupadd
groupadd [options] group
-g, –gid GID:指定组的GID号,同样GID:[GID_MIN,GID_MAX]
-r, –system:创建系统组
查看用户相关的ID信息:id
id [OPTION]… [USER]
-u, –user:显示用户的UID
-g, –group:显示用户的GID
-G, –groups:显示用户的附加组
切换用户或以其他用户身份执行命令:su
su [options…][-][user [args…]]
切换用户的方式:
su USERNAME:非登陆式切换,即不会读取目标用户的配置文件
su - USERNAME:登陆式切换,会读取目标用户的配置文件,完全切换
注意:root su至其他用户无需密码,非root用户切换时需要密码
以其他用户执行命令:
su [-] USERNAME -c ‘COMMAND’:不切换用户,仅以该用户身份运行命令
用户属性修改:usermod
usermod [options] LOGIN
-u, –uid UID:新的UID
-g, –gid GROUP:新的GID,即基本组ID
-G, –groups GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,原来的附加组会被覆盖,若保留原有,则要同时使用-a选项表示增加
-s, –shell SHELL:新的默认shell
-c, –comment COMMENT:新的注释信息
-d, –home HOME_DIR:新的家目录,原有家目录中的文件不会同时移动至新的家目录下,若要移动,则同时使用-m选项
-l, –login NEW_LOGIN:新的用户名
-L, –lock:锁定用户
-U, –unlock:解锁用户
给用户添加密码:passwd
passwd USERNAME:修改指定用户的密码,仅root用户有权限
passwd:修改自己的密码
常用选项:
-l, –lock:锁定指定用户
-u, –unlock:解锁指定用户
-n, –minimum DAYS:指定密码最短使用期限
-x, –maximum DAYS:指定密码最长使用期限
-w, –warning DAYS:提前多少天开始警告用户修改密码
-i, –inactive DAYS:非活动期限
–stdin:从标准输入接收用户密码
echo “PASSWORD” | passwd –stdin USERNAME
删除用户:userdel
userdel [options] LOGIN
-r, –remove:删除用户家目录
组属性修改:groupmod
groupmod [options] GROUP
-n, –new-name NEW_GROUP:新的组名
-g, –gid GID:重新定义组的GID
组删除:groupdel
groupdel [options] GROUP
组密码管理:gpasswd
gpasswd [option] group
-a, –add user:将user添加至指定组中
-d, –delete user:删除用户user的附加组
-A, –administrators user1,user2…:设置有管理权限的用户列表
newgrp命令:临时切换基本组
如果用户本不属于此组,则需要组密码。
检查用户完整性:pwck
修改用户属性
chage [options] LOGIN
-d, –lastday LAST_DAY:最近一次的修改时间
-E, –expiredate EXPIRE_DATE:过期时间
-I, –inactive INACTIVE:非活动时间
-m, –mindays MIN_DAYS:密码最短使用时间
-M, –maxdays MAX_DAYS:密码最长使用时间
-W, –warndays WARN_DAYS:警告时间
其他命令
chfn:修改用户的注释信息。chsh:更改shell。finger:显示用户的信息。
权限管理
文件的权限主要针对三类对象进行定义:
owner:属主,用u表示
group:属组,用g表示
other:其它,用o表示
同时每个文件对每类访问者都定义了三种权限:
r:可读
w:可写
x:可执行的
对于文件来说:
r:表示可以使用文件查看类工具获取其内容
w:可修改其内容,即可对文件进行编辑
x:可以把该文件提请给内核执行并启动为一个进程
对于目录来说:
r:表示可以使用ls来查看此目录中文件列表
w:可在此目录中创建文件,也可以删除此目录中的文件
注意:如果某用户对某目录有w权限,但对该目录下某个文件没有w权限,该用户是可以将没有w权限的文件进行删除的
x:可以使用ls -l查看此目录文件列表,可以cd进入此目录
修改文件权限:chmod
chmod [OPTION]… OCTAL-MODE FILE…:直接修改某个文件为指定的权限
-R, –recursive:递归修改权限
chmod [OPTION]… MODE[,MODE]… FILE…
MODE:
修改一类用户的所有权限:
u=rx,g=r,o=
修改一类用户某位或某些位权限:
u+x
chmod [OPTION]… –reference=RFILE FILE…
参考RFILE文件的权限,将FILE的修改为同RFILE
修改文件的属主和属组(仅root可用)
修改文件的属主:chwon
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
注意:命令中的冒号可以用.替换
-R:递归修改
chown [OPTION]… –reference=RFILE FILE…:参考修改
修改文件的属组:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
-R:递归修改
文件或目录创建时的遮罩码:umask
对于文件来说创建文件默认权限为:666-umask
注意:如果某类用户的权限减得的结果中存在x权限,则将其权限+1。
root用户默认uamsk:022
普通用户:002
对于目录来说创建时的默认权限为:777-umask
命令umask
umask :查看当前的umask值
umask #:设定当前umask值
注意:umask的默认定义在/etc/profile文件中,在命令行中定义的关闭终端不会保存
-EOF