Linux的文件操作与用户管理
添加删除用户
1.添加用户-useradd
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号;
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~
该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的群组名称则是这个帐号还可以加入的群组。
这个选项与参数会修改 /etc/group 内的相关数据喔!
-M :强制!不要创建使用者主文件夹!(系统帐号默认值)
-m :强制!要创建使用者主文件夹!(一般帐号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设置的啦~
-d :指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径!
-r :创建一个系统的帐号,这个帐号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个 shell ,若没有指定则默认是 /bin/bash 的啦~
-e :后面接一个日期,格式为“YYYY-MM-DD”此项目可写入 shadow 第八字段,
亦即帐号失效日的设置项目啰;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效,
-1 为永远不失效(密码只会过期而强制于登陆时重新设置而已。)
adduser vbird1 /建立用户,需要设置密码
useradd vbird1 /建立用户,不需要设密码,但在/home目录下没有用户目录 没有shell
需要通过 useradd -m -s 用户名 添加shell
示例:
- 使用者帐号与密码参数方面的文件:/etc/passwd, /etc/shadow
- 使用者群组相关方面的文件:/etc/group, /etc/gshadow
- 使用者的主文件夹:/home/帐号名称
假设我已知道我的系统当中有个群组名称为 users ,且 UID 1500 并不存在,请用 users 为初始群组,以及 uid 为 1500 来创建一个名为 vbird2 的帐号
useradd -u 1500 -g users vbird2
2.删除用户-userdel
sudo userdel -r username /-r删除用户和对应用户所有文件
示例:
添加删除组
1.添加组-groupadd命令
[root@study ~]# groupadd [-g gid] [-r] 群组名称
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
示例:
题目:添加一个用户user01到组group01中。(已生成group01)
sudo useradd -m -s /bin/bash -g group01 user01
2.删除组-groupdel
sudo groupdel groupname
- 删除组时,需要组内没有用户才能删除
用户身份切换
- 以“ su - ”直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说,如果你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
- 以“ sudo 指令 ”执行 root 的指令串,由于 sudo 需要事先设置妥当,且 sudo 需要输入使用者自己的密码, 因此多人共管同一部主机时, sudo 要比 su 来的好喔!至少root 密码不会流出去!
su /单纯使用“ su ”切换成为 root 的身份
su username /切换到对应用户上
- 输入exit,退出root用户
示例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/f4f6e7f768b64f1badac8eccfb3df722.png
sudo命令
sudo 的执行则仅需要自己的密码即可! 甚至可以设置不需要密码即可执行 sudo 呢!由于 sudo 可以让你以其他用户的身份执行指令 (通常是使用 root 的身份来执行指令),并非所有人都能够执行 sudo。
[root@study ~]# sudo [-b] [-u 新使用者帐号]
选项与参数:
-b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
-u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。
范例一:你想要以 sshd 的身份在 /tmp 下面创建一个名为 mysshd 的文件
sudo -u sshd touch /tmp/mysshd
修改文件的所有者和所属组-chown/chgrp
1.chown命令
选项:
[root@study ~]# chown [-R] 用户名 文件或目录
[root@study ~]# chown [-R] 用户名.组用户名 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
实例:
ojh@ojh-virtual-machine:~$ touch txt
ojh@ojh-virtual-machine:~$ touch dir/hello
ojh@ojh-virtual-machine:~$ sudo chown user2 txt /文件所属用户者改为用户user2
ojh@ojh-virtual-machine:~$ sudo chown user2.user2 txt /文件所属用户者改为用户user2,文件所属组用户改为组用户user2
ojh@ojh-virtual-machine:~$ ls -l txt
-rw-rw-r-- 1 user2 user2 0 1月 13 00:19 txt
2.chgrp命令
选项:
root@study ~]# chgrp [-R] 组用户名 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
实例:
ojh@ojh-virtual-machine:~$ mkdir dir
ojh@ojh-virtual-machine:~$ touch dir/hello
sudo chgrp user2 dir /文件夹所属用户者改为用户user2
ojh@ojh-virtual-machine:~$ ll -d dir
drwxrwxr-x 2 ojh user2 4096 1月 13 00:20 dir/
查找命令
1.命令查找-whereis/which命令
whereis 只找系统中某些特定目录下面的文件。
实例:
ojh@ojh-virtual-machine:~$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
ojh@ojh-virtual-machine:~$ which ls
/bin/ls
ojh@ojh-virtual-machine:~$ whereis vim
vim: /usr/bin/vim.basic /usr/bin/vim /usr/bin/vim.tiny /etc/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
ojh@ojh-virtual-machine:~$ which vim
/usr/bin/vim
2.文件查找-locate/find命令
locate 是从数据库来搜寻文件名
locate选项:
[root@study ~]# locate [-ir] keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正则表达式的显示方式
实例:
ojh@ojh-virtual-machine:~$ locate ifconfig
/sbin/ifconfig
/snap/core/14399/sbin/ifconfig
/snap/core18/2654/usr/lib/python3/dist-packages/cloudinit/distros/parsers/ifconfig.py
/snap/core18/2654/usr/lib/python3/dist-packages/cloudinit/distros/parsers/__pycache__/ifconfig.cpython-36.pyc
...
...
find选项:
[root@study ~]# find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
ojh@ojh-virtual-machine:~$ touch hello.c hello.o
ojh@ojh-virtual-machine:~$ find -name hello.c
./hello.c
ojh@ojh-virtual-machine:~$ find -name "*hello*"
./hello.c
./dir/hello
./hello.o
./test1/hello2.h
./test1/hello
删除所有.o文件命令
ojh@ojh-virtual-machine:~$ find -iname “.o” -sxec rm -rf {} \;
grep命令
可在文件内查找特定内容
格式为:grep [选项] 格式[文件及路径]
常用选项
-n 输出显示行号
-v 去除包含此参数的行,输出剩余行
-i 忽略字符大小写的差别
-c:只输出匹配行的计数。
-q:不输出到终端
-A,-B,-C:三者后面都是接阿拉伯数字
-A是显示匹配后和它后面的n行
-B是显示匹配行和它前面的n行
-C是匹配行和它前后各n行
示例:
ojh@ojh-virtual-machine:~$ grep ojh /etc/passwd
ojh:x:1000:1000:ojh,,,:/home/ojh:/bin/bash
ojh1:x:1001:203::/home/ojh1:/bin/sh
shell配置
linux系统下配置文件有四个:
- letc/profile:此文件为系统的每个用户设置环境信息当用户第一次登录时,该文件被执行.并从etc/profile.d目录的配置文件中搜集shell的设置:
- letc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取;
- ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取:此文件类似于/etc/bashrc,不需要重启生效,重新打开一个bash即可生效
- ~/.bash_profile 是交互式、login 方式进入bash 运行的:
读入环境配置文件的指令-source命令
[dmtsai@study ~]$ source 配置文件文件名
范例:将主文件夹的 ~/.bashrc 的设置读入目前的 bash 环境中
ojh@ojh-virtual-machine:~$ source ~/.bashrc
ojh@ojh-virtual-machine:~$ . .bashrc