Linux基础(1)
内容概要
- 文件类型
- 软链接&硬链接
- 用户与用户组
内容概要
一、文件类型
1、Linux文件类型简介
查看文件详细信息
# 命令:
ls -li # -i 显示文件的 inode 数字
[root@localhost ~]# ls -li
total 12
134319695 -rw-------. 1 root root 1691 Dec 8 17:25 anaconda-ks.cfg
135085785 -rw-r--r--. 1 root root 678 Dec 11 19:02 elijah.txt
134319703 -rw-r--r-- 1 root root 0 Dec 14 10:11 hard_index
135085801 -rw-r--r-- 1 root root 1504 Dec 12 22:04 niu.txt
# 详解
134319695 # 文件的inode,表示该文件的内存地址
-rw-------. # ‘-’ 表示文件类型为普通文件,rw------- 是权限
1 # 表示文件的硬链接数
root # 文件所属用户
root # 文件所属组
1691 # 文件大小,单位为字节
Dec 8 17:25 # 表示修改日期
anaconda-ks.cfg # 文件名
2、Linux 文件类型
# 如何判断文件类型
-rw-r--r-- 查看这里的第一个字符
1、普通文本 f(-)
2、文件夹 d # directory
3、链接文件 l # link
4、设备文件 b # 磁盘文件
c # 字符文件
5、管道文件 P
6、套接字文件 s # socket
yum install mariadb* -y
注意:不能以颜色判断文件类型。
二、软链接 & 硬链接
简介
在 Linux 中,每个文件都有对应的独一无二的 inode 号,用于作为文件的标识,文件名只是便于记忆,inode 号指向
的是文件内存的地址
# 硬链接(hard link)
可以将它理解为一个 “指向原始文件 inode 的指针”,系统不为他添加独立的 inode,所以,硬链接文件与原始文件其实
是同一个文件,只是名字不同。每添加一个硬链接,文件的硬链接数就会加1
# 软链接
等同于 Windows 系统下的快捷方式。仅仅包括所含链接文件的路径名字。因此能链接目录,也能跨文件系统链接。但是,
当删除原始文件后,链接文件也将失效。
删除文件
每添加一个硬链接,文件的硬链接数就会加 1 ,当删除原文件或者硬链接文件的时候,硬链接数就会减 1 ,当硬链接数
达到 0 的时候,文件就算是被删除了
删除文件的底层逻辑
1、删除的是硬链接
2、判断该文件硬链接数是否为0
3、如果为0,则在磁盘中将其删除
4、如果不为0,则只删除一个硬链接
操作命令
[root@localhost ~]# ll -i
total 12
134319703 -rw-r--r-- 1 root root 0 Dec 14 15:36 index.txt
# 创建硬链接
ln [参数] [原文件路径] [硬链接文件路径]
[root@localhost ~]# ln index.txt hard_link
[root@localhost ~]# ll -i
total 12
134319703 -rw-r--r-- 2 root root 0 Dec 14 15:36 hard_link # 硬链接数从 1 变成了 2,文件的inode号与原文件一致
134319703 -rw-r--r-- 2 root root 0 Dec 14 15:36 index.txt
# 创建软链接
ln -s [原文件路径] [硬链接文件路径]
[root@localhost ~]# ln -s index.txt soft_link
[root@localhost ~]# ll -i
total 12
134319703 -rw-r--r-- 2 root root 0 Dec 14 15:36 hard_link
134319703 -rw-r--r-- 2 root root 0 Dec 14 15:36 index.txt
134319708 lrwxrwxrwx 1 root root 9 Dec 14 15:40 soft_link -> index.txt
可以看到软链接是个单独的文件,链接数为 1,文件类型是链接文件,而且保存的只是原文件的路径信息
# 删除原文件
[root@localhost ~]# rm index.txt
[root@localhost ~]# ll -i
total 12
134319703 -rw-r--r-- 1 root root 0 Dec 14 15:36 hard_link
134319708 lrwxrwxrwx 1 root root 9 Dec 14 15:40 soft_link -> index.txt
文件的硬链接数变为 1,软链接提示也变红了,表示无法识别原文件
图示
1、原文件
2、添加硬链接
3、删除原文件
4、创建软链接
3、用户与用户组
简介
用户:相当于账号
root test
用户组:某些具有相同属性的账号的集合
root
用户分类
系统用户:uid在 0 - 999 之间的用户,我们就看作系统用户
系统用户一般用在启动应用程序上,一般不需要登录系统。
普通用户:uid在 1000及以上的用户,我们就看作普通用户
一般用在登录上。
创建用户和创建组
创建用户的命令:useradd
参数:
-g : 指定用户组(用户必须存在)
-r : 创建系统用户
-M :不创建家目录
-u :指定创建用户的ID的
# 创建普通用户
useradd [用户名]
[root@localhost home]# useradd user01
每创建一个普通用户,就会在 /home 目录下创建一个用户文件夹
[root@localhost ~]# cd /home
[root@localhost home]# ll -i
total 0
1215668 drwx------ 2 elijah elijah 99 Dec 13 17:38 elijah
1223338 drwx------ 2 user01 user01 62 Dec 14 16:16 user01
# 创建系统用户
[root@localhost home]# useradd -r root01
# 创建用户组
[root@localhost home]# groupadd mygroup
组信息存放的目录: /etc.group
# 删除用户
[root@localhost home]# userdel user01
[root@localhost home]# userdel -r user01 连同用户主目录一起删除
[root@localhost home]# userdel -r elijah
[root@localhost home]# ls
user01
[root@localhost home]#
切换用户
su - [用户名]
su [用户名]
[root@localhost home]# su elijah
[elijah@localhost home]$
注意看用户名已经从 root 变为了 elijah, 符号 # 变为了 $
查看用户 ID
# 查看用户的ID和组的ID
id [用户名]
[root@localhost home]# id elijah
uid=1000(elijah) gid=1000(elijah) groups=1000(elijah)
用户账户信息文件(passwd)
目录 : /etc/passwd
[root@localhost home]# cat /etc/passwd
elijah:x:1000:1000: 用户简介 :/home/elijah:/bin/bash
用户名 : elijah
密码占位符 :x
1000 : userid
1000 : 组id
/home/elijah : 家目录
/bin/bash :默认的解析器
用户组信息文件(group)
# 查看用户组
目录 : /etc/group
[root@localhost etc]# cat group
root01:x:996:
mygroup:x:1002:
elijah:x:1000:
用户组名 --> elijah
用户组id --> 1000
用户密码信息文件(shadow)
# 目录
/etc/shadow
[root@localhost etc]# cat shadow
root01:!!:18975::::::
elijah:!!:18975:0:99999:7:::
user02:!!:18975:0:99999:7:::
用户名 --> elijah
加密密码 --> !! # 无密码暂时用 !! 代替
最后一次修改时间 --> 18975 # 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间
4、不使用 useradd 创建用户
须知
一个标准的用户在如下文件中拥有自己的信息:
/etc/passwd 用户的账户信息 格式是 名字:密码:ID:GroupID:描述符:家目录:shell
/etc/shadow 用户的密码信息 格式是 $加密方式$干扰值$密码:密码可以隔多久该更改一次:
/etc/group 组信息
/home/用户名 一个标准的用户还会拥有自己的家目录,家目录中还会有一定的资源
/etc/skel/ 中的隐藏文件是家目录中的模版
1、创建用户家目录
[root@localhost home]# ls
elijah user01
# 创建用户 user02
[root@localhost home]# mkdir user02
[root@localhost home]# ls
elijah user01 user02
2、添加用户组信息
[root@localhost etc]# vim group
mygroup:x:1002:
elijah:x:1000:
user02:x:1001:
3、添加用户账户信息
[root@localhost etc]# cat passwd
elijah:x:1000:1000::/home/elijah:/bin/bash
# 添加用户账户信息
[root@localhost etc]# vim passwd
[root@localhost etc]# cat passwd
elijah:x:1000:1000::/home/elijah:/bin/bash
user02:x:1001:1001::/home/user02:/bin/bash
4、添加用户密码信息
[root@localhost etc]# cat shadow
elijah:!!:18975:0:99999:7:::
# 添加用户密码信息
[root@localhost etc]# vim shadow
[root@localhost etc]# cat shadow
root01:!!:18975::::::
elijah:!!:18975:0:99999:7:::
user02:!!:18975:0:99999:7:::
5、修改家目录及子目录的所有者和属组以及修改用户权限
# 修改家目录及子目录的所有者和属组
chown -R user_name:user_name /home/user_name # 模板 修改所属用户与组(包括下面的目录)
[root@localhost etc]# chown -R user02:user02 /home/user02
# 修改权限
chmod 700 <目标文件> : 修改用户的权限为: 只有拥有者可以读写打开
或者
chmod -R go= /home/user_name
[root@localhost etc]# chmod 700 /home/user02
6、拷贝家目录隐藏文件
/etc/skel/ 中的隐藏文件是家目录中的模版
[root@localhost skel]# ll -a
total 24
drwxr-xr-x. 2 root root 62 Dec 8 17:17 .
drwxr-xr-x. 82 root root 8192 Dec 14 16:44 ..
-rw-r--r--. 1 root root 18 Apr 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 Apr 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 Apr 1 2020 .bashrc
cp -r /etc/skel/. <家目录路径> 把模版拷贝到你的家目录中
或
cp -r /etc/skel/* <家目录路径>
# 下面这个是把整个 skel 文件夹都拷贝过来了
[root@localhost etc]# cp -r /etc/skel /home/user02
# 正确用这个:
[root@localhost user02]# cp -r /etc/skel/. /home/user02
[root@localhost user02]# ll -ai
total 12
135096541 drwx------ 3 user02 user02 74 Dec 14 19:10 .
134418322 drwxr-xr-x. 5 root root 48 Dec 14 17:39 ..
135096537 -rw-r--r-- 1 root root 18 Dec 14 19:10 .bash_logout
135096542 -rw-r--r-- 1 root root 193 Dec 14 19:10 .bash_profile
135096543 -rw-r--r-- 1 root root 231 Dec 14 19:10 .bashrc
测试
# 用户 user02 创建成功!
[root@localhost /]# su user02
[user02@localhost /]$
[user02@localhost /]$
[user02@localhost /]$
用户信息四个重要文件:
普通用户主目录: /home/用户名
用户账号信息: /etc/passwd
用户组文件: /etc/group
用户密码文件: /etc/shadow