linux高级命令篇(尚观学习笔记)

发布时间:2020-03-30编辑:脚本学堂
本文介绍下,linux中的一些高级命令,来自尚观的学习笔记,有需要的朋友参考下。

以下分享linux中的一些高级命令,供大家参考。

先来看一个命令:
 

复制代码 代码示例:
[root@jbxue tmp]# vncviewer 192.168.2.253

高级文件管理命令:
cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename 
   只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file

参数:
 

-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
 

例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
 

复制代码 代码示例:
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
 

复制代码 代码示例:
cat -b textfile1 textfile2 >> textfile3

把test.txt文件扔进垃圾箱,赋空值test.txt
 

复制代码 代码示例:
cat /dev/null > /etc/test.txt 

cat :
 

复制代码 代码示例:

[root@jbxue tmp]# cat a   //查看一个文件
haha
[root@jbxue tmp]# cat a  > a.txt    添加a到一个文件中会覆盖之前的内容
[root@jbxue tmp]# cat a.txt
haha
[root@jbxue tmp]# cat a  >> a.txt  追加,不会覆盖之前的内容
[root@jbxue tmp]# cat a.txt
haha
haha
[root@jbxue tmp]# cat -n a.txt  显示内容和行号
     1  haha
     2  haha

[root@jbxue tmp]# cat -b a.txt   //不显示空行行号但是空格是显示的
     1  haha
     2  haha

     3  haha
[root@jbxue tmp]# cat -bs a.txt   //把多个空行合并成1行
     1  haha
     2  haha
     3  haha

[root@jbxue tmp]# cat b.txt
heihei
1111111
2222222
[root@jbxue tmp]# tac b.txt  //倒序显示
2222222
1111111
heihei

===============================================
[root@jbxue tmp]# cat a.txt | grep -v ^$   //不显示空行  ^$ 为显示空行   -v表示取反
haha  
haha
haha
 

tr:
只能替换单个字符
 

复制代码 代码示例:
[root@jbxue tmp]# cat a.txt | tr 'h'  'A'   //讲所有的h替换成A
AaAa
AaAa
AaAa
[root@jbxue tmp]# cat a.txt | tr 'a-z'  'A-Z'  //将所有的小写字符换成大写 
HAHA
HAHA
HAHA

cut:命令

1 一两句话描述一下cut命令吧!
正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。
cut是以每一行为一个处理对象的,这种机制和sed是一样的。(关于sed的入门文章将在近期发布)
2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?
cut命令主要是接受三个定位方法:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f  指定第几部分
第四,-d指定分割符
事例:
 

复制代码 代码示例:
[root@jbxue tmp]# cat c.txt
haha heihei nihao 4444
haha heihei nihao 4444
haha heihei nihao 4444
[root@jbxue tmp]# cut -d " " -f 2 c.txt  //-d 指定分隔符 -f指定取第几列
heihei
heihei
heihei
[root@jbxue tmp]# cut -d " " -f 1,3 c.txt  //取第1和第3列
haha nihao
haha nihao
haha nihao
[root@jbxue tmp]# cut -d " " -f 3- c.txt  //取第三列以后的所有字段
nihao 4444
nihao 4444
nihao 4444
 

具体事例:
取本机IP地址 192.168.1.253
方法一:
 

复制代码 代码示例:
[root@jbxue tmp]# ifconfig  eth0 | grep Bca | cut -d : -f 2 | cut -d ' ' -f 1
192.168.2.253
 

方法二:
 

复制代码 代码示例:
[root@jbxue tmp]# cat -n /etc/sysconfig/network-scripts/ifcfg-eth0 | grep 11 | cut -d = -f 2
192.168.2.253
 

补充
1 以“字节”定位,给个最简单的例子?
举个例子吧,当你执行ps命令时,会输出类似如下的内容:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)
 

如果想提取每一行的第3个字节,就这样:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who|cut -b 3
c
c
c

看明白了吧,-b后面可以设定要提取哪一个字节,其实-b和3之间没有空格也是可以的,但推荐有空格:)

2 如果“字节”定位中,我想提取第3,第4、第5和第8个字节,怎么办?
-b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了。
例子:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who|cut -b 3-5,8
croe
croe
croe

注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。
这个例子就可以说明这个问题:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who|cut -b 8,3-5
croe
croe
croe

3 还有哪些类似“3-5”这样的小技巧,列举一下吧!
 

复制代码 代码示例:

[rocrocket@rocrocket programming]$ who
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)

[rocrocket@rocrocket programming]$ who|cut -b -3
roc
roc
roc
[rocrocket@rocrocket programming]$ who|cut -b 3-
crocket :0           2009-01-08 11:07
crocket pts/0        2009-01-08 11:23 (:0.0)
crocket pts/1        2009-01-08 14:15 (:0.0)
 

想必你也看到了,-3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节“c”。
如果我执行who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的c的。看:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who|cut -b -3,3-
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)
 

4 给个以字符为定位标志的最简单的例子吧!
下面例子你似曾相识,提取第3,第4,第5和第8个字符:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ who|cut -c 3-5,8
croe
croe
croe
 

不过,看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然,看似相同,只是因为这个例子举的不好,who输出的都是单字节字符,所以用-b和-c没有区别,如果你提取中文,区别就看出来了,来,看看中文提取的情况:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt
?
?
?
?
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt




 

看到了吧,用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码
既然提到了这个知识点,就再补充一句,如果你学有余力,就提高一下。
当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。例子如下:
 

复制代码 代码示例:
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2
?
?
?
?
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3




 

5 域是怎么回事呢?解释解释:)
为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。
(下面的讲解内容是在假设你对/etc/passwd文件的内容和组织形式比较了解的情况下进行的。)

 1/4    1 2 3 4 下一页 尾页