linux基本操作
1、别名:alias
格式:alisa 别名=‘系统认可的命令‘
alias jsh=‘ls -lah’
jsh就可以执行ls –lah的命令
unalias取消别名
unalias jsh
2、树形目录
tree –L n [目录],其中n指定目录深度
3、拷贝目录
cp -r源目录 目标目录
4、移动目录:mv
mv [要移动目录][目标目录]
重命名:

5、正序查看文件内容:cat

cat -An :展示出行,每行最后以$结束

6、grep:在文件中搜寻字符串匹配的行并输出,多个文件以空格隔开。
-i不区分大小写
-v排除指定字符串
-c输出符合条件的行的个数
-E 以正则表达式的方式搜索
-F 以普通文本的方式搜索
-n 显示搜索到的内容在文件中的行号。


7、locate a.txt 在全局范围内查找文件名包含a.txt的文件
8.grep :是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来
grep ‘page_name’ madian.txt
在maidian.txt文件中查找包含page_name的行
8、sed
sed叫做流编辑器,在shell脚本和Makefile中作为过滤一使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换成为另一种格式输出。sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
a:追加,在当前行后添加一行或多行。
c:行替换,用c后面的字符串替换原数据行。
i:插入,在当前行前插入一行或多行。
p:打印,输出指定的行。
s:字符串替换,用一个字符串替换另外一个字符串。格式为'行范围s/旧字符串/新字符串/g'
(如果不加g的话,则表示只替换每行第一个匹配的串)
1、删除:d命令
sed ‘2d’ sed.txt -----删除sed.txt文件的第二行。
sed ‘2,
d
′
s
e
d
.
t
x
t
−
−
−
−
−
删
除
s
e
d
.
t
x
t
文
件
的
第
二
行
到
末
尾
所
有
行
。
s
e
d
′
d' sed.txt -----删除sed.txt文件的第二行到末尾所有行。 sed '
d′sed.txt−−−−−删除sed.txt文件的第二行到末尾所有行。sed′d’ sed.txt -----删除sed.txt文件的最后一行。
sed '/test/d ’ sed.txt -----删除sed.txt文件所有包含test的行。
sed '/[A-Za-z]/d ’ sed.txt -----删除sed.txt文件所有包含字母的行。
2、整行替换:c命令
将第二行替换成hello world
sed ‘2c hello world’ sed.txt
3、字符串替换:s命令
sed ‘s/hello/hi/g’ sed.txt
在整行范围内把hello替换为hi。如果没有g标记,则只有每行第一个匹配的hello被替换成hi。
sed ‘s/hello/hi/2’ sed.txt
## 此种写法表示只替换每行的第2个hello为hi
sed 's/hello/hi/2g' sed.txt
## 此种写法表示只替换每行的第2个以后的hello为hi(包括第2个)
sed -n 's/^hello/hi/p' sed.txt
## (-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的hello被替换成hi,就打印它。
sed -n '2,4p' sed.txt
## 打印输出sed.txt中的第2行和第4行
sed -n 's/hello/&-hi/gp' sed.txt
sed 's/^192.168.0.1/&-localhost/' sed.txt
sed 's/^192.168.0.1/[&]/' sed.txt
## &符号表示追加一个串到找到的串后。所有以192.168.0.1开头的行都会被替换成它自已加 -localhost,变成192.168.0.1-localhost。第三句表示给IP地址添加中括号
sed -n 's/\(liu\)jialing/\1tao/p' sed.txt
sed -n 's/\(liu\)jia\(ling\)/\1tao\2ss/p' sed.txt
## liu被标记为\1,所以liu会被保留下来(\1 == liu)
## ling被标记为\2,所以ling也会被保留下来(\2 == ling)
## 所以最后的结果就是\1tao\2ss == "liu" + "tao" + "ling" + "ss"
此处切记:\1代表的是被第一个()包含的内容,\1代表的是被第一个()包含的内容,……
上面命令的意思就是:被括号包含的字符串会保留下来,然后跟其他的字符串比如tao和ss组成新的字符串liutaolingss
sed 's#hello#hi#g' sed.txt
## 不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,"#"在这里是分隔符,代替了默认的"/"分隔符。表示把所有hello替换成hi。
选定行的范围:逗号
sed -n '/today/,/hello/p' sed.txt
## 所有在模板today和hello所确定的范围内的行都被打印。都找第一个,也就是说,从第一个today到第一个hello
sed -n '5,/^hello/p' sed.txt
sed -n '/^hello/,8p' sed.txt
## 打印从第五行开始到第一个包含以hello开始的行之间的所有行。
sed '/today/,/hello/s/$/www/' sed.txt
## 对于模板today和hello之间的行,每行的末尾用字符串www替换。
sed '/today/,/hello/s/^/www/' sed.txt
## 对于模板today和hello之间的行,每行的开头用字符串www替换。
sed '/^[A-Za-z]/s/5/five/g' sed.txt
## 将以字母开头的行中的数字5替换成five
4、多点编辑:e命令
sed -e ‘1,5d’ -e ‘s/hello/hi/’ sed.txt
(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用hello替换hi。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
sed --expression='s/hello/hi/' --expression='/today/d' sed.txt
## 一个比-e更好的命令是--expression。它能给sed表达式赋值。
5、从文件读入:r命令
sed ‘/hello/r file’ sed.txt
file里的内容被读进来,显示在与hello匹配的行下面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
6、写入文件:w命令
sed -n '/hello/w file' sed.txt
## 在sed.txt中所有包含hello的行都被写入file里。
7、追加命令:a命令
sed ‘/^hello/a\—>this is a example’ sed.txt
'—>this is a example’被追加到以hello开头的行(另起一行)后面,sed要求命令a后面有一个反斜杠。
8、插入:i命令
sed '/will/i\\some thing new -------------------------' sed.txt
## 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。
awk(报表生成器)
Awk是一个强大的处理文本的编程语言工具,其名称得自于它的创始人Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。简单来说awk就是扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,1表示第一个域, 1表示第一个域,1表示第一个域,n表示第n个域。默认域分隔符是"空白键" 或 “[tab]键”,所以$1表示登录用户,$3表示登录用户ip,以此类推
1、假设last -n 5的输出如下:
[root@localhost ~]# last -n 5
root pts/0 192.168.123.1 Wed Dec 28 01:55 still logged in
reboot system boot 2.6.32-573.el6.x Tue Dec 27 04:25 - 03:11 (22:46)
root pts/1 192.168.123.1 Tue Dec 27 02:00 - 02:00 (00:00)
root pts/1 192.168.123.1 Tue Dec 27 01:59 - 02:00 (00:00)
root pts/0 192.168.123.1 Tue Dec 27 01:59 - down (00:16)
2、只显示五个最近登录的账号:
[root@localhost ~]# last -n 5 | awk '{print $1}'
root
reboot
root
root
root
3、显示/etc/passwd的账户:
[root@localhost ~]# cat /etc/passwd |awk -F ':' '{print $1}'
root
bin
daemon
adm
lp
这种是awk+action的示例,每行都会执行action{print $1}。
-F指定域分隔符为’:’
4、显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
[root@localhost ~]# cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
5、BEGIN and END
如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
cat /etc/passwd | awk -F ':' 'BEGIN {print "name \t shell"} {print$1"\t"$7} END {print "blue,/bin/bash"}'
name,shell
root,/bin/bash
daemon,/bin/sh
....
blue,/bin/nosh
awk工作流程是这样的:先执行BEGIN,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,1表示第一个域, 1表示第一个域,1表示第一个域,n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录••••••直到所有的记录都读完,最后执行END操作。
1、假设last -n 5的输出如下:
[root@localhost ~]# last -n 5
root pts/0 192.168.123.1 Wed Dec 28 01:55 still logged in
reboot system boot 2.6.32-573.el6.x Tue Dec 27 04:25 - 03:11 (22:46)
root pts/1 192.168.123.1 Tue Dec 27 02:00 - 02:00 (00:00)
root pts/1 192.168.123.1 Tue Dec 27 01:59 - 02:00 (00:00)
root pts/0 192.168.123.1 Tue Dec 27 01:59 - down (00:16)
2、只显示五个最近登录的账号:
[root@localhost ~]# last -n 5 | awk '{print $1}'
root
reboot
root
root
root
3、显示/etc/passwd的账户:
[root@localhost ~]# cat /etc/passwd |awk -F ':' '{print $1}'
root
bin
daemon
adm
lp
这种是awk+action的示例,每行都会执行action{print $1}。
-F指定域分隔符为’:’
4、显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
[root@localhost ~]# cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
5、BEGIN and END
如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
cat /etc/passwd | awk -F ':' 'BEGIN {print "name \t shell"} {print$1"\t"$7} END {print "blue,/bin/bash"}'
name,shell
root,/bin/bash
daemon,/bin/sh
....
blue,/bin/nosh
awk工作流程是这样的:先执行BEGIN,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,1表示第一个域, 1表示第一个域,1表示第一个域,n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录••••••直到所有的记录都读完,最后执行END操作。