4.16 chown命令
chown命令可以更改目录或文件的所属主或所属组,格式为:
chown -R 账户名.组名 文件名
chown -R 账户名:组名 文件名
-R选项只适用于目录,作用是级联更改,不仅更改当前目录,连目录里的目录或者文件也全部更改。
练习:
# mkdir test // 创建test目录
# useradd user1 // 创建用户user1
# touch test/test1 // 在test目录下生成test1文件
# id user1 // 查看用户user1的所属组
uid=1000(user1) gid=1000(user1) 组=1000(user1)
# groupadd users1 // 创建组users1
# ls -l test // 列出test目录下的文件的详细信息
总用量 0
-rw-r--r-- 1 root root 0 1月 23 21:44 test1
# chown user1 test // 修改目录test的所属主为user1
# ls -l test
总用量 0
-rw-r--r-- 1 root root 0 1月 23 21:44 test1 // 此时目录test下的文件所属主和所属主并没有发生改变
# ls -ld test // 列出目录test本身的详细信息
drwxr-xr-x 2 user1 root 19 1月 23 21:44 test // 此时目录test本身的所属主已经更改为用户user1
# chown -R user1.users test // 将目录test下所有目录及文件的所属主更改为用户user1,所属组更改为users
# ls -l test
总用量 0
-rw-r--r-- 1 user1 users 0 1月 23 21:44 test1 // 此时目录test下的文件test1的所属主和所属组都被更改了
history
可以查看历史命令,配合!
使用,例如:
# history
1 free
2 dh -h
3 df -h
4 init 0
5 date
6 cal
7 free
8 dhclient
9 ip addr
10 ping www.baidu.com
11 ping www.qq.com
12 ip addr
13 ip route
14 vi /etc/sysconfig/network-scripts/ifcfg-ens33
15 ip addr
16 ip route
17 vi /etc/sysconfig/network-scripts/ifcfg-ens33
18 system restart network
19 systemctl restart network
20 ipaddr
21 ip addr
22 ping www.baidu.com
23 cat /etc/init.d/network |more
24 cat /etc/init.d/network |less
25 init 0
26 mkdir ~/.ssh/
27 cd ~/.ssh/
28 vi authorized_keys
29 q
30 quit
31 vi authorized_keys
32 chmod 600authorized_keys
33 vi authorized_keys
34 chmod 600 authorized_keys
35 ls authorized_keys
36 cat /etc/passwd |grep root
37 vi /etc/ssh/sshd_config
38 cd ~/.ssh/
39 ls -l
40 ls
41 cat authorized_keys
42 vi /etc/sysconfig/network-scripts/ifcfg-ens33
43 cat /etc/passwd |grep root
44 init 6
45 init 0
46 ip addr
47 ping www.qq.com
48 ssh [email protected]
49 hostname set-hostname riceyoung1
50 q
51 exit
52 hostname set-hostname riceyoung1
53 exit
54 init 6
55 hostname set-hostname riceyoung1
56 hostname
57 cat /etc/hostname
58 init 6
59 hostname
60 hostnamectl set-hostname riceyoung1
61 init 6
62 ssh-copy-id [email protected]
63 ssh-keygen
64 ssh-copy-id [email protected]
65 cat .ssh/id_rsa.pub
66 ssh [email protected]
67 cat .ssh/authorized_keys
68 vi /etc/ssh/sshd_config
69 systemctl restart sshd
70 ssh [email protected]
71 init 0
72 passwd
73 ls -l /usr/lib/systemd/system/runlevel*.target
74 reboot
75 init 0
76 ls -l
77 init 0
78 getenforce
79 mkdir test
80 useradd user1
81 touch test/test1
82 tail /etc/passwd
83 id user1
84 groupadd users
85 groupadd users1
86 tail -2 /etc/group
87 tail -2 /etc/shadow
88 head -1 /etc/shadow
89 head -1 /etc/passwd
90 echo $BASH
91 history
92 ls
93 ls -l /test
94 ls -l test
95 chown user1 test
96 ls -l test
97 ls -ld test
98 ls -l test
99 chown -R user1.users test
100 ls -l test
101 history
# !ls // 执行历史命令中最后一次以ls开头的命令
ls -l test
总用量 0
-rw-r--r-- 1 user1 users 0 1月 23 21:44 test1
head
命令:用于显示文件的前10行,后面直接跟文件名。如果加-数字
选项则数字为几就显示前几行。
练习:
# head /etc/passwd // 显示passwd文件的前10行
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
# head -2 /etc/passwd // 显示passwd文件的前2行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
tail
命令:用于显示文件的最后10行,后面直接跟文件名。如果加-数字
选项则数字为几就显示后几行。
练习:
# tail /etc/passwd // 显示passwd文件的后10行
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
# tail -2 /etc/passwd // 显示passwd文件的后2行
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
4.17/4.18 软链接和硬链接
链接文件分为硬链接和软链接两种,两种链接的本质区别在于inode。
硬链接:
当系统要读取一个文件时,就会先读inode table,然后再根据inode中的信息到块区域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块区域,即进行硬链接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode。即使某一个inode被删除了,只要有任何一个inode存在,该文件也不会消失。
硬链接有两个限制:
1.不能跨文件系统,因为不同的文件系统有不同的inode table;
2.不能链接目录;
软连接:
软链接是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。删除来源文件时,目的文件不会被删除,但如果再次读取目的文件时,会提示无法打开来源文件。但删除目的文件时,对来源文件是不会有任何影响的。
任何目录下都有.
和..
两个隐藏目录,其中.
是目录本身,..
是该目录的上一层目录,当使用ls -l
时列出来的详细信息第二列的数字就是该目录下使用相同inode的子目录数,包含隐藏的目录.
和..
,所以目录的子目录数至少为2,文件的inode至少为1。
练习:
// 硬链接:
# cd test1
[root@riceyoung1 test1]# ln test1 hltest1 // 为源文件test1创建硬链接文件hltest1
[root@riceyoung1 test1]# ls -li // hltest1和test1的inode均为8393647,所以使用相同的inode的文件数为2
总用量 8
8393647 -rw-r--r-- 2 root root 114 1月 24 01:07 hltest1
8393647 -rw-r--r-- 2 root root 114 1月 24 01:07 test1
[root@riceyoung1 test1]# rm -f hltest1 // 直接删除硬链接文件hltest1,不加-f会出现删除提示;删除目录加-r选项
[root@riceyoung1 test1]# cat test1 // 即使删除硬链接文件,也不会对源文件产生影响
#Are you motherfuckers ready for the new shit?
#This is the new shit!
#Do you get it?
#No!
#Do you want it?
#Yes!
// 软连接:
# cd test1
[root@riceyoung1 test1]# touch test2
[root@riceyoung1 test1]# mv test2 test3 // mv命令可以移动文件位置,也可以更改文件名
[root@riceyoung1 test1]# ls -l
总用量 4
-rw-r--r-- 1 root root 114 1月 24 01:07 test1
-rw-r--r-- 1 root root 0 1月 24 01:17 test3
[root@riceyoung1 test1]# rm -f test3
[root@riceyoung1 test1]# ln -s /root/test2/test2 test2 // 使用绝对路径,为源文件/root/test2/test2创建软链接文件/root/test1/test2
[root@riceyoung1 test1]# ls -l
总用量 4
-rw-r--r-- 1 root root 114 1月 24 01:07 test1
lrwxrwxrwx 1 root root 17 1月 24 01:23 test2 -> /root/test2/test2 // test2的文件类型为l,指向/root/test2/test2
[root@riceyoung1 test1]# cd ../test2
[root@riceyoung1 test2]# cat test2
#fjkldsjfklasjlkfj kdslajfk ldjska
#jalkfjslkdfjklsjfklsjkfls
#jfklsjfklsjklfjsklfjksldf
#sjdkflsdjklghkxnkvnksndklsd
#jafkdjakfjkdajfklwjeifisifo
[root@riceyoung1 test2]# cd ../test1
[root@riceyoung1 test1]# cat test2 // 查看/root/test1/test2就是查看/root/test2/test2
#fjkldsjfklasjlkfj kdslajfk ldjska
#jalkfjslkdfjklsjfklsjkfls
#jfklsjfklsjklfjsklfjksldf
#sjdkflsdjklghkxnkvnksndklsd
#jafkdjakfjkdajfklwjeifisifo
[root@riceyoung1 test1]# vi test2 // 删除后3行
[root@riceyoung1 test1]# cat test2 // 修改/root/test1/test2就是修改/root/test2/test2
#fjkldsjfklasjlkfj kdslajfk ldjska
#jalkfjslkdfjklsjfklsjkflso
[root@riceyoung1 test1]# rm -f test2
[root@riceyoung1 test1]# cd ../test2
[root@riceyoung1 test2]# cat test2 // 即使删除软链接文件,也可以访问源文件并且没有任何影响
#fjkldsjfklasjlkfj kdslajfk ldjska
#jalkfjslkdfjklsjfklsjkflso
可以使用软链接实现磁盘扩容的功能,但最好使用绝对路径。
4.19/4.20 yum/rpm工具
yum是RHEL/CentOS所特有的安装rpm程序包的工具。
rpm是以一种数据库记录的方式来将我们所需要的套件安装到Linux主机的一套管理程序。
安装rpm包必须保证本地有对应的rpm包文件。
yum工具最大的优势在于可以联网去下载所需要的rpm包,然后自动安装。如果要安装rpm包有依赖关系,yum工具会帮我们依次安装所有相关的rpm包。
使用yum list
可以列出所有的rpm包资源。
[root@riceyoung1 ~]# yum list |head -10
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
已安装的软件包
GeoIP.x86_64 1.5.0-13.el7 @anaconda
NetworkManager.x86_64 1:1.12.0-6.el7 @anaconda
NetworkManager-libnm.x86_64 1:1.12.0-6.el7 @anaconda
NetworkManager-team.x86_64 1:1.12.0-6.el7 @anaconda
由于管道被破坏而退出
centos.ustc.edu.cn
表示下载rpm包资源的地址。
在已安装的软件包中,最左侧是rpm包名,中间是版本信息,最右侧是安装信息。
如果已安装,最右侧显示以@
开头的标识,如果未安装则没有@
,如果rpm包已安装但需要升级则显示updates
。
搜索一个rpm包:
yum search 关键词
或者使用yum list |grep '关键词'
来过滤。
安装一个rpm包:
yum install -y rpm包名
卸载一个rpm包:
yum remove -y rpm包名
升级一个rpm包:
yum update -y rpm包名
查看可用套件组:
yum grouplist
安装套件组:
yum groupinstall -y 组名
这里的-y
选项是用来省略与用户交互的。
用yum找一个命令是由哪个包安装来的:
yum provides /*/命令
使用rpm工具安装rpm包:
rpm -ivh rpm包名.rpm // i表示安装,v表示可视化,h表示显示安装进度
查询系统已经安装过的所有的包:
rpm -qa
卸载rpm包:
rpm -e rpm包名
查看一个包是否安装:
rpm -q rpm包名
或rpm -qa |grep rpm包名 // grep是用来过滤的
列出某个rpm包都安装了哪些文件:
rpm -ql rpm包名
查看某个文件是由哪个rpm包安装得来的:
rpm -qf /usr/bin/命令
which
只能用来查找PATH环境变量中出现的路径下的可执行文件:
which 命令