09
GPL,BSD,Apache三个开源协定的大体联系及其区别
1.自由软件,版权描述:但是照样是有版权的
2.开源协定,版权描述
www.kernel.org内核版本的版本号查看网址,也是官网
查看最新kernel的最新版本,www.kernel.org习惯了解
列出linux发行版和linux内核的关系
Lniux发行版,GUN:GUN/Linux。
源代码:必须要编译才可以运行,所以发行版是已经将源代码已经编译完成的东西,组合在一起,就形成了发行版,主流的三大发行版:Fedora:它为redhat提供的桌面版,企业测试使用居多。
发行版1.Redhat(Centos)2.SUSE(企业版最好看的是SUSE)3.Debian(Ubuntu属于Debian的发行版,Mint),最难用,做出的限制最少,高手用。
Gentoo
LFS(Linux 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几个重要哲学思想:一切皆文件,小文件合成大功能,文本文件做配置文件
查看文本的(不要试图去打开一个二进制文件):
cat、tac、more、less、head、tail、
一、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+PageUp和shift+PageDown也是可以翻屏的。但是不一定全部能翻阅,内存保存的不够
二、more,less
分屏显示:
more、less
more:向后翻,翻到最后会退出去的,按q可以退出
less:这个也是很常用的(man打开文件就是用less方式打开的,所以和man的使用一样)
less翻到最后不会退出的,b按前翻。只有在按q才会退出
跟cat不一样的是,这两个命令是分屏显示的,可以随意跳转,是很好的,而cat 一次性列出全部,很麻烦
两个命令都是用d和space来翻页,选中之后用N/n翻页
三、head,tail
head:查看前n行
tail:查看后n行
默认是10行,-n 参数指定出多少行
tail -f :查看文件尾部,不退出,等待显示后续追加至此文件的新内容:
就是不会立即退出,会及时更新显示
这个很有用,在监控一个日志或者是服务的时候,在排查问题上都是很有用的
所以这个命令是非常好有用的
墨菲定律:最不可能发生的事情,可能就会发生在你身上
文本处理:
cut、join(用的不多,不用讲)、sed(功能非常强大,但是非常的难),awk(这个更难,自己建一个命令就是一个编程语言,难得前提是它功能非常强大)
所以sed,awk必须学会,而且要学会(三大利器:sed,awk,grep)
什么是数据库?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
因为我们uniq和sort经常联合使用――讲到管道才有用
uniq -d 只显示重复的行 -D就是显示重复的行都列出来
-c就可以看到某一行重复的次数
三、wc
文本统计类的命令
wc:word 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
可以实现文件内所有文档更换大小写,当然也可以把它换成不同的字符,前提是需要
tr -d 'ab' 表示删除出现在字符集中的所有字符
bash学习
特性:shell是离用户最近的一个程序,shell的中文是外壳的意思
广义上的shell有GUI:Gnome,KDE,Xfce
CLI:sh,csh(支持编程,但是类似于C语言),ksh(功能比csh更强大,但是它是付费的shell),bash(兼具ksh和csh更强大,但是他是开源的,免费的)
最新出现的zsh(功能更加强大),所以对于我们而言,bash学习最好
shell也是一个程序,只不过是功能非常强大的程序。
当用户登录的时候,其实就打开了一个bash程序
如果一个系统同时登录了root和student用户,而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
命令历史的使用技巧
1、!n:执行命令历史中的第n条命令:
2、!-n:执行命令历史中倒数的第n条命令:
3、!!执行上一条命令=用上键来选择
4、!string:执行命令行中最近一次出现的单词或者字母
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]
通常用于查找模糊文件名
相反的匹配法:[^]:匹配指定范围之外的任意单个字符
我们可以创建一个文件名有空格的,但是不建议创建文件有个空格的
上图中其实man 7 glob就可以看到所有这些咯
通常^在【【:lower:】】中在 【^【:lower:】】使用
本文出自 “malinux学习” 博客,谢绝转载!