作业:
1.ls 命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小?
可以,使用ls -s xxx
2.通过帮助手册,学习使用du命令:
# du 估计文件空间使用量
-s 分割文件夹,不包括子目录大小
-h 以可读格式展示
3.通过帮助,学习read命令:
变量:内存空间,有名称
变量赋值:
变量替换
4.描述GPL,BSD,Apache三个开源协定的大体联系及区别。
自由软件开源协定,版权描述
BSD开源协议
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。
5.如何获取Linux当前最新的内核版本号?
$ cat /proc/version
列出你所了解的Linux发行版,并说明其跟Linux内核的关系。
Linux,GNU:GNU/Linux,源代码
发行版:Fedora,RedHat(Centos,),SUSE,Debian (Ubuntu,Mint),Gentoo(编译的可能性),LFS(Linux From Scratch)
RedHat:通用格式
查看文本:
cat、tac 、more、less、head、tail
cat:连接并显示
-n 显示时可以显示行号
-e 显示每一行结束符$
Ctrl+c 中止信号
命令输完不想执行也可以Ctrl+c
shift + PgUp/PgDn
分屏显示:
more 、less
more:向后翻
less: man用法
head:查看前n行
tail:查看后n行
-n 指定显示多少行 head -n 1 xxxxxx/head -1 xxxxxxx
-f 查看文件尾部,不退出,等待显示后续追加至此文件的新内容(监控服务运行的时候可以随时监控日志)
不要直接编辑etc下的文件!!!拷贝一份
文本处理:
cut、join、sed、awk
cut命令:以:作为分隔符,只显示第一个字段
cut -d: -f1 xxxxxx
-d:指定字段分隔符,默认是空格
-f:指定要显示的字段
-f 1,3 显示第一个和第三个
-f 1-3 显示第一个到第三个
文本排序:
不影响原文件中次序,字符在AscII码表中次序,按照升序
sort命令
-n:数值排序
-r:逆序排序
-t:字段分隔符
-k:以哪个字段为准进行排序
-u:排序后相同的行只显示一次
-f:排序时忽略字符大小写
uniq命令(略过重复行):如果重复行不相邻不认为是重复行。
-d:只显示重复行 -D:显示所有重复行
-c:显示某一行重复的次数
文本统计:
wc(word count)命令
行 单词数 字节数
-l 只显示行数 -w 只显示单词数 -c 只显示字节数
-L 最长的一行包含多少个字符
字符处理命令:
tr ——转换或删除字符
tr [OPTION]… SET1 [SET2]
tr set1 把小写转换为大写 tr ‘ab’ ‘AB’
输入重定向:
把/etc/passwd文件中所有小写字母都换成大写的:
# tr 'a-b' 'A-B' < /etc/passwd
-d:删除出现在字符集中的所有字符
bash及其特性:
程序:进程
进程:在每个进程看来,当前主机上只存在内核和当前进程
进程是程序的副本,进程是程序执行实例
shell自身是个外部程序,shell自有命令是内部
shell
子shell bash–bash pstree
bash:
1.命令历史
2.管道、重定向
3.命令别名
4.命令行编辑
5.命令行展开
6.文件名通配
7.变量
8.编程
命令行编辑:
光标跳转:
Ctrl+a :跳到命令行首
Ctrl+e :跳到命令行尾
Ctrl+u :删除光标至命令行首内容
Ctrl+e :删除光标至命令行尾内容
Ctrl+l :清屏
命令历史:
history : 查看命令历史(保存在内存缓冲区)
-c 清空命令历史
-d 删除指定位置的命令 history -d 500 10 从第500个开始删除10个
-w 保存命令历史至历史文件中
命令历史的使用技巧:
!n 执行命令历史中的第n条命令:
! -n: 执行命令历史中的倒数第n条命令
! !:执行上一条命令
! string:执行命令历史中以字符串开头的命令
! $ : 引用上一个命令的最后一个参数
Esc 松开 按 .
Alt+.远程终端不支持
命令补全:
tab键自动补全命令(Path设置正常,是在PATH环境下搜索补全,要能唯一标识命令)
两次tab键所有以这个字符开头的命令
路径补全:
给的路径下查找
命令别名:
alias CMDALIAS=‘COMMAND [options] [arguments]’(命令之间有空格则用引号)
在shell中定义的别名仅在当前shell生命周期中有效:别名的有效范围为当前shell进程
unalias 别名 撤销别名
\CMD 使用命令本身
命令替换:
把命令中某个子命令替换为其执行结果的过程
$(),COMMAND
创建以当前时间命名的文件:
file-2018-10-12-08-24-01.txt
touch ./file-$(date+%F-%H-%M-%S).txt
bash支持的引号:
``:命令替换
" ":弱引用,可以实现变量替换
’ ':强引用,不完成变量替换
文件名通配(globbing):
- : 任意长度的任意字符
? : 匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[a-zA-Z]
[[:space:]]:空白字符
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:alpha:]]:大小写字母 [^[:alpha:]]非字母(注:\在markdown中作转义)
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
#man 7 glob里面有说明
[^] : 匹配指定范围之外的任意单个字符
环境变量
PATH:命令搜索路径
HISTSIZE:命令缓冲区大小大小,默认是1000条
echo $变量名 获取命令
安装操作系统在硬盘或光盘上
计算资源
权限
用户 :获取资源或服务的标识
用户,容器,关联权限:用户组,方便地指派权限。用户组也是一个标识符
文件:被机器映射为某个标识符。
进程也有属组,执行发起者发起的进程。
安全上下文(secure context):
属主 属组 其他用户
文件:
r:可读,可以使用类似cat等命令查看文件内容
w:可写,可以编辑或删除此文件
x:可执行,eXecutable,可以在命令提示符下当作命令提交给内核运行
目录:
r:可以对此目录执行ls以列出内部的所有文件
w:可以在此目录创建文件
x:可以使用cd切换进此目录,也可以使用ls -l 查看内部文件的详细信息
一般不建议文件直接具有可执行权限,但是目录可以有
0 000 —:无权限
1 001 --x:执行
2 010 -w-:写
3 011 -wx:写和执行
4 100 r–:只读
5 101 r-x:读和执行
6 110 rw-:读写
7 111 rwx:读写执行
755:rwxr-xr-x
用户:UID,/etc/passwd
组:GID,/etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
用户类别:
管理员 :0
普通用户:1-65535(16位二进制)
系统用户 :1-499
一般用户:500-60000
用户组类别:
管理员组:
普通组:
系统组:
一般组:
用户组类别:
基本组:用户的默认组
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户同名的组
附加组:额外组:默认组以外的其他组
account: 用户名/登录名
password:密码占位符
UID:用户ID
GID:基本组ID
comment:注释
HOME DIR:家目录
SHELL:用户的默认shell
/etc/shadow
account:登录名
encrypted password:加密的密码
加密方法:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码都成对出现,一个为私钥(secret key),一个为公钥(public key) 公钥加密,私钥解密。用于做密钥交换。
单向加密:散列加密:由明文取得密文。提取数据特征码,可用于做数据校验。
1.雪崩效应
2.定长输出
MD5:Message Digest,128位定长输出
SHA1:Secure Hash Algorithm,160位定长输出
添加用户:
useradd USERNAME
添加组:
groupadd GRPNAME
环境变量
PATH:命令搜索路径
HISTSIZE:命令缓冲区大小大小,默认是1000条
echo $变量名 获取命令