0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob

09

0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob_第1张图片 

GPL,BSD,Apache三个开源协定的大体联系及其区别

1.自由软件,版权描述:但是照样是有版权的

2.开源协定,版权描述

 

www.kernel.org内核版本的版本号查看网址,也是官网

查看最新kernel的最新版本,www.kernel.org习惯了解

列出linux发行版和linux内核的关系

Lniux发行版,GUNGUN/Linux

源代码:必须要编译才可以运行,所以发行版是已经将源代码已经编译完成的东西,组合在一起,就形成了发行版,主流的三大发行版:Fedora:它为redhat提供的桌面版,企业测试使用居多

发行版1.Redhat(Centos)2.SUSE企业版最好看的是SUSE3.DebianUbuntu属于Debian的发行版Mint),最难用,做出的限制最少,高手用。

 

Gentoo

LFSLinux From Scratch起跑线严格来说,LFS不是一个发行版,而是一本书

教你编译linux和找软件构成。市面上玩转LFS的人不多,如果你会这个的话,就完全了解Linux~

 

编译指的是什么?就是把源代码变成可以在CPU执行的二进制代码

Redhat发行版是已经编译好的,是通用格式(在比较老的cpu上编译,就能兼容老版本编译好的。

我们如果要想发挥某个程序的性能,就在这个平台上,如在Redhat上编译,就在这个平台上去安装去配置。会更好的发挥程序的性能

所以自己编译和编译好的,优点在于可以更好的发挥CPU特性,但是也比较麻烦,时间也比较长,而编译好的,就是比较简单。

 

技术人员的成长道路:

“目标”,“衣带渐宽终不悔,为伊消得人憔悴”“众人寻她千百度,那人就在灯火阑珊处”不停的变目标,就会一事无成

二重境界:懂了很多,业务专家,业余使用者

任何一个领域,我们坚持2-3年可以专家,5年以上是权威,选择了就要坚持。

 

目录管理:

ls,cd,pwd,mkdir,rmdir,tree,rm,touch,stat,install,cp,mv,type,file

文件管理:

touch,stat,file(查看文件内容的类型的) ,rm,cp,mv,nano,type(查看命令类型的)

日期时间:

date,clock,hwclock,cal

Linux几个重要哲学思想:一切皆文件,小文件合成大功能,文本文件做配置文件

 

查看文本(不要试图去打开一个二进制文件)

cattacmorelessheadtail

 

一、cat 

查看文本文档的,不要去尝试打开一个二进制文件,像/bin/ls

cat 连接并且显示,可以连接多个文件进行多个显示  

cat /etc/passwd /etc/shadow逐个显示,所以叫做连接并显示

-n选项可以显示行号

-E显示每一行的行结束符号:对于Linux而言,行结束符是$,而对于Window而言,行的结束符$enter

所以为什么把Linux的文件放到Window去看的时候,都是在一行一行,而没有空格

-T显示制表符

[root@www ~]# cat -E /etc/issue

\S$

Kernel \r on an \m$

$

[root@www ~]#

如果用tac就是把文档倒过来连接显示

标准输入到标准输出

ctrl+c:控制信号,中断信号

我们在Linux下虚拟机不能翻屏,其实用shift+PageUpshift+PageDown也是可以翻屏的。但是不一定全部能翻阅,内存保存的不够

二、moreless

分屏显示:

moreless

more:向后翻,翻到最后会退出去的,按q可以退出

less:这个也是很常用的man打开文件就是用less方式打开的,所以和man的使用一样

less翻到最后不会退出的,b按前翻。只有在按q才会退出

cat不一样的是,这两个命令是分屏显示的,可以随意跳转,是很好的,而cat 一次性列出全部,很麻烦

两个命令都是用dspace来翻页,选中之后用N/n翻页

 

三、headtail

head:查看前n

tail:查看后n

默认是10行,-n 参数指定出多少行

tail -f :查看文件尾部,不退出,等待显示后续追加至此文件的新内容:

就是不会立即退出,会及时更新显示

这个很有用,在监控一个日志或者是服务的时候,在排查问题上都是很有用的

所以这个命令是非常好有用的

墨菲定律:最不可能发生的事情,可能就会发生在你身上

 

文本处理:

cutjoin(用的不多,不用讲)sed(功能非常强大,但是非常的难),awk(这个更难,自己建一个命令就是一个编程语言,难得前提是它功能非常强大)

所以sedawk必须学会,而且要学会(三大利器:sedawkgrep

 

什么是数据库?database

关系型数据库:

表:一个表可以没有行,但是不能没有列----------二维表,平面结构

如果用文本文件也是可以保存文件的,用:来分隔符,比如

tom:23:male:2013/05/06

比如在/etc/passwd也是用:来:分隔用户的各个属性的

四、cut

cut

-d:指定字段分隔符:默认是空格的

-f:指定要显示的字段(比如以:为分隔符的话,-f1就显示1个字段)

-f 1表示显示第一个字段,可以用 -f 1,3  或者是-f 1-3

[root@www ~]# tail /etc/passwd | cut -d: -f 1-3 

uucp:x:10

operator:x:11

games:x:12

gopher:x:13

[root@1qewr ~]# cut -d : -f1 /etc/passwd

root

bin

 

10

cut是文本处理当中最常用的命令之一

文本排序,sort也是和cut一样,无论文本的内容怎么切,只是对显示的内容做处理,对原文不加修改

一、sort

文本排序的命令:sort

sort仅仅是对于输出显示的内容排序,不会修改原文件

默认排序是根据ASCII码表的升序来体现的,就是从低到高

如果要从ASCII码表大到小的话就是加参数-r

是根据第一个字母大小来排序的,当然sort也是有选项的

比如文本都是数字的,那可以用-n选项来排序数字的大小

[root@www ~]# tail /etc/passwd | cut -d: -f 3  | sort -n 

10

11

499

[root@www ~]# tail /etc/passwd | cut -d: -f 3  | sort -n -r

499

99

89

上图是-n排数字大小,-r就是降序

[root@www ~]# sort /etc/passwd

avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

其实sort也是支持字段表示法,也可以和cut一样指定分隔符,只不过它的字段分隔符比较独特,是-t

这是因为开源比较恶心的是,很多命令不是同一个开发者开发创新的,所以有些同样的命令不是同一个选项。

-t:字段分隔符等同于cut -d 

-k:以哪一个字段为关键字进行排序(不会像cut-f会剪切  

sort可以看出显示还是完全显示,以某一个字段排序显示,不会像cut剪贴成一段或几段显示

表示-t:就是以冒号为分隔符,-k3表示以第三个字段为准进行排序为分隔符  -n表示数字大小排序出来

[root@www ~]# sort -t: -k3 -n  /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

如果加-u参数,相同的行只显示一次

[root@www ~]# sort -n /var/1 

25

25

65

 [root@www ~]# sort -nu /var/1 

25

65

如果要忽略字符的大小写用-f:排序时忽略字符的大小写

sort -u有一个相似的命令,是uniq

 

二、uniq  跟显示重复的行有关

uniq他是在在Linux中,相邻并且重复的行,才是重复的行

不是相邻的不认为是重复的行的。

[root@www ~]# cat /var/2 

123

123

22

123

[root@www ~]# uniq /var/2 

123

22

123

因为我们uniqsort经常联合使用――讲到管道才有用

uniq   -d   只显示重复的行    -D就是显示重复的行都列出来

-c就可以看到某一行重复的次数

0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob_第2张图片 

 

三、wc

文本统计类的命令

wcword count

[root@woyaowuliu ~]# wc /etc/passwd 

 20  26 892 /etc/passwd

[root@woyaowuliu ~]# wc /etc/passwd  -l

20 /etc/passwd

[root@woyaowuliu ~]# wc /etc/passwd  -w

26 /etc/passwd

[root@woyaowuliu ~]# wc /etc/passwd  -c

892 /etc/passwd

相应的显示行数  -l    显示单词数目 -w   只显示字节 -c

-L表示最长的一行包括多少个字符

这些其实不知道的时候man一下就可以了

 

四、tr

tr字符处理命令tr - translate or delete character(转换或者删除字符)

用于实现转换或者删除字符

tr [OPTION]... SET1 [SET2]

[root@www ~]# tr 'abcd' 'ABCD'

apple  》

Apple

boy    》

Boy

0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob_第3张图片 

spacer.gif 

可以实现文件内所有文档更换大小写,当然也可以把它换成不同的字符,前提是需要

tr -d 'ab'  表示删除出现在字符集中的所有字符

 

bash学习

特性:shell是离用户最近的一个程序,shell的中文是外壳的意思

广义上的shellGUI:Gnome,KDE,Xfce

CLI:shcsh(支持编程,但是类似于C语言),ksh(功能比csh更强大,但是它是付费的shell),bash(兼具kshcsh更强大,但是他是开源的,免费的)

最新出现的zsh(功能更加强大),所以对于我们而言,bash学习最好

 

shell也是一个程序,只不过是功能非常强大的程序。

当用户登录的时候,其实就打开了一个bash程序

如果一个系统同时登录了rootstudent用户,而bash程序只有一个,但是不同的进程分配给他们。所以它也允许一个用户打开多个shell,并且各个shell相互独立

进程:在每个进程看来,他们不知道有其他进程,只知道当前主机上只存在内核和当前进程,进程之间没有联系

进程是程序的副本(意思是进程可以有多个,程序只有一个),进程是程序执行的实例

bash也不例外,退出了,一个进程就结束了

[root@www ~]# type bash

bash is /usr/bin/bash

shell自身是一个外部命令

用户工作环境:   #    $  

shell中可以再打开一个shell了,就是子shell的概念

但是各个shell其实也是独立的,即使是父shell和子shell 的关系,但是他们的设定是没有关联的

 

bash:很多特性

1、命令历史、命令补全

2、管道、重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名通配

7、支持使用变量

8、最重要的一点,支持编程

10个命令放在一个文件里,一次性执行,这样的程序我们称之为脚本,而在bash 运行环境就是shell脚本的概念了

 

介绍bash的一些方便快捷的命令和快捷键

命令行编辑:

光标跳转:  ctrl+a :跳到命令行首

ctrl+e:跳到命令行尾

ctrl+u:删除光标至命令行首的内容

ctrl+k:删除光标至命令行尾

ctrl+l:可以实现清屏

 

五、history

history   查看命令历史

不想让别人看到你敲打过的命令

如   -c   清空命令历史

 -d删除    比如  history  -d 500

如果后面再加数字就是从那一个开始往下数,都删除了

如    history -d 500

我们之前敲过的命令,都会保存在家目录.bash_history里面,这个是隐藏的文件

   -w 保存命令历史至历史文件中去

我们的bash.history给我们保存多少条命令呢――默认是1000条,修改在/etc/profile文件

sed -i s/HISTSIZE=1000/HISTSIZE=10000/g’ /etc/profile

source /etc/profile (使其生效即可)

环境变量:PATH:命令搜索路径

HISTSIZE:命令历史大小,默认保存的是1000条  

[root@www ~]# echo $HISTSIZE

1000

命令历史的使用技巧

1n:执行命令历史中的第n条命令:

2-n:执行命令历史中倒数的第n条命令:

3!!执行上一条命令=用上键来选择

4string:执行命令行中最近一次出现的单词或者字母

5!$引用上一个命令中最后的一个参数=esc+.(按了esc松开了再按.)

=Alt+. 但是这个在远程终端是不支持的,通常我们经常用第二种

补全,跟思科路由器配置差不多的

路径补全 cd /etc/sysconfig/network-scripts/

六、clear

命令别名

clear清屏   而在Window的时候是用cls

所以习惯了cls我们可以取别名,用命令alias

alias CMDALIAS

[root@www ~]# alias cls=clear

shell中定义的别名仅在当前shell生命周期中有效:别名的有效范围为当前shell进程:

如果想让其永久有效,而且是全部用户生效,只需要在/etc/profile末尾加上

而只是个别用户有效,只需要在其家目录的.bash_profile末尾加上即可

 

许多我们经常使用的命令,我们都可以定义永久

如果想要撤销别名就用unalias CMDALIAS

\CMD就是不用别名  像cp默认别名是cp -i     \CMD就可以不带i参数

 

命令替换

把命中某个子命令替换为其执行结果的过程

如下所示

[root@www network-scripts]# echo "this is lujing is $(pwd)"

this is lujing is /etc/sysconfig/network-scripts

[root@www network-scripts]# touch ./file-$(date +%F-%H-%M-%S).txt

[root@www network-scripts]# ll file*

-rw-r--r--. 1 root root 0 Jul 23 02:52 file-2015-07-23-02-52-15.txt

-rw-r--r--. 1 root root 0 Jul 23 02:52 file-2015-07-23-02-52-27.txt

这种命令替换在平时很有用的

[root@1qewr ~]# echo "this is lujing is `pwd`"

this is lujing is /roo

$(COMMAND)=`COMMAND`        

``是反引号:不是单引号,命令替换

"":双引号:弱引用,可以实现变量替换

''单引号:是强引用,不完成变量替换

 

文件名通配符 -----------globbing也不是所有都能够匹配到的

常用文件名通配       

*(任何长度的任意字符)   

?(匹配任意单个字符)      

[](匹配指定范围内的任何单个字符)     [a-zA-Z]

wKiom1bHI7fiMstvAAA9tIgYFyA407.jpg 

通常用于查找模糊文件名

相反的匹配法:[^]:匹配指定范围之外的任意单个字符

我们可以创建一个文件名有空格的,但是不建议创建文件有个空格的

0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob_第4张图片 

上图中其实man 7 glob就可以看到所有这些咯

通常^在【【:lower:】】中在    【^:lower:】】使用

0219自学Linux_bash特性+命令学习(cut,sort,uniq,wc,tr,histroy,alias)+通配符glob_第5张图片 


本文出自 “malinux学习” 博客,谢绝转载!

你可能感兴趣的:(linux,源代码,通配符)