04_01
useradd
userdel
usermod
passwd
chsh
chfn
finger
id
组管理:
groupadd,groupdel、groupmod、gpaswd
对比:
[root@mylab ~]#
-bash-3.2$ ---------此用户没有家目录,无法创建环境变量
finger:查看用户账号信息
finger USERNAME
chsh:改用户的shell
chfn:修改注释信息
04_02
权限管理
r:
w:
x:
三类用户
u:属主 g:属组 o:其他用户
chown:改变文件属性(only root have this权限)
#chown USERNAME file...
chown --reference=/tmp/abc.....
/tmp/test
#chgrp 改组(only root have this arthurian)
#chown GRPNAME file...
-R(递归修改)
chmod:修改文件的权限
改三类用户的权限:
chmod 775 file, ...
-R
linux自带的计算器:bc
注:bc默认整数精度(去掉小数部分)
增加精度方法: scale=2
umask:遮罩码(创建文件时创建)
666 -umask
777 -umask
管理员的umask默认022,一般用户默认002
命令 umask 空 :显示当前umask
umask 数字 (022) 赋值给当前用户的umask
@@@文件默认不具有执行权限,如果算得的结果中有执行权限,则将其权限加1;
删除目录下所有文件:
rm -rf ./* ~~~~~~~~~~~~~~~~
站在用户的角度来说,shell类型:
1、登录式shell
正常通常某终端登录:
su - USERNAME
su -1 USERNAME
2、非登录式shell:
su USERNAME
图形界面下打开命令窗口
自动执行的shell脚本。
bash的配置文件:
全局配置
/etc/profile
/etc/profile.d/*.sh ~~~~此sh对所有用户都有效
/etc/bashrc
个人配置:
~~/.bash_profile, ~~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
@@@@作用范围越小的(变量、设置),越是最终生效。
登录式shell如何读取配置文件?(软件决定)
/etc/profile --> /etc/profile.d/*.sh --> ~~/.bash_profile --> ~~/.bashrc --> /etc/bashrc
非登录式shell如何读取配置文件:
~~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
04_03
系统设定:
默认输出设备:标准输出,STDOUT, 1
默认输入设备:标准输入,STDIN, 0
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:
改变了数据输出\入来源。
linux:
>输出重定向
<输入重定向
>>追加输出
> 覆盖输出
2> 重定向错误输出
2>> 追加方式 重定向错误输出
set -c:禁止对已经存在文件使用重定向:
强制覆盖输出则使用 >
set +c :关闭上述功能
&>:重定向标准输出或错误输出至同一文件。
< :输入重定向
<< :HERE DOCUMENT
EOF -@> END OF FILE
管道:在一端输入东西,在另一端出来。
命令1|命令2(命令3)....
命令管道:前一个命令的输出,作为后一个命令的输入
@@@@管道命令 可以组合小命令完成复杂任务
tr 'A-Z' 'a-z'
例子:只显示一个文件的行数
#wc -l /etc/passwd | cut -d‘’ -fl
CHKDSK /F
04_04
grep、egrep、fgrep
grep:根据模式搜索并将符合模式的文本显示出来。
pattern:文本字符和正则表达式的元字符组合而成 匹配条件
grep [options] PATTERN [FILE]
例:列出 /etc/passwd 中关于root的行
grep 'root' /etc/passwd
--color
-v:显示没有被模式匹配到的行
正则表达式:REGULAR、Expression、REGEXP
元字符:
/. :任意字符
例:查找r开头t结尾的字符
#grep ‘r..t’ /etc/passwd
匹配次数:
*:匹配其前面的字符任意次
例:a*b的匹配字符
ab√,aab√,acb,adb,b√,
@@@@acb---》匹配其前面字符任意次,@@@b√可以是零次。
3、 .* :任意长度的任意字符
a.*b
a, b, ab√, aab√, adb√, amnb√, ammb√, amnbmnbmnb√
a?b
a, b√, ab√, aab√,
默认情况下,正则表达式工作在贪婪模式下,能匹配到哪,就到哪。
4、 ? :匹配其前面的字符一次货零次
{m,n}花括号在bash中用以命令展开,而{m,n\}这个\(转义字符就是告诉bash你别展开)
@@@\{m,n}:匹配其前面的字符至少m次,之多n次
例子:
\{1,\}至少一次
\{0,3\}之多3次
例子:
找1到3个a跟着后面b
grep 'a\{1,3\}b' test.txt test.txt内容:a, b, ab, aab, adb, amnb, ammb, amnbmnbmnb
ab aab
a开头b结尾的字符串,中间有1到3个任意字符
a.\{1,3\}b
@@@位置锚定:
1、 ^ :锚定行首,此字符后面的任意内容必须出现在行首。
2、 $ :锚定行尾,此字符前面的任意内容必须出现在现在行尾,
例子:
以y结束的行:'y$'
3、 ^$:空白行
4、 \< :其后面的任意字符必须作为单词首部出现
\>: 尾部出现
例:\<root\>
包含 root 这个单词
注意,不能是包含root字符串的字符串
分组:
\{\}
\{ab\}* ab可出现任意次。
后面引用:被括号括号的字符,后面我们可以用一个字符再次引用它。
\1:引用括号内容
\2:
例:
grep '\(l..e\).*\1'
前面出现love,后面也是love
He love his lover。√
He love his liker。
05_01
扩展正则表达式:
字符匹配: . [] [^]
次数匹配: * . ? + @@@(+)匹配其前面的字符至少1次。
{m,n}不需要再加\反斜线
位置锚定: ^ $ \< \b <>
分组: ():分组 \1,\2,\3,...
或者: | : or
C | cat ①Cat和cat ②C和cat√ @@@整个左边和整个右边:(C | cat )
验证:grep --color -E 'C|cat' test6.txt test6.txt内容:Cat cat C China
(C|c)at ①Cat和cat多个 ②C和cat
05_03
bash中 条件测试类型:
整数测试
字符串测试
文件测试
整数比较:
-et:是否相等
-ne:是否不等
-gt:是否大于
-lt:是否小于
-ge:是否大于等于
-le:是否小于等于
例子:
$A -eq $B
如果相等,则为真。 则 echo$?的输出为0
@@@0为真。
命令间的逻辑关系:
与: &&
或:||
如果用户user6不存在,就添加该用户:
id user6 && useradd user6
脚本只要结束,变量就撤销;
变量名称:字母、数字、下划线
一、不以数字开头
二、不应与已有系统变量重名
三、做到见名知意
例:如果用户存在,就显示用户存在,否则就添加用户:
id user1 && echo "user1 exists." || useradd user1
例:如果用户不存在,就添加用户显示用户存在,否则就显示用户存在:
!id user1 && echo useradd user1 || "user1 exists."
文件测试:
-e FILE: 测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限;
-w FILE: 测试当前用户对指定文件是否有写权限;
-x FILE: 测试当前用户对指定文件是否有执行权限;
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
练习:
写一个脚本,如果文件不存在就退出脚本,如果存在就执行。
#!/bin/bash
#
if [ ! -e $FILE ];then
echo "No $FILE."
exit 8
fi
if grep "^$" $FILE &> /dev/null; then
echo "Total blank line: 'grep "^$" $FILE | wc -l'."
else
echo "No blank line."
fi
shell中如何进行算术运算?
A=3
B=6
1、let算术运算表达式
let C=$A+$B
2、$[算术运算表达式]
C=$[$A+$B]
3、$((算术运算表达式))
C=$(($A+$B))
4、expr算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用。
C=`expr $A + $B`
shell中注意全局变量和局部变量的有效范围。