## 用户和权限的基本概念
用户管理包含用户和组的管理
linux系统必须有一个用户,而且对于不同的用户有不同的系统资源权限
对文件、目录的权限:
在实际工作中,是通过对用户进行分组,对组赋予对应的权限,来管理用户的权限
什么类型的文件 文件的拥有者权限 拥有者所在组的权限 组外用户的权限 硬链接数 用户名 组名 文件的大小 创建时间和修改时间 文件名
硬链接数
通俗讲就是有多少种方式,可以访问到当前目录、文件(包括绝对路径和相对路径 )
硬链接数都大于1,为硬链接
文件的硬链接是1
目录的硬链接数至少是2(包含一个.)
chmod
chmod可以修改用户/组对文件/目录的权限
chmod +/- rwx 文件名/目录名 #会一次性修改拥有者和组的权限,不会修改其他用户的权限
在linux里,要操作目录,必须有可执行和可读权限, 不然会报权限不足 。一般都会有可读和可执行的权限
对于目录而言,可读权限就是可以阅读目录的内容。可写权限就是可以修改目录的内容,可执行权限必须要有,不然根本就无法操作目录
超级用户
root用户就是超级用户
linux在安装时自动创建的用户就叫做标准用户
sudo
- su是substitute user的缩写,表示使用另一个用户的身份
- sudo命令用来以其他身份来执行命令,预设的身份为root
- 用户使用sudo时,必须先输入密码,之后有5分中的有效期限,超过时间,则必须重新输入密码
- 若未经授权的用户企图使用sudo,则会发出警告邮件给管理员
组管理 相关命令
组的信息保存在/etc/group下 (group是一个文件)
chgrp==》change group
R==》是指把文件或目录下的所有用户都递归修改文件或目录的所属组
jxl@jxl-virtual-machine:~/桌面$ sudo chgrp -R dev python学习/
[sudo] jxl 的密码:
jxl@jxl-virtual-machine:~/桌面$ ls -l
总用量 4
drwxrwxr-x 2 jxl dev 4096 7月 2 08:36 python学习
用户管理
创建用户时,如果忘记添加-m选项指定新用户的家目录--最简单的方法就是删除用户,重新创建,不然自己手动去创建家目录赋权等比较麻烦
创建用户时,不指定组的话,默认会创建一个和用户名同名的组名
用户信息保存在/etc/passwd文件中
添加新用户(创建用户时需要添加用户和密码,不然远程无法连接)
sudu useradd -m -g dev zhangsan
1)不使用-m建立用户家目录会怎样,在家目录看不到创建好的用户,系统不会创建这个用户的家目录,只会把创建好的用户信息保存在/etc/passwd里
2)不使用-g指定用户的主组,那么会默认建立一个和用户同名的组)
添加新用户的密码
passwd zhangsan
/etc/passwd 文件
存放的是用户的信息,由6个分号组成的7个信息:
zhangsan:x:1001:1001::/home/zhangsan:/bin/sh
用户名:密码:uid:gid:用户全名(::之间,没有写就以用户名作为用户全名):主目录:登录使用的shell(就是登录之后,使用的终端命令,ubuntu添加的用户默认使用的是dash)
x是表示密码,只是不直接展现出来,有加密
uid是用户的id 用户代号
gid是组的id 组代号
dash这种shell在windows的xshell里按向上和向下和删除等会出来下图的缺陷,不方便,可以把shell换成bin/bash
无法在宿主环境与虚拟环境之间复制粘贴
解决方案
在Ubuntu的命令行中执行一下命令
sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
查看用户信息
jxl@jxl-virtual-machine:~$ id
uid=1000(jxl) gid=1000(jxl) 组=1000(jxl),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
jxl@jxl-virtual-machine:~$ id zhangsan
uid=1001(zhangsan) gid=1001(dev) 组=1001(dev)
uid是保存在/etc/passwd
gid是保存在/etc/group
jxl@jxl-virtual-machine:~$ cat -n /etc/group|grep jxl
5 adm:x:4:syslog,jxl
18 cdrom:x:24:jxl
21 sudo:x:27:jxl
23 dip:x:30:jxl
35 plugdev:x:46:jxl
55 lpadmin:x:116:jxl
65 jxl:x:1000:
66 sambashare:x:126:jxl
解释:
65行是组名+组代号
5/18/21/23/35/55/66 是passwd里定义的用户(jxl用户在admin组,和其他组的分别展示的权限)
jxl@jxl-virtual-machine:~$ id
uid=1000(jxl) gid=1000(jxl) 组=1000(jxl),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
解释:
展示默认的标准用户的用户代号和组代号,并在不同组拥有的权限。比如有1000这个jxl组的权限(主组权限),有4这个组adm的权限,……(附加组权限)
who
jxl@jxl-virtual-machine:~$ who
jxl :0 2023-07-02 09:37 (:0) #表示本机登录的(也就是ubuntu虚拟机本身登录的)
jxl pts/1 2023-07-02 09:39 (192.168.206.1) (是以太网适配器 VMware Network Adapter VMnet8的这台机器的登录的,我这里用的是mobaXterm的用户登录的)
jxl pts/2 2023-07-02 16:27 (192.168.206.1)
whoami
jxl@jxl-virtual-machine:~$ whoami
jxl
`查询当前登录的用户是谁
usermod
-
usermod可以用来设置用户的主组/附加组和登录Shell
-
主组:通常在新建用户时指定,在/etc/passwd的第四列GID对应的组(创建用户时所在的组)
-
附加组:在/etc/group中最后一列表示该组的用户列表,用户指定用户的附加权限(用户自己本身组之外的组的权限)
提示:设置了用户的附加组之后,需要重新登录才能生效
#修改用户的主组(passwd中的GID) usermod -g 组 用户名 #修改用户的附加组 usermod -G 组 用户名 #修改用户登录的shell usermod -s /bin/bash
在MoBaXterm快速连接
ssh 用户名@remote
然后输入用户名和密码
注意:默认使用useradd添加的用户是没有权限使用sudo以root身份执行命令的,可以使用以下命令,将用户添加到sudo附加组中
usermod -G sudo 用户名
修改用户登录shell
sudo usermod -s /bin/bash 用户名
查看当前发行版可以使用的shell
[root@localhost ~]$ cat /etc/shells
查看当前使用的shell方法
一、最常用的查看shell的命令,但不能实时反映当前shell
[root@localhost ~]$ echo $SHELL
/bin/bash
**二、下面这个用法并不是所有shell都支持
**
[root@localhost ~]$ echo $0
-bash
**三、环境变量中shell的匹配查找
**
[root@localhost ~]$ env | grep SHELL
SHELL=/bin/bash
四、口令文件中shell的匹配查找
[root@localhost ~]$ cat /etc/passwd | grep root
五、查看当前进程
[root@localhost ~]$ asdf
bash: asdf: command not found
附:一条命令即可实现:
[root@localhost ~]$ ps -ef | grep echo $$
| grep -v grep | grep -v ps
root 1862 1860 0 01:50 pts/0 00:00:00 -bash
which
- /etc/passwd 是用于保存用户信息的文件
- usr/bin/passwd 是用于修改用户密码的程序
which命令可以查看执行命令所在位置 ,一定是可执行文件
cd 这个终端命令是内置在系统内核中,没有独立的文件,所以用which是查不到的
bin和sbin
在linux中,绝大多数可执行文件都保存在/bin、/sbin、/usr/bin、/usr/sbin
在bin(binary)是二进制执行文件目录,主要用于具体应用
在/sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin(user commands for applications)后期安装的一些软件
/usr/sbin(super user commands for applications)超级用户的一些管理程序
su
su -用户名 -可以切换用户家目录,不加-就只会切换用户,不会切换目录
exit 退出当前用户
安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下。 Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码
sudo passwd
建立一个新的root密码
修改文件权限
#修改文件|目录的拥有者
chown 用户名 文件名|目录名
#递归修改文件|目录的组
chgrp -R
#递归修改文件权限
chmod -R 755 文件名|目录名
小结:想要文件|目录有什么权限,首先把登录的是哪个用户,然后看这个文件|目录是不是登录用户的拥有者(如果是拥有者,就看拥有者对应的权限),看这个文件||目录是不是登录这个用户的所在组(如果是用户的所在组,就看所在组的权限),如果都不是,就看其他者拥有的相对应权限 。判断权限需要以登录的是哪个用户为基准然后再进一步判断
系统信息相关命令
时间和日期
date
查看系统时间
cal
查看日历
cal -y可以查看一年的日历
磁盘和目录空间
df
df -h disk free 显示磁盘剩余空间
du
du -h 【目录名】 disk usage (磁盘使用情况)显示目录下的文件大小,不写目录名就查当前目录的情况
进程信息
所谓进程,(进行中的程序)通俗讲就是当前正在执行的一个程序
ps
ps默认只会显示当前用户通过终端启动的应用程序
x 表示不是终端启动的进程,一般不看x 系统级的进行情况
top
cpu和内存占用率比较高的显示在最上面
kill
提示:使用kill命令时,最好只终止由当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统崩溃
查找文件
find 【路径】 -name 文件名 #路径不填就从当前路径查找
软链接
在linux中,文件名和文件的数据是分开存储的
只有文件的硬链接数等于0才会被删除
在日常生活中,几乎不会给文件建立硬链接
和硬链接对应
需要使用绝对路径
软链接 ln -s ( -s是symbolic 的意思,符号性的)
硬链接 ln (link files )
打包和压缩
tar
-
tar是linux中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件(只负责打包,不负责压缩)
-
tar的命令格式如下:
#打包文件 tar -cvf 打包文件.tar 被打包的文件/路径…… #解包文件 tar -xvf 打包文件.tar
tar命令的czvf和xzvf参数分别代表的意义如下:
-c 或--create 建立新的备份文件。
-x或--extract或--get 从备份文件中还原文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-v或--verbose 显示指令执行过程。
-f<备份文件>或--file=<备份文件> 指定备份文件。
gzip
使用gzip和tar打包和压缩的文件扩展名为xxx.tar.gz
解压缩时,
如果是xxx.tar的文件 tar -xvf xxx.tar
如果是xxx.tar.gz的文件 tar -xzvf xxx.tar.gz
不常用,了解即可
软件安装
通过apt可以安装和卸载软件
#一个小火车提示
sudo apt install sl
#一个比较漂亮的查看当前进程排名的软件
sudo apt install htop