1、修改文本界面字体颜色
编辑/etc/DIR_COLORS文件,修改文件中的对应文件类型的颜色字号
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
2、vi编辑器查找某关键字的位置,首先进入命令行模式,比如要搜索dir,则输入/dir,就会定位到第一个dir的位置,也就是/搜索单词,按n或者n+shift可以往下往上查找下一个
3、source命令
source命令是由bash shell内置命令,从C Shell而来,它可以使用一个文件生效,进而影响运行环境。
比如,linux系统中echo $A,结果会输出空,新建文件t.sh,内容为
#!/bash/bin
A=1
保存退出,使用source t.sh,echo $A,此时会输入1
source命令用得比较多,在于修改环境配置文件/etc/profile文件后,需要配置立即生效,就使用source /etc/profile
source的使用方式,在一定时候,也可以用.来使用,但是两者不完全一样。
4、nslookup命令
用来查看dns的记录,查看域名解析是否正常,在网络故障中用来排除故障。
比如,nslookup baidu.com,还可以nslookup -params,加参数查询更新结果
5、cat
cat用于连接文件,并标准化输出设备上,也就是显示文件
cat -n a.txt > b.txt,将a.txt文件加上行号,输出到b.txt文件
6、chattr
用于改变文件的属性,这个命令放在ext2的文件系统中,这些属性有8种模式,
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防意外删除
chattr +i a.txt,执行此命令后,即使是root用户,也无法删除a.txt文件。使用强制删除rm -f a.txt,也会提示
Operation not permitted
7、lsattr
用于显示文件的属性
8、rm
用于删除文件或者目录
rm -rf dd 强制删除dd目录下的所有文件和目录,r参数指recursive,递归删除目录和子目录
9、mv
移动文件至某个目录下
mv a.txt dd,将a.txt文件移动到dd目录下,如果a.txt有chattr的i属性,那么将会提示不可移动
10、chgrp
改变某个文件或者目录所属的组
chgrp -v chen a.txt 改变a.txt文件的所属组为chen,-v参数表示显示执行过程
11、chmod
对文件或者目录进行权限控制
ls -l 可以显示某文件的权限,u代表所属拥有者,g代表所属组,o表示其他
chmod a+w a.txt表示修改a.txt的所属拥有者,组,其他用户,可以进行write操作
12、chown
改变文件的拥有者,这个命令只有root有权限使用
chown root:chen a.txt 将a.txt拥有者改为root群组下的chen用户
13、
/etc/group 这个文件可以查看所有用户组
/etc/passwd 这个文件可以查看所有用户
useradd 添加用户
passwd 重置密码
su 切换用户
groups 查看当前用户所属组下的所有用户
groupadd 添加群组
groupdel 删除群组
groupmod 修改用户组信息
14、echo和printf
终端打印,如果是单引号‘’里面包含$变量,那么单引号是不识别变量的,会照原文输出;
如果是双引号"$a",echo 会识别变量$a,并把它的值打印出来
printf也是终端打印,printf "%-5s %-2s %-4.2f" abcd ghi 56.755,其中
%-5s表示宽度为5,且左对齐的字符串,-表示左对齐;
%-2s表示宽度为2左对齐的字符串;
%-4.2f表示宽度为4,保留2位小数,左对齐的数字;
常用的参数有:
%u不带正负号的十进制值
%o表示不带正负号的八进制值
%x(小写)不带正负号的十六进制值,a-f表示10-15
%X(大写)不带正负号的十六进制值,A-F表示10-15
%f表示浮点数
15、expr一种运算方法,常用运输符有+,-,\*,/,%,分别是加减乘除求模,乘要加转义
result=`expr 1+2` 结果result值为3
result=$(expr $no1+3)运算结果result为no1加3
16、()运算符
result=$((sno1+sno2))
echo $result,result值为sno1加上sno2,注意是2层括号,不然语法会出错
17、let命令,一种运算命令
#!/bin/bash
n1=3
n2=4
let n3=n1+n2
echo $n3 此时n3值为7
18、[]运算符
与let相似,可以是用$前缀
n1=1
n2=4
result=$[$n1+n2]或者result=$[a+b]
总结出的规律就是最外面一层一定要有$,如果是result=[$a+$b],那么result结果是[1+4]
19、bc精密计算
echo "3.265*3" | bc
意思就是计算3.265乘以3,默认保留原来小数位9.795
echo "scale=2;3/8" | bc
参数scale就是设置精度,小数位2位,结果是0.37
20、常用变量
"" 双引号允许通过$引用其他变量
'' 单引号禁止引用其他变量,$默认普通字符输出
``将命令执行结果输出给变量
21、用户自定义变量
export 变量名
export data=1
清除用户定义的变量
unset data
全局配置文件/etc/profile
用户配置文件./~bash_profile
set 命令可以查看所有shell变量,其中包含环境变量
常见的环境变量
22、read
读取用户控制台输入的数据,可以加参数-p提示
read -p "please input your paramaters:" one two three
控制台提示输入时就输入数据用空格或者回车键来跳转到第二个参数的输入
如何引用输入的数据呢,也是一样用$,$one $two $three
23、文件描述符和重定向
文件描述符是和文件输入输出相关联的非负整数,Linux内核Kernel利用文件描述符来访问文件。打开保存文件或者新建文件,内核都会返回一个文件描述符,读取文件也要使用文件描述符来指定待读写的文件,常见文件描述符有stdin、stdout、stderr
系统预留的文件描述符
stdin:0 标准输入
stdout:1 标准输出
stderr:2 标准错误
重定向输入到文本
echo "hello world">a.txt,输入前,文件内容会被清空
重定向输入到文本,以追加的形式
echo "hello world">>a.txt,写入文件后,会被追加到文件尾巴
标准错误输出
a.txt文件不存在,所以cat a.txt肯定输出错误信息
[root@localhost text]# cat a.txt
cat: linuxde.net: No such file or directory
标准错误输出重定向的方法
cat a.txt 2>b.txt 或者 cat a.txt &>b.txt 将错误信息保存到b.txt
cat a.txt 2>/dev/null 将错误信息丢弃到/dev/null,/dev/null是一个特殊设备文件,这个文件收到任何数据都会被丢弃,通常被称为位桶或者黑洞。
24、tee文件
可以将数据重定向保存到文件,同时还可以把输出文件作为下一个stdin的输入
ls -l | tee a.txt | less
<:用于从文件读取至stdin
echo "hello" > a.txt
exec 3<a.txt,用自定义描述符3读取a.txt文件
cat <& 3 ,结果是输入hello
>:用于截断模式的追加
exec 4> a.txt
echo hello 4>& a.txt
>:以截断模式对文件进行写入,会把原来文件内容清空
>>:以追加模式对文件进行写入,会把写入内容追加到文件尾巴
25、exec
调用并执行指令的命令
echo hello 是打印出hello
exec -c echo hello 也是一样,把echo hello 当做命令来执行,也是打印hello
26、alias别名:提供一种便捷的方式来完成某些长命令的操作
比如系统默认ls是显示当前目录下的所有文件,默认不带参数-l,现在修改为默认带参数-l
alias ls='ls -l' 执行此命令后使用ls,就会默认带参数-l
使用alias可以查看当前系统中的别名。如果在特殊的时候不想使用别名,
可以加转义字符\,例如\ls
删除别名:unalias 别名,例如unalias ls
alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名。
27、bash是一种解释型语言,同样支持函数。函数的定义有2种
第一:
function 函数名(){
}
第二种:
函数名(){
}
函数的使用,直接使用函数名就可以,例如
function func1(){
}
要调用函数func1,直接func1
shell中函数的定义要在函数调用之前,也就是shell要按顺序先定义函数,在调用。
函数中数字判断一些命令:
#-gt是大于
#-lt是小于
#-eq是等于
#-ne是不等于
#-ge是大于等于
#le是小于等于
函数带参数的情况下,接收第一个参数用变量$1,$2......以此类推来接收。调用参数func2 1 3 ,这个例子func2是函数名,传参数1和3,func2函数中用$1和$2来接收1和3,$0代表函数本身(shell文件名称)。而且函数返回值只能用$?来接收引用。
经典递归:fork炸弹
也是函数本身调用本身,这样不断地递归,不断生成新的进程,占用系统资源,造成拒绝服务攻击。
28、test
shell中测试条件表达式的工具
-b<文件>:如果文件为一个块特殊文件,则为真;
-c<文件>:如果文件为一个字符特殊文件,则为真;
-d<文件>:如果文件为一个目录,则为真;
-e<文件>:如果文件存在,则为真;
-f<文件>:如果文件为一个普通文件,则为真;
-g<文件>:如果设置了文件的SGID位,则为真;
-G<文件>:如果文件存在且归该组所有,则为真;
-k<文件>:如果设置了文件的粘着位,则为真;
-O<文件>:如果文件存在并且归该用户所有,则为真;
-p<文件>:如果文件为一个命名管道,则为真;
-r<文件>:如果文件可读,则为真;
-s<文件>:如果文件的长度不为零,则为真;
-S<文件>:如果文件为一个套接字特殊文件,则为真;
-u<文件>:如果设置了文件的SUID位,则为真;
-w<文件>:如果文件可写,则为真;
-x<文件>:如果文件可执行,则为真。
if 判断条件[]大括号,前后要空格
29、seq
产生某个数到某个数之间的整数
$(seq 1 4)产生1到4之间的所有整数,1 2 3 4
30、for循环
其中${array[@]}为数组所有值,$(seq 1 5)产生1到5之间的所有整数
31、while循环
32、case
33、until
根据条件执行重复操作,直到条件成立为止,跟while相反,只要条件为假就执行。
34、break 跳出当前循环体,执行循环体之后的命令,也就是结束循环,执行done后面的命令
35、continue 跳出本次循环体后的命令,执行下一次判断再循环
36、date显示日期,可以加参数--help,查看格式化参数
37、sleep指定要暂停时间的长度
时间:指定要暂停时间的长度。
时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。
执行此shell时,会延迟5秒输出1
38、shell脚本自身含有调试功能
bash -x test.sh 或者 sh -x test.sh,执行过程可以查看调试过程
39、cat 用来连接文件并标准输出到设备上,cat经常用来显示文件的内容
可以加参数-n用来显示行号
more 是一款vi编辑器的过滤器,用来全屏显示文件的内容,可以按快捷键Enter翻滚下一行,也可以用空格查看下一屏,Q退出查看
40、find
用来在指定目录下查看某文件
find /home -name "*.sh" 用来查看/home下的shell文件
41、xargs 用作替换工具,读取输入数据重新格式化后输出
42、tr
可以用来对标准输入的字符进行替换、压缩、删除。他可以将一组字符变成另一组字符。
把小写字母换成大写字母,去掉数字
43、sort 对文件进行排序,并将排序结果输出,sort可以从指定文件输入也可以从stdin输入。
把文件的每一行当做一个单位,按顺序比较每个单位的每个字母,从左到右比较ASCII编码大小
44、uniq用于报告或者忽略文件中的重复行,一般与sort结合使用
-c或——count:在每列旁边显示该行重复出现的次数; -d或--repeated:仅显示重复出现的行列; -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位; -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符; -u或——unique:仅显示出一次的行列; -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
45、% %% # ##切割文件名和提取文件名和文件后缀
% 是从右到左,匹配通配符,然后删掉匹配字符串,属于非贪婪,匹配第一个就删除停止。
%% 是从右到左,匹配通配符,然后删掉全部匹配的字符,属于贪婪,会删掉全部匹配的。
# 是从左到右,匹配通配符,然后删掉匹配的字符串,属于非贪婪,匹配第一个就删除停止。
## 从左到右,匹配通配符,然后删掉全部匹配的字符串,属于贪婪,会从左到右删掉全部匹配的字符串。
46、grep(global search regular expression and point out the line 全面搜索正则表达式并打印出来),一种强大的文本搜索工具,使用正则表达式搜索文本,并输出出来
47、cut 用来显示行中的指定部分、删除文件中的指定字段
-b:仅显示行中指定直接范围的内容; -c:仅显示行中指定范围的字符; -d:指定字段的分隔符,默认的字段分隔符为“TAB”; -f:显示指定字段的内容; -n:与“-b”选项连用,不分割多字节字符; --complement:补足被选择的字节、字符或字段; --out-delimiter=<字段分隔符>:指定输出内容是的字段分割符; --help:显示指令的帮助信息; --version:显示指令的版本信息。
指定字段的字符或者字节范围
cut命令可以将一串字符作为列来显示,字符字段的记法:
- N-:从第N个字节、字符、字段到结尾;
- N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
- -M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
- -b 表示字节;
- -c 表示字符;
- -f 表示定义字段。
48、awk命令
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
49、编写shell的过程中,偶尔需要临时存储一些数据,linux中适合存储数据就是/tmp,系统重启后,该目录就会被清空
50、comm 可以比较两个文件之间的交集、求差、差集
51、wget 从一个网址上去下载文件,非常稳定,特别是在网络差的环境下,即使服务器中断,它会再次链接到服务器进行下载,所以对下载大文件很有用。
lynx是纯文本模式的浏览器,不支持图像、音频等多媒体信息
52、who 查看当前登陆者的信息
53、w查看已经登陆的用户列表,并查看正在执行的命令
54、users 用于显示当前系统所有用户列表
uptime命令能够打印系统总共运行了多长时间和系统的平均负载;
last命令用于显示用户最近登录信息;
lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常;
time命令用于统计给定命令所花费的总时间。