第三天内容:
1、linux目录及文件管理
2、linux文本工具及bash重定向
3、linux用户和组管理
4、linux用户和组管理进阶
回顾:
文件类型:f,d,l,c,b,p,s
文件timestamp atime:最近一次访问时间,mtime:数据的改变,ctime:元数据的改变
文本查看:cat,tac,more,less,head,tail
一、bash特性之命令别名和命令引用
alias
alias ALIAS=COMMAND(别名=命令)
命令与命令同名时:
绝对路径
\command
生效范围:命令行定义的别名,其生效范围为当前会话。
unalias [ALIAS]
-a:撤销所有别名
注意:alias 可以在多个文件中定义,默认 ~/.bashrc
如:alias c='cd' 后 source .bashrc ,c命令作为cd的别名生效,如果想取消别名在配置文件中删除是不生效的,必须unalias c 然后source .bashrc, 取消设置的别名。
bash支持的引用: '' "" ``:引用一个命令的执行结果$()
二、bash特性之文件名通配(globbing)
* :任意长度的任意字符 p*d, pad pbd pd *ab*c
?:匹配任意单字符
[ ]:匹配指定范围内的任意单字符 [abc],[a-z],[0-9] 不区分大小写,如:a[0-9a-z]bbb
[^]:匹配指定范围以外的任意字符 -如 找a.b ls a[^0-9a-z]b
字符集合:
[:space:]: 所有空白字符,任意一个空白字符[[:space:]]
如匹配 a b 则 a[[:space:]]b
[:punct:]:所有标点符号 如匹配a.b 则a[[:punct:]]b
[:lower:]:所有小写字母
[:upper:]:所有大写字母
[:alpha:]:所有的字母
[:digit:]:所有的数字 相当于0-9
[:alnum:]:所有的字母和数字
如匹配所有字母和数字以外的 a[^[:alnum]]b 则 a b a.b
练习:1、显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现一位数字的文件或者目录
#ls /var/1*[[:digit]]*[[:lower]]
2、显示/etc/目录下,一任意一位数字开头,且以非数字结尾的文件或目录
#ls -d /etc/[[:digit]]*[^[:digit]]
3、现在/etc/目录下,以非字母开头,后面跟了一个字母及其他任意长度字符的文件或目录
#ls -d /etc/[^[a-z]][a-z]*
4、在/tmp/mytest目录中创建以testdir打头,后跟当前日期和时间的空目录,
形如,testdir-14-07-03-09-15-33; #mkdir -pv /tmp/mytest/testdir-$(date +%F-%H-%M-%S)
echo 命令
三、文件管理类命令
复制:cp
移动:mv
删除:rm
cp: 文件复制
cp SRC DEST
如果DEST不存在,复制SRC为DEST
如果DEST存在,若DEST是文件,则覆盖;若DEST是目录,将SRC复制进DEST中,并保持原名
cp SRC… DEST
如果SRC不止一个,则DEST必须的是目录
cp SRC DEST
SRC是目录:
可使用-r选项:
练习:复制/etc目录下,所有以P开头,以非数字结尾的文件或目录至/tpm/mytest1目录;
#mkdir /tmp/mytest1 #cp -r /etc/p*[^[:digit:]] /tmp/mytest1
复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mytest2目录;
#mkdir /tmp/mytest2 #cp -r /etc/*.d /tmp/mytest2
复制/etc/目录下所有以1或m或n开头,以.conf结尾的文件至/tmp/mytest3目录
#mkdir /tmp/mytest3 #cp -r /etc/[1mn]*.conf /tmp/mytest3
-P:复制符号链接文件本身,而非其指向的目标文件
--preserve [=ATTR_LIST]
mode,ownership,timestamps
mode:权限 ownership:属主,属组 timestamps:时间戳
-p:相当于 --preserve=mode,ownership,timestamps
-a:相当于-dR --preserve=all
归档(archive)或备份
-i:交互式
-f: force 强制
mv命令:
mv SRC… DEST
-i :交互式复制
rm命令:
alias rm='rm -i'管理员默认,普通用户没有。 \rm file 默认不带-i。
-r 删除目录 --no-preserve-root / 删除根目录
rmdir和rm的区别:
1、rmdir 用来删除空目录,
其选项有-v显示删除过程,-p递归删除该目录下为空的子目录(子目录必须空)
2、rm 用来删除文件或者目录,如果目录不为空,配合选项也能删除非空目录
其选项有-v显示删除过程,-f 强制删除,不提示所删除的目录是否存在;
-r 指定删除该目录下的所有文件,要删除一个非空的目录使用-rf组合即可。
用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。
rm命令的一般形式为:rm [选项]... 目录... 删除指定的<文件>(即解除链接)。
-d --directory 删除可能仍有数据的目录 (只限超级用户)-f --force 略过不存在的文件,不显示任何信息-i --interactive 进行任何删除操作前必须先确认-r/R --recursive 同时删除该目录下的所有目录层-v --verbose 详细显示进行的步骤 --help 显示此帮助信息并离开 --version 显示版本信息并离开
要删除第一个字符为‘-’的文件 (例如‘-foo’),请使用以下其中一种方法:rm -- -foo
rm ./-foo
文本编辑命令:nano全屏编辑器
文本处理类命令:
wc:word count ,查看文本有多少行,文本统计工具,-l 仅显示行,-w 单词数,-c字节数
如:wc /etc/inittab 26 149 884 /etc/inittab 说明inittab文件有26行149单词884字节。
cut:剪切某文件的行信息
-d 指定分隔符
-f 指定要显示的字段 m:第m列 m,n:第m和n列 m-n:第m到n列
sort:排序 如:sort /etc/passwd
-f:忽律字符大小写
-t:指定分隔符
-k:指定分隔之后要进行排序比较的字段 如:sort -t: -k3 /etc/passwd
-n:以数值大小进行排序
-u:排序后去重
uniq:去重 如 sort hi.txt | uniq
-d:仅显示重复的行 -u:只显示未曾重复的行 -c:显示每一行出现的次数
练习:1、显示当前系统上每个用户的Shell #cut -d: -f1,7 /etc/passwd
2、显示当前系统上所有用户使用的各种shell #cut -d: -f7 /etc/passwd | sort -u
3、取车/etc/inittab文件的第7行 #head -n 7 /etc/intittab | tail -n 1
4、取出/etc/passwd文件中第7个用户的用户名 #head -n 7 /etc/passwd | tail -1 | cut -f 1
5、统计etc目录下以大小P开头的文件的个数 #ls -d /etc/[Pp]* | wc -l
四、bash特性之输入、输出重定向和管道
程序:
数据来源:输入流
数据目标:输出流
标准输入,标准输出,标准错误输出
文件:文件系统(内核)标准输入:0(键盘) ,标准输出:1,错误输出:2(显示器)
重定向:改变其标准位置
输出重定向:command > position 覆盖输出
command >> position 追加输出
错误重定向:command 2> position 覆盖输出
command 2>> position 追加输出
合并重定向:command &> position 不管对错都会写入文件中
command > position 2>&1 标准输出和标准错误输出一起定向到一个文件中
分别重定向:command > position 2> position 正确和错误输出在不同的文件中。
输入重定向:command < position
文本处理命令:tr tr 'test1' 'test2'
-d:删除指定字符集合中的所有字符
如:tr 'a-z' 'A-Z'< /etc/issue 将issue下的小写字母都改成大写字母。
<< 此处文档,如:cat > /tmp/doc.txt <<EOF ,(EOF文件结束符)。#cat <<END 屏幕显示
多道输出 -- tee命令,即显示屏幕又重定向,集合管道使用。
如cat /etc/issue |tee /tmp/issue3.txt # 重定向至issue.txt并且在屏幕显示。
五、 /dev/null:丢弃数据的设备文件(数据黑洞)
ls /var > /dev/null echo $? 获取其执行结果的。0 表示正确,1-255 表示错误。
bash有个命令set 能设定bash的好多功能。
例如:cp /etc/issue /tmp/ ,cat /etc/fstab > /tmp/issue ,这样就会覆盖issue文件
而运行 set -C 再 cat /etc/fstab > /tmp/issue 就出现提示错误,不能覆盖,set +C还原。 或者 cat /etc/fstab >| /tmp/issue 也可以覆盖。
六、用户和组
DOS单用户系统,没有用户的说法,用户是多用户系统发展的结果。
User ID=UID Group ID=GID 用户名通过名称解析变成UID。
用户和组是实现分派资源的核心要素,
用户分为三类 :
管理员: 0 交互式登陆
系统用户 1-499 无需登陆只用来运行后台程序(daemon守护进程),无交互式登陆。
普通用户 500+,组也分为三类和用户概念相同,交互式登陆。
密码是一种验证机制,验证用户身份的凭证。
权限是分配资源的一种机制,用于规范用户使用资源的权力。文件权限(rwx)
文件;r: 查看文件内容,w:修改文件内容,x:把此文件启动为一个运行的程序(进程)
目录:r:可以使用ls命令查看目录中的文件名列表
w:可以在目录中创建或删除文件
x:可以cd 到此目录中,以及使用ls -l 显示目录中文件的元数据信息。
用户访问文件是的权限匹配模型:
1、检查运行此程序的属主是否与其正在访问的文件的属主相同?
如果相同,则也属主的权限访问;否则
2、检查运行此进程的属主是否属于此文件的属组?
如果是,则以属组的权限访问;否则 以其他用户的身份访问。
用户管理:linux中和用户组有关的文件
/etc/passwd :用户的账户信息
/etc/shadow:用户密码和相关的账户设定
/etc/group 组的账号信息
/etc/gshadow 组密码信息
/etc/passwd文件:
account:password:UID:GID:GECOS:directory:shell
登陆名:密码点位符:UID:GID:注释信息:家目录:用户的默认shell
/etc/shells 下显示系统可用的安全shell。
useradd:添加用户如果没有指定用户组,系统会自动创建一个和用户名相同的组作为添加用户的基本组。用户可以加入多个组(基本组、附加组)
-u UID , -g GID , -G 附加组 , -d 指定家目录,如果目录存在会有警告信息,-c 'comment':注释信息,
-s 给用户指定shell信息,如: useradd -s /bin/tcsh user
-m 强制给用户创建家目录 -M 不给用户创建家目录 -r 创建非系统登陆用户(系统用户一般不创建家目录)
groupadd:
-g:GID,-r : 系统组
passwd :普通用户只能修改自己的密码,管理员可以passwd [username]给他其他用户设定密码。
密码复杂度策略(数字、大写、小写和特殊字符至少三种)最短长度5位,不易使用易猜测 的密码,定期修改,且不要使用近期使用过的密码。
加密方式:
对称加密:加密和解密使用同一个密钥,密钥分发困难
公钥加密:加密和解密使用一对密钥,公钥公开的,私钥保密的。如:Bob用Alice公开的公钥加密后传输给Alice,Alice用自己的私钥解密----这是公钥加密的过程。那么Bob在获取Alice公钥的时候是否是安全的,途中被篡改了怎么办?也就是如何能获取到对方安全的公钥呢? 这就涉及到CA(证书颁发机构)。Alice把证书发给Bob,而不是公钥,BOb去验证Alice的证书是否合法渠道,是否安全(证书中包含Alice的公钥),若合法、安全则用证书中的公钥加密,若不合法,拒绝此证书。(其中还涉及证书的验证技术,这一套机制成为PKI机制)。
单向加密:能加密不能解密,提取数据唯一特征码。
1.定长输出 2.不可逆 3.雪崩效益
passwd --stdin ,-l(lock),-u (unlock)
/etc/shadow文件格式
用户名,加密的密码,最近一次修改密码的时间,密码最短使用期限,密码最长使用期限,面膜过期警告区间,密码非活动期限,账号过期期限,保留区域
userdel userdel [options] username -r:删除用户及其家目录
groupdel groupdel groupname
usermod : usermod [options] username
-u uid ,-g gid , -G 修改用户的附加组,此选项通过跟-a一起使用以追加方式修改附加组
如:usermod -a -G mygrp,testgrp user6
-c comment 修改注释信息,-d /path/to/somewhere 修改用户家目录同时使用-m
-s shell ,-l login_name 修改用户名,-L 锁定用户,-U 解锁用户
chsh username 修改用户的shell
chfn username 修改用户的注释信息
chage : chage [options] username
groupmod:修改组信息 -g gid ,-n newgrpname ,给组设定密码 gpasswd
查看用户信息:
id user ,who ,whoami,finger
切换用户:su : switch user
练习:创建用户mandriva,id为2200,基本组为disrto,组ID为3300,附加组为peguin
# groupadd -g 3300 disrto
# groupadd -g peguin
# useradd -u 2200 -g disrto -G peguin mandriva
创建用户gentoo 其全名为Gentoo,默认shell为/bin/tcsh
# useradd -c "Gentoo" -s /bin/tcsh gentoo
修改mandriva的UID为4400,基本组为linux,附加组为distro和gentoo
#usermod -u 4400 -g linux -G distro,gentoo mandriva
给gentoo添加密码,设定密码最短使用期限为2天,最长60天,警告3天,非活动期限为7天
# echo 'gentoo'| passwd --stdin gentoo 或者 # passwd gentoo
# chage