1. mkdir [-mp] dirname
-m 直接设置目录权限,无视umask
-p 递归创建目录
rmdir –p dirname
-p 若指定目录被删除后其上层目录也为空,则递归删除上层目录
rm [–rfi] dirname 用于目录不为空时
-r 递归删除
-f 强制删除
-i 交互
2.cp [-alsiru] source destination
-a
-l 硬链接
-s 软连接
-i 若已存在,提示是否覆盖
-r 递归持续复制,用于目录复制
-u destination比source新复制
3. mv [-fiu] source destination
参数意思同上
4.head [-n number] file
-n 10 列出前10行
-n +10 从头显示,但不包括后10行
5. tail [-n number] file
-n10 列出后10行
-n+10 列出从第10行开始到结尾的所有行
6.find [PATH] [option] [action]
-name filename
-size [+-]size
-type TYPE
-perm [+-]mode
7. 4:SUID, 2:SGID, 1:SBIT
8. 系统中有两个账号,alex和arod,除了自己用户组之外还共同支持一个名为project的用户组,若这两个用户需要共同拥有/src/ahome/目录的开发权,且该目录不许其他人进入查询。
# groupadd project
# useradd –G project alex
# useradd –G project arod
# mkdir /src/ahome
# chmod 2770 /src/ahome
# ll –d /src/ahome
drwxrws--- 2 root project 4096 Sep 29 22:53/src/ahome
Alex$ touch abcd
Alex$ ll
-rw-rw-r-- 1 alxe project 0 Sep 29 22:53 1234
//将用户qwerboo加入到project组,# usermod –a –G project qwerboo
9. 文件系统ext2
iNode存放文件权限,属性和文件数据块序号,每个文件一个iNode。12个直接,间接、双间接和三间接个一个。Superblock至少存放block与inode的总量,使用与未使用的inode/block数量。
目录项里存放文件名以及对应的Inode编号;
10. 磁盘与目录容量
df[-ahikHTm] [目录或文件名]
-a 列出所有的文件系统
-k 以kb显示, -m 以mb显示, -h 以GB、MB、KB自行显示 –i 以inode的数量来显示
11. 硬连接只是在某个目录下新建一条文件名连接到某inode号码关联的记录而已,既不会增加inode,也不会耗用block数量。注:不能硬连接目录。硬链接的文件类型位是-,软连接的文件类型位是l,并且可以跨文件系统。
qwerboo$: ln file newfile #硬连接
qwerboo$: ln [–sf] file newfile #软连接,创建了新文件,所以增加了inode和block数量
-s: 软连接–f:目标文件已经存在,就先删除目标文件再创建软连接文件
12. 若在/tmp目录下新建文件夹test,则$ ls –ld test/,显示test的引用数为2,上级目录tmp/引用数会增加1,因为test目录名本身和.引用test目录,..引用tmp/。
13. vi命令
n 光标向右移动n个字符
0 移动到行首 $ 移动到行尾 G 移动到最后一行 nG 移动到文件第n行 gg 移动到首行
n[enter] 向下移动n行 /word 向下查找字符串word ?word 向上查找字符串word
:m,ns/abc/def/g 将m到n行中的abc替换为def x,X 分别向后/前删除一个字符
nx 向后删除n个字符 dd 删除一行 ndd 删除n行 yy 复制当前行 nyy 复制光标所在的向下n行 p 复制 :w[filename] 写入文件filename中 :r[filename] 从filename中读取内容 :set nu 显示行号 :set nonu 取消显示行号
vi/vim块选择
v: 字符选择,光标经过的地方反白。 [ctrl]+v 块选择,用长方形的方式选择数据
多文件编辑: vim afile bfile :n 下一个文件 N:上一个文件 :files 列出vim打开的所有文件
:sp [filename] 在新窗口打开新文件filename
[ctrl] + w + j 下一个窗口 [ctrl] + w + k 上一个窗口 [ctrl] + w + q 关闭窗口
14.DOS与Linux的断行符
#dos2unix [-kn] file [newfile]
# unix2dos[-kn] file [newfile]
-k 保留原本的mtime时间格式 -n 保留原旧文件
15.变量设置规则
变量与值用=连接,=两边不能有空格
变量内若有空格,可用” ”或’ ’括起来,” ”保留变量特性,’ ’则全转换为字符
可用转移字符\将特殊字符,如[enter]、$、\、空格、!等变成一般字符
在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号`命令`或$(命令)
若该变量需要在其他子进程中执行,则需要用export来使变量变成环境变量:export variable,因为子进程默认只会继承父进程的环境变量,而不会继承父进程自定义的变量
unset 变量名称 取消设置的变量
16.read [-pt] variable
-p: 可后接提示符 -t: 可后接等待的秒数
17.declare/typeset 功能一样,用来声明变量
declare [-aixr] variable
-a:数组 -i: 整型 -x: 将变量变成环境变量 -r: readonly型
18.设置别名
#alias lm=’ls –al | more’
#alias 显示已有的别名命名
#unalias lm 取消别名命名lm
19.查看历史命令
#history
n: 显示最近n条命令 -c: 删除当前shell历史命令记录 –w: 将历史命令写入~/.bash_history文件中
20.bash通配符
* 任意多个 ? 一个字符 []有一个在括号中的字符 [-]在编码顺序内的所有字符
[^] 不包含括号内的字符 #注释 \转义字符 |管道 ~主文件夹 $变量前导符
&作业控制符,变成后台工作 !非 /目录 >,>>输出重定向,追加
<,<<输入重定向,追加 ‘ ’不具有变量置换的功能 “ ”具有变量置换的功能
` `该符号中间的命令先执行,也可用$() { }可用来放置命令块
21.#find /home –name .bashrc 1>list_right 2>list_error
#find /home –name .bashrc 2> /dev/null #错误信息定向到/dev/null中,会吃掉任何定向到该设备的信息
#find /home –name .bashrc >list 2>&1 #将标准输出与标准错误同时输入同一个文件中或
#find /home –name .bashrc &>list
22. comd1 || comd2 comd1 && comd2
23. 1)管道仅能处理经由前面一个命令传来的正确信息,也就是标准输出的信息,对于标准错误信息没有直接处理能力; 2) 管道命令必须能够接收来自前一个命令的数据成为标准输入处理才行,如ls,cp,mv等并不会接收来自stdin的数据
24.选取命令 cut, grep
cut–d ‘分隔符’ -ffileds #echo $PATH | cut –d ‘:’ –f3,5 显示第3和5字段
cut–c 字符范围 # export | cut –c 12- 显示第12个字符以后的字符
25.grep [-acinv] [--color=auto] ‘查找字符串’ filename #按行查找
-a 将二进制以text文件方式查找数据 -c 计算找到的次数 -i 忽略大小写
-n 输出行号 -v 反向选择
26.sort[-fbMnrtuk] [file or stdin]
-f 忽略大小写 -b 忽略最前边的空格符部分 -M以月份名字排序 -n 使用数字排序
-r 反向排序 -u 重复的只显示一次 -t 后接分隔符,默认是tab -k 以哪个区间来排序
# cat /etc/passwd | sort –t ‘:’ –k 3 –n
27.uniq [-ic]
-i 忽略大小写 -c 计数
# last | cut –d ‘ ‘ –f 1 | sort | uniq –c
1
12 reboot
41 root
28.wc [-lwm] 默认列出行、字、字符
-l 仅列出行 -w 列出多少字 -m 列出多少字符
# cat /etc/man.config | wc #141 722 4617
29.双向重定向 tee [-a] file 将数据流同时写入文件和显示到屏幕
-a 以累加方式写入文件
# ls -l /home | tee home.list
# echo ${#var} 列出var的字符长度
30.tr [-ds] set1set2 ……
-d 删除信息中的set1和set2字符串 -s 替换掉重复的字符
# cat /etc/passwd | tr -d ‘:’
# cat /etc/passwd | tr -d ‘\r’ > /root/passwd.linux#将dos断行符^M删除,转成linux的格式
31.col [-xb]
-x 将tab键替换为空格 -b 在文字内有/时,仅保留/最后接的那个字符
# cat /etc/man.config | col –x
32.join [-ti12]file1 file2 将两个文件中具有相同数据的那一行加在一起
-t 默认以空格符分隔数据,并且对比第一个字段的数据 -i 忽略大小写
-1 数字1,代表第一个文件要用哪个字段来分析 -2 表示第二个字段要用哪个字段对比
# join -t ‘:’ -1 4 /etc/passwd -2 3 /etc/group 若/etc/passwd文件中某行以:分隔的第4个字段与group文件中的第3个字段相同,则将对应的行衔接在一行
33.paste [-d] file1 file2 直接将两个文件中第一个字段相同的行连接在一起,默认以tab键连接
-d 后跟连接符 - 表示标准输入
# paste /etc/passwd /etc/shadow
34.expand [-t] file将[tab]转换成空格键
-t 后接数字,表示将tab键替换为几个空格
35.split [-bl] file PREFIX
-b 后接文件大小,b,k,m等 -l 以行数来进行切割
# split -b 300k /etc/termcap termcap
…… 300k 16:39termcapaa
…… 300k 16:39 tempcapab
…… 189k 16:39tempcapac
# cat tempcap* >> tempcapback 将文件重新组合在一块
36.grep [-A] [-B] [--color=auto] ‘str’filename
-A 后加数字,除了匹配行,将后n行也显示出来,比如 -A3, A:after
-B 后接数字,除了匹配行,将前n行也显示出来,比如 -B2, B:before
# grep –vn ‘the’ regular_express.txt 显示除了含有the的所有行
# grep –n ‘t[ea]st’ regular_express.txt 显示含有test/tast字段的行 []表示只包含一个其中字符
# grep –n ‘[^g]oo’ regular_express.txt 不以g打头并且含有oo字段的行
# grep –n ‘[^a-z]oo’ regular_express.txt 不以小写字母打头的含有oo字段的行
或 grep –n ‘[^[:lower:]]oo’regular_express.txt
# grep –n ‘[0-9]’ regular_express.txt 或 grep –n ‘[[:digit:]]’ regular_express.txt 含有数字的行
# grep –n ‘^[a-zA-Z]’ regular_express.txt 不以字母打头的行 注意^在[]内外的区别
# grep –n ‘\.$’ regular_express.txt 以小数点.结尾的行,因.是特殊字符,所以转义
# grep –n ‘^$’ regular_express.txt 打印空白行
# grep –nv ‘^$’ regular_express.txt | grep ‘^[^#]’ 或 | grep –v ‘^#’ 打印除了空行和以#开头的行
37.一定有一个任意字符 * 重复前一个字符0到无穷多次
# grep –n ‘ooo*’ regular_express.txt 显示含有oo,ooo,oooo等至少两个oo的行
# grep –n ‘g.*g’ regular_express.txt 显示两端为g,中间可有可无字符
# grep –f templatefile file 从templatefile中读取模板,然后去匹配file中的行
38.{},限制重复次数
#grep –n ‘o\{2\}’ regular_express.txt 显示o重复2次的行
#grep –n ‘go\{2,5\}g’ regular_express.txt 显示两端为g,o重复2-5次的行
# grep –n ‘go\{2,\}g’ regular_express.txt 显示至少重复2次的行
39.sed [-nefr] [action] 其中,[action] = [n1[,n2]] function
-n 只有经过sed处理的行才会显示在屏幕上 -e 直接在命令行进行action操作
-f 直接将sed的动作写在一个文件内, -f filename则可以执行filename内的action
-r 让sed支持扩展的正则表达式 -i 直接修改读取的文件内容,而不是输出在屏幕上
n1,n2不一定会出现,对于function
a 新增 c 替换 d 删除 i 插入 p 打印 s 替换
# nl /etc/passwd | sed ‘2,5d’ 删除2-5行
# nl /etc/passwd | sed ‘2a this is the 1st line and \
this is the 2nd line’ 在第二行后添加两行
# nl /etc/passwd | sed ‘2,5c content changed’ 第2-5行换为contentchanged
# nl /etc/passwd | sed –n ‘5,7p’ 列出5-7行
# sed ‘/tom/d’ test.txt 删除包含tom的行
# sed ‘/tom/!d’ test.txt 删除不包含tom的行
# sed ‘/Jose/c JOSE IS ME!’ file 将所有包含Jose的行替换为JOSE IS ME!
#sed ‘s/old/new/g’ file 用new替换old串
#sed ‘s/old/&sth/g’ file &代表匹配到的部分,即old
#sed ‘/from/!s/delete/delete from/g’ 如果存在from,则不将delete替换为delete from
对于 inetaddr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0,如果想要取出第一个ip地址,则
# echo ‘inet……’ | grep ‘inet addr’ | sed ‘s/.*addr://g’ | sed ‘s/Bcast.*//g’
#sed ‘/Jon/p’ file 则会显示全部,并且打印匹配的行两次
#sed –n ‘/Jon/p’ file 则会只打印匹配的行一次
#sed –n ‘s/Jon/qwer/p’ file -n和p结合使用表示只打印被改变的行
#sed –n ‘s/\(Mar\)got/\1ker/g’ file 将所有的Margot替换为Marker,\1代表Mar
#sed –n ‘/abc/,/bcd/p’ file 打印出在包含abc和bcd之间的所有串,若bcd没找到,则从abc所在行一直打印到结尾
#sed –n ‘3,/Jessica/p’ file 打印从第三行开始到第一次匹配到jessca之间的所有行
#sed --expression=' s/TB/Tobias/' --expression='/north/d' datafile 连着两个命令
Sed脚本 sedscript:
1i Personal File
$a END OF FILE
# sed –f sedscript test.txt 则会执行sedcript中的命令于test.txt中
40. 扩展正则表达式 egrep,以下为新增特殊字符
+ 至少重复一次 ? 出现0或1次 | 或 ()查找“组”字符串 ()+ 至少重复一次组 \w 字母数字字符 \W 非字母数字字符
# egrep –n ‘go+d’regular_express.txt 找god,good,……
# egrep –n ‘go?d’ regular_express.txt 找gd,god
# egrep –n ‘gd|good|dog’ regular_express.txt 找gd,good或dog
# egrep –n ‘g(la|oo)d’ regular_express.txt 找glad或good
# egrep –n ‘A(xyz)+C’ regular_express.txt 找……
41.格式化打印 printf
# printf ‘打印格式’ 内容
\a 警告声音 \b 退格键 \f 清屏 \n 下一行 \r 回车 \t tab键 \v 垂直tab键
42.awk ‘条件类型1{动作1} 条件类型2{动作2}……’ filename 主要处理每一行的字段内的数据,默认的字段分隔符为空格或tab键,也即
# awk ‘pattern’ filename 或
# awk ‘action’ filename 或
# awk ‘pattern {action}’ filename
awk处理流程:读入一行,将对应的字段填入$0,$1,…,判断,执行动作,再读入下一行。
NF 每一行拥有的字段总数 NR 当前行号 FS 当前分隔符,默认是空格 OFS输出域分隔符 RS 记录分隔符 ORS 输出记录分隔符
#cat /etc/passwd | awk ‘{FS=”:”} $3 < 10 {print $1 “\t” $3}’ 列出第三列小于10,再列出第1和3列,但是第一行没有被打印出来,因为读入第一行的时候默认分隔符还是空格
# cat /etc/passwd | awk ‘BEGIN {FS=”:”} $3 < 10 {print $1 “\t” $3}’ 则会完成以上功能
对于文件pay.txt,内容如下:
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000,若想计算每个人的总额
#cat pay.txt | awk ‘NR==1{printf “%10s %10s%10s %10s %10s\n”,$1,$2,$3,$4, “Total”} NR>=2 {total=$2+$3+$4;
printf “%10s%10d %10d %10d %10d %10.2f\n”, $1,$2,$3,$4,total}’在awk中,变量可直接使用,不需加$。
awk运算符:
< <= == != >= > ~ !~ 其中~表示匹配正则表达式
# awk –F: ‘$1 ~ /Tom Savage/ {$1=”John Smith”; print $0}’ file 将名字为tom的改为john
条件表达式:
# awk ‘max=$1>$2?$1:$2; print max’ file 三目表达式
# awk ‘$2==”Tom”{print $0}’ file
逻辑运算符:
&& || !
# awk ‘$1>5 && $2 < 10 {print $0}’ file
# awk ‘!($1>5 && $2 < 10) {print $0}’ file
范围模板:
# awk ‘/Tom/,/Cat/’ file 打印处在tom和cat之间的所有行
Summary: grep 在匹配的时候不用/,但是awk和sed在匹配的时候必须加/
awk支持的运算符:
+-*/, +=, -=, /=, *=, %=, ^=,++,--
Awk可以像C语言一样,使用if,while等语句;
BEGIN模块:
BEGIN后紧跟动作,目的是在执行任何操作前先执行该动作,常用来改变内置变量
# awk ‘BEGIN{FS=”:”; OFS=”\t”; ORS=”\n\n”}{print$1,$2,$3}’ file
将域分隔符改为:,输出域分隔符改为\t,输出记录分隔符改为\n\n。
END模块:同BEGIN相似
# awk ‘{print}END{print “End!”}’ file 打印完每一行后再最后打印End!
重定向:
#awk ‘{print $1 > “newfile”}’ file 重定向文件到newfile中,必须加双引号
ARGC和ARGV是awk内建的变量,分别存放输入参数的个数和参数值,其中ARGV[0]的值为”awk”
awk内置函数:
awk ‘{sub(/Mac/, “MacIntosh”); print}’file 替换Mac字符串;sub匹配最左边最大的字符串,一行只匹配一次,gsub则全部都匹配
awk ‘{print index(“hello”, “ell”)}’ file index返回字串第一次出现的位置,从1开始
awk ‘{print length(“hello”)}’ file 返回值为5
自定义函数:
function funcname(parameter1, parameter2, …)
{
statements
return expr
}
只有出现在参数列表中的变量才是本地(临时)变量,其他的均为全局变量;函数的定义可以放在awk的任何地方;awk中变量第一次使用时若没有赋初值,则默认为0或空;
FEILDWIDTHS变量为内置变量,表示域宽,以字符个数计数。如果设置了该变量,则FS则被忽略。
# cat fix
Abc123jjb
# awk ‘{FEILDWIDTHS=”3 3 3”; print $2;}’file 输出为123
Awk中不能用sed中的替换正则表达式,如1,$s/abc/123/g不能用,而是用内置函数sub或gsub。Awk脚本中可以用FS=”:”来替换执行命令时的-F:,且一般放在BEGIN模块中。
# awk ‘{print FILENAME, $0}’ file1 file2 file3 > bundled 将三个文件合并为bundled
#awk ‘$0 != previous{close(previous); previous = $1;}{print substr($0, index($0, “ ”+ 1)) > $1}’bundled 将合并的文件再拆开
Command| getline d; 将command通过管道读进d中
43. Shell script
执行方法:1. 路径/shell.script 需具备r,x权限 2. bash或sh shell.script,只需读权限
var=$((计算式))
#!/bin/bash
read–p “input a: ” a
read–p “input b: ” b
result= $(($a*$b))
echo$result
shell中,子进程内的各项变量或操作将会结束而不会传回到父进程中。
44. test测试功能
文件类型判断:-e 该文件名是否存在 -f 是否存在且为文件 -d 是否存在且为目录 -b ……且是否为块设备 -c ……字符设备 -S ……socket设备 -p 是否为管道文件 -L ……是否为连接文件
文件权限判断:-r 是否存在且可读 -w 是否存在且可写 -x是否存在且可执行 -u 是否存在且具有UID属性 -k 是否存在且具有sticky bit属性 -s 是否存在且为非空
文件之间比较:-nt file1是否比file2新 -ot file1是否比file2旧 -ef 是否为同一文件,可用在判断硬链接上
两个整数之间的判断:-eq 相等 -ne 不相等 -gt –lt –ge –le
判定字符串:test –z string 是否为空串 test –n string 是否为非空串 test str1=str2 判断str1和str2是否相等 test str1!=str2 是否不相等
多重条件判断:-a 两条件同时成立 test –r file –a –x file 判断是否同时可读和可执行
-o 任何一个条件成立 test –r file –o –x file 判断是否具有可读或可执行权限 !取反状态
45. []也可作测试
[]内左右两侧必须以空格隔开,变量最好用“”括起来,常量最好用”或’括起来
#!/bin/bash
read –p “Please input your choice (Yy/Nn)” choice
[ “$choice” == “Y” –o “$choice” == “y” ] && echo “OK.”&& exit 0
[ “$choice” == “N” –o “$choice” == “n” ] && echo “Oh.”&& exit 0
echo “I don’t know what your choice is.” && exit 0
46. shell 脚本的默认变量($0,$1,……)
执行脚本时,$0表示脚本名,$1,$2,……分别表示参数的个数,$# 参数的个数
$@ 代表”$1”、”$2”,…… $* 表示”$1 $2 $3 $4 ……”
#!/bin/bash
echo "The script name is $0."
echo "The total parametrs is $#."
[ $# -lt 2 ] && echo "Please input enoughtparameters." && exit 0
echo "The parameters are $@."
echo "The parameters are also $*."
当运行时输入:#sh parameters.sh qwerboojiangbo Jia,则输出为
……is 3.[enter] ……is 3.[enter] ……are qwerboo jiangbo Jia. [enter] …… also are qwerboo jiangbo Jia.
47. shift偏移参数
#!/bin/bash
echo “Total parameters numberis $#.”
echo “Whole parameters are $@”
shift
echo “Totalparameters number is $#.”
echo “Whole parameters are $@”
shift 3
echo “Total parameters numberis $#.”
echo “Whole parameters are $@”
运行:# sh parameters.sh one two threefour five six
# 6 [enter] one-six [enter] 5 [enter] two-six [enter] 3 [enter] five six
48. if then条件测试
#!/bin/bash
echo “Please input ‘hello’ asparameter.”
if [ $# -lt 1 ]; then #测试输入参数是否为1
echo “You MUST input aparameter.”
elif [ “$1” == “hello” ]; then
echo “Hello!”
else
echo “Only ‘hello’ isallowed to be the parameter.”
fi
49. shell实例
#!/bin/bash
echo "This programcalculates how many days before your demobilization date..."
read -p "Please inputyour demobilization date (YYYYMMDD): " deDate
isValid=$(echo $deDate | grep'[0-9]\{8\}')
if [ "$isValid" =="" ]; then
echo "Your input is notvalid!"
exit 0
fi
date2Sec=`date--date="$deDate" +%s`
dateNow=`date +%s`
dateLeft=$(($date2Sec -$dateNow))
if [ $dateLeft -lt 0 ]; then
echo "You havedemobilizated!"
exit 0
else
echo "You have$(($dateLeft/60/60/24)) days left..."
fi
50. case…esac语句
case $var in #!/bin/bash
“varContent”) case $1 in
content “hello”)
;; echo “Hello,how are you?”
…… ;;
*) “”)
exit 1 echo “You Mustinput a parmter.”
;; ;;
esac *)
;;
esac
51. function funcName(){
程序块
}
#!/bin/bash
function printIt(){
echo"Your choice is $1" #function中的$0,$1……和shell中的$0,$1等不一样,执行函数时可##以后接参数
}
echo "This program willprint your choice!"
case $1 in
"one")
printIt 1
;;
"two")
printIt 2
;;
"Three")
printIt 3
;;
*)
echo "Usage $0{one|two|three}"
;;
esac
52. 循环
while [condition ] until [ condition]
do do
程序块 程序块
done done
#!/bin/bash
i=1
s=0
while [ “$i”–le 100 ]
do
s=$(($s+$i))
i=$(($i+1))
done
echo “1+2…+100=$s.”
53. for…do…done
1. for var in cond1 cond2 cond3… for animal in cat dog elephant
do do
程序段 echo “They are${animal}s…”
done done
users=`cut –d‘:’ –f 1 /etc/passwd`
for user in $users
do
id $user
finger $user
done
2. for ((初始值;限制值;执行步长))
do
程序段
done
read -p "Please input a number, I will countfor 1+2+...+your_input: " num
i=0
s=0
for ((i=1; i <= $num; i= i + 1))
do
s=$(($s + $i))
done
echo "The result of'1+2+3...+$num' is: $s."
变量:需要拿出来时就需要加$
54. shell脚本追踪与调试
# sh [-nvx]script.sh
-n 不执行脚本,只检查语法 -v 在执行脚本前,先将脚本的内容输出到屏幕上
-x 将使用到的脚本语句输出到屏幕上,很有用
55. Linux账号管理与ACL权限设置
/etc/passwd每一行一个账号 /etc/shadow存放真正密码,每一列分布是账号名称,密码,最近更改密码的日期,密码不可被更改的天数,密码需要重新更改的天数,需更改前警告的天数,密码过期后宽限时间,账号失效日期,保留
/etc/group 组名,密码,组ID,组支持的用户
#groups 查看组内用户
# newgrpgrpname 切换组
56. 账号管理
useradd [-uUID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 账号名
-u 后接UID -M 强制!不要创建用户主文件夹 –m 强制创建主文件夹
添加用户后一般不能直接登录,需要先修改密码
# passwdusername 以root修改其他用户密码
$passwd 修改自己密码
# userdel[-r] username -r 连同主文件夹也删了
57. 用户功能
# finger[-s] username
-s 仅列出用户账号、全名、终端机代号与登录时间等
58. 更改shell
$ chsh[-ls]
-l 列出目前系统可用shell,其实就是/etc/shells内容
-s 修改自己的shell
# chsh –s/bin/csh
59. id [username] 查询某人或自己的相关的UID/GID等相关信息
60. groupadd [-g gid] usrgrpname
groupdel[grpname]
61. su [-l] [-c 命令] [username]
$ su 需输入root密码,而且环境变量还是普通用户
$ su - 需要输入root密码,但是环境变量也切换为root用户
# su -lvbird 切换为vbird用户
$ su - -c “命令” 仅想以root身份执行一条命令
62. sudo [-b] [-u 新用户账号] 执行root权限
-b 将后续的命令让系统自行执行,而不与目前的shell产生影响
-u 后接欲切换的用户,若无此项则默认为root身份
# sudo –uvbird touch /tmp/newfile 以vbird身份创建newfile
只有在/etc/sudoers文件存在的账户才可以执行sudo命令,并且执行时需输入自己的密码
visudo 可以用来修改/etc/sudoers文件,比如默认只有root可以执行sudo命令,如下所示
用户账号 登录者来源主机=(可切换身份) 可执行的命令
root ALL=(ALL) ALL
qwerboo ALL=(ALL) ALL 此处可加入绝对路径,限制只使用某
些命令
加入第二行之后,qwerboo即可执行sudo命令,且执行时只需输入自己的密码
63. w,who 查看已登录用户 last 查看过去登录历史
write 用户账号 [用户所在终端接口] ctrl+d结束输入
wall “message” 可以对系统内所有用户发送广播
64. mail -s “title” username [enter] text
以.结束,且.必须独占一行
# echo “testfor mail!” | mail –s “mail from root” qwerboo 或
# mail –s “title”qwerboo < file
65. fork出来的进程与父进程之间的唯一区别就是pid不同
66. 将命令丢到后台中执行时,需在命令结尾加&
67.查看目前后台工作状态:jobs [-lrs]
-l 将pid也列出来 -r 仅列出在后台运行的工作 -s 仅列出在后台暂停的工作
68. ps
-A 列出所有进程,与-e作用相同 -a 列出除了terminal以外的所有进程
-u 有效用户的进程
常用的有 ps -l; ps aux
69. top 查看动态进程变化
-d 后接秒数,表示更新的秒数,默认是5秒 -p 指定某些pid来进行查看
70.Daemon 常驻程序,服务的完成就是靠daemon来完成
有 stand_alone和super daemon两种,前者可以自行启动,常驻内存,因此提供服务也快;后者本质是一个特殊的daemon,统一管理相关服务。当有请求时才启动想关服务,服务结束后关闭。
71. run level
0:halt 1:single user mode 2:multi-user, without NFS 3:Full mlti-ueser mode 4:unused 5: x11 6:reboot
72.静态库与动态库
静态库:扩展名.a,通常为libxxx.a。编译的时候会直接整合到程序中,因此可以独立执行。升级难度加大。
动态库:.so,扩展名为libxxx.so。升级难度易。