Linux 学习之路(二):用户及权限详解

作业:

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当前最新的内核版本号?

www.kernel.org

$ 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 $变量名 获取命令

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/83012208