一、命令补全

相信大家在操作linux系统时都会发现linux有一个非常棒的体验,这就是linux的命令补全功能,拥有了这个功能我们就不必花费更多的心思去死记硬背下各个命令行的操作命令了,单相信大家也仅仅只是知道有这么一个好用的功能,却并不是很清楚具体的这个命令到底是如何实现的,那么接下来我就简单的说一下命令补全的实现原理

命令补全是一个统称,仔细划分为:命令补全和路径补全两种。

命令补全:搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件,如果多于一个,两次tab,可以给出列表;否则直接补全。也就是说在我们使用的linux环境变量中不存在我们想要补全的这个命令,那么补全这个命令就无从谈起了。

路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全;在打头路径下查找补全。路径补全同样支持两次tab,给出列表。

二、命令替换

在实际的生产环境中我们都会遇到将某个命令中的子命令替换为其执行结果的经历,这其中最典型的就应该属日志保存文件了。

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

$(要执行的结果) ``(反引号)

例:mv test- test-$(date +%F-%H-%M-%S) mv test- test-`date +%F-%H-%M-%S`

test- 重命名为test------秒  这里的年月日时分秒便是一个命令的执行结果,是一个即时信息。

三、命令别名

操作系统之间有一下命令是有细微差别的,或者一些常用命令过于繁琐,我们想将之简化为我们各自能够熟练使用或者记忆的简短命令,这里就用的到命令别名了。

命令别名:(只在当前shell的生命周期有效,别名的有效范围仅为当前shell)

alias CMDALIAS='COMMAND [options] [arguments]' 使用格式

alias cls=clear 设置别名cls=clear

ualias cls 撤销别名cls

也可以将别名保存到配置文件中,以保证下次还能正常使用

~/.bashrc 这个文件便是别名保存文件

四、文件通配

在使用命令操作时,一下命令对象就连我们自己也不是很清楚,这里就需要一个通配对象来描述我们需要键入的命令对象了,这个用来描述的键入对象的字符我们就称之为通配符。

文件名通配, globbing

通配符  任意长度的任意字符

?匹配任意单个字符

[] 匹配指定范围内的任意单个字符

[abc] [a-m] [A-Z] [a-zA-Z] [0-9a-zA-Z] 

[[:space:]]空白字符

[[:punct:]]小写字母

[[:upper:]]大写字母

[[:alpha:]]大小写字母

[[:digit:]]数字

[[:alnum:]]数字和大小写字母

[[:alpha:]]*[[:space:]]*[[:alpha:]] 以字母开头字母结尾中间有空白的

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

五、用户、组

linux系统的管理当中有一个非常关键的地方,这就是用户和组的管理

用户:UID, /etc/passwd

/etc/passwd字段的意思:

account:登录名

passwd:密码(占位符)-->/etc/shadow

UID: 用户ID

GID: 基本组ID

GECOS:用户的注释信息

HOME DIR:家目录

SHELL:用户的默认shell

组:GID, /etc/group

用户和组都会具有个自的密码,而密码便存在于影子口令当中

影子口令:

用户:/etc/shadow

各个字段的含义

account:登录名

加密算法

杂质

encrypted password:加密的密码

最近一个修改密码的时间:(1970年到最近修改密码的天数)

最短使用期限

最长使用期限

警告时间

非活动时间

用户账户过期时间

保留区域

用户类别:

管理员ID号:0

普通用户ID号:1-65535

系统用户:1-499 不允许其登陆系统

一般用户:500-60000

用户组类别:

管理员组:

普通组:

系统组:

一般组:

用户组类别:

私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组

基本组,默认组

附加组,额外组;默认组以外的其他组

/etc/group:

组名:密码:GID:以此组为其附加组的用户列表

加密方法:

对此加密:加密和解密使用同一个密码

公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)

单项加密,散列加密:提取数据特征码,常用于数据完整性校验

1、雪崩效应(蝴蝶效应原始数据的微小改变将引起结果的巨大变化

2、定长输出

MD5Message Digest, 128位定长输出

SHA1Secure Hash Algorithm 160位定长输出

useradd [options] USERNAME

-u UID

-g GID (基本组)

-G GID,...  (附加组)

-c "COMMENT" (注释信息)

-d /X/Y/Z 指定其家目录路径

-s 指定shell路径

-m -k 强制给用户创建家目录并将环境变量转移

-M 不给用户创建家目录

-r 创建一个系统用户

/etc/login.defs 默认创建用户的配置文件

环境变量:

PATH

HISTSIZE

SHELL 保存当前用户的默认shell

/etc/shell: 指定了当前系统可用的安全shell

userdel [option] USERNAME

-r:同时删除用户的家目录

id:查看用户的账号属性信息

-u 显示用户UID

-g 显示GID

-G 显示所有ID

-n 显示组名称  组合其他选项使用

finger:查看用户的账号信息

finger USERNAME

修改用户账号属性:

usermod

-u 修改用户UID

-g 修改用户GID(基本组)

-a -G GID:不使用-a选项,会覆盖此前的附加组

-c 修改注释信息

-d -m 修改家目录并移动此前的文件到新的家目录中去

-s 修改用户的默认shell

-l 修改用户名

-e 指定用户过期时间

-f 指定非活动时间

-L 锁定用户账号

-U 解锁用户账号

chsh:修改用户默认shell

chfn:修改用户的注释信息

密码管理:

passwd [USERNAME]

--stdin 从标准输入

-l 锁定用户账号

-u 解锁用户账号

-n 密码最短使用期限

-d 删除用户密码

pwck:检查用户的账户完整性

组管理:

创建组:

groupadd

-g 指定GID

-r 添加为系统组

groupmod

-g 修改GID

-n 修改组名

groupdel 删除组

gpasswd:为组设定密码

newgrp 组  临时登录一个新用户组

exit  退出新组

chage:改变用户密码过期信息

-d 指定密码的最后一次修改时间

-E 更改过期时间

-I 更改非活动时间

-m 更改最短使用期限

-M 更改最长使用期限

-w 更改警告时间

六、权限

每个用户在系统中都会拥有不同的权限,那我们是如何定义权限呢?我们将权限划分为三种:r,读 w, x执行。而针对于r,w,x这三种权限对于文件和目录的解释还是有一些区分的。

文件:

r: 可读,可以使用类似cat等命令查看文件内容;

w: 可写,可以编辑或删除此文件;

x:可执行,exacutabls, 可以命令提示符下当作命令提交给内核运行;

目录:

r: 可以对此目录执行ls以列出内部的所有文件;

w: 可以在此目录创建文件;

x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;

rwxr--: 只读 r-x: 读和执行 ---:无权限

0 000 ---:无权限

1 001 --x: 执行

2 010 -w-: 

3 011 -wx: 写和执行

4 100 r--: 只读

5 101 r-x: 读和执行

6 110 rw-: 读写

7 111 rwx: 读写执行

除此之外,我们使用ls -l命令时就会发现每个用户拥有三位一组的权限划分三组。

三类用户:u:属主    g:属组     o:其它用户     a:所有类别

chown:改变文件目录属主(只有root可以使用此命令)

# chown  属主  文件

-R 递归修改,修改目录及其内部文件的属主

--reference=某文件  file,... 设定file文件的属性和某文件属性一样

# chown 属主:属组  文件

# chown 属主.属组  文件

# chown :属组  文件

chgrp: 改变文件目录属组

# chgrp:组名  文件

-R 递归修改

--reference=某文件  file,...

chmod:修改文件的权限

修改三类用户的权限:

chmod MODE file,...

-R  递归修改

--reference=xx  修改权限等于某些文件

修改某类用户或某些类权限:

修改某类用户的某位或某些位权限:

openssl passwd -1 -salt '1234567' (创建一个以md5加密的杂质为123456的密文)

umask:遮罩码

创建文件及文件夹的默认权限     (文件默认是不能够获得执行权限)

如果文件创建时获得的结果中有执行权限,则将其权限加1

文件666 - (root 002) (普通用户 022)

文件夹 777 - (root 002) (普通用户 022)

进程也拥有自己的属主和属