4、Ubuntu20常用操作_文本编辑文件系统目录和文件操作用户管理和文件权限

news2024/11/25 6:52:16

Ubuntu系统操作

注销(退出Linux系统)

在每次使用完后,一定要进行注销(或者说退出),以防他人通过你的帐号进入系统。

在Linux提示符下,运行exit命令,即可退出本次登录

或直接按组合键 Ctrl+d

关机与重启

Linux主机的关机方法为:

用户登录后,输入命令 poweroff 表示立即关机。

Linux主机的重启方法为:

用户登录后,输入命令 reboot 表示立即重启电脑。

使用root 用户登录

root用户是系统超级管理员,那么能用root账号登录吗?

关键是,我们不知道root用户的密码,怎么登录呢? 安装时没有设置root用户密码的地方呀。

Ubuntu 不想让大家直接使用root账号登录, 因为权限太大,误操作可能有很大危害。

但是如果你对自己操作很自信,并且很多命令必须以root用户权限执行, 不用root用户登录会比较麻烦。

这时,你可以通过如下方法设置root用户的密码,并且切换到root账号

  • 使用安装时创建的账号登录

  • 执行命令 sudo passwd root

    系统提示: [sudo] password for xxx: , 是要你输入 xxx这个账号的密码, 输入后回车

    接着提示: New password: , 是要你输入root用户的密码,输入你要设置的密码后回车

    接着提示: Retype new password: , 是要你再次输入root用户密码确认,再次输入后回车

    如果出现 passwd: password updated successfully 表示设置root密码成功, 后面就可以使用 root 账号登录了。

  • 执行命令 su - root

    表示要从当前账号切换到root账号登录, 然后输入刚设置的root账号密码,即可登录。

但是注意: Ubuntu 缺省不允许root账号直接远程登录的,只能本地登录,或者先用其它账号登录后切换。这个设置可以修改

文本编辑

命令模式

执行vi abc.txt 文件名 命令,就打开了vi去编辑文件abc.txt,默认进入的就是命令模式

在该模式下,不可以输入文字,那干什么呢?

那命令模式下面我们通常可以干什么呢?

首先就是移动光标

键盘h键 - 光标左移一个字符
键盘j键 - 光标下移一个字符
键盘k键 - 光标上移一个字符
键盘l键 - 光标右移一个字符

当然 也可以通过键盘 方向键 来移动光标位置。

另外还支持下面的按键操作

按0或^ - 光标移动到所在行的行首
按$    - 光标移动到所在行的行尾
输入gg - 把光标移到文件开始位置
输入G  - 把光标移到文件末尾
输入Ctrl + f  -  往下翻一页
输入Ctrl + b  -  往上翻一页

删除文字也是我们常做的操作

按x  - 删除光标所在字符
按dd - 删除光标所在行
按dw - 删除光标所在处到词尾的内容
按d$ - 删除光标所在处到行尾的内容

另外,还有下面这些操作

按yy – 复制光标所在的行
按p – 黏贴
按v,然后移动光标,可以选择内容,再按y复制选中的内容
按u – 撤销刚才所做的操作
按Ctrl+r – 重做被撤销当前所做的操作
按. – 重复刚才所做的操作

可能大家也发现了,上面说的命令模式下面的操作,都不可以直接输入文字到文件中。

要输入文字,就必须 切换到插入模式。

怎么切换到插入模式呢?

从命令模式进入插入模式的方式有:

按a-将在光标所在位置之后插入文本(append)
按i-将在光标所在位置之前插入文本(insert)
按o-将在光标所在行之后插入一新行

进入到插入模式,就可以输入文字了。

另外,在命令模式下,我们还可以按冒号按键,切换到底线模式。 底线模式干什么? 后面再讲。

插入模式

插入模式是用来让 用户进行文件内容的输入的。

用户刚进入vi是命令模式, 想敲字符输入内容是不行的。必须进入插入模式,你才能输入字符。

在插入模式下,可以通过键盘方向键,来移动光标。

但是不能再 通过 ghjk 来移动光标了,因为现在你按这些按键就是输入对应的字符了。

在插入模式下,编辑文件的过程中,你经常需要切换回 命令模式,来删除字符、删除行,跳到上一页,到最后一行等等。

所以,我们使用vi,会非常频繁的在插入模式 和 命令模式之间切换, 大家要熟悉这种切换。

从插入模式切换到命令模式,就是输入按键 Esc,就是键盘左上角的那个按键。

底行模式

所谓 底行模式,就是在屏幕底部打开命令行,用来输入命令。

底行模式 主要是 输入命令 来 保存文件 或 退出vi程序、寻找字符串、列出行号等

注意:我们只能从命令模式进入底行模式。

所以,如果你现在是处于插入模式,必须先按Esc键进入命令模式后,再按冒号 / 进入底行模式。

底线模式常用操作有如下这些:

:wq 保存文件并退出

:q 不保存文件,并退出,如果文件做了修改,但有不想保存,需要用:q!

:q! 不保存文件,强制退出

:w 只保存文件,但是不退出vi,可以切换到输入模式下面继续编辑文件

:set nu 显示行号

/abc 在文件中查找abc字符。按 n 不停的往下查找,按 N 往上查找

:1,$s/string/replace/g 替换功能,把文件中的string,替换为replace 按Esc键,切换到命令模式

:1,$s/id/name/g         id 需要替换String        name替换的String        g全局替换

文件系统

Linux中,文件是个非常广泛的概念。

Linux中的文件,不仅指磁盘上的文本、图片、视频文件,也包括硬件设备,比如串口、声卡、输入设备、输出设备等。

本文讲解的文件,主要指磁盘上的文件。

我们通常说的文本文件、图片文件都是存储在磁盘上的文件系统里面的。

分区和文件系统

大家知道,在 Windows上, 可以为一块磁盘 分区

创建好分区后,还不能立即就在分区里面放文件,还要格式化分区。

所谓格式化分区,也就是为分区安装 文件系统

文件系统有好多种,Windows上 目前使用的文件系统 主要是 NTFS 。

Linux经常选用的文件系统有ext2,ext3,ext4 等

我们可以把文件系统理解为一种规范,它规定了文件存放在磁盘上的方式。

如果我们把 磁盘 比作 地球 的话, 磁盘分区好比是 地球上的各个国家地区, 而每个分区的格式化就像是为每个国家 选择一种 管理制度。

在Windows机器上, 分好区,选择文件系统格式化后,对每个文件系统的分区,需要给它们各自的盘符,比如 C盘或者D盘。

我们访问Windows上的一个文件,需要给出这个文件的路径。 文件的完整路径,就是从盘符开始的:比如 D:\我的图片\a.jpg 或者 c:\Windows\write.exe

  • Windows文件系统里面都是磁盘文件或目录
  • Windows的文件路径是从盘符开始的
  • Windows上的文件的路径是大小写不区分的

挂接

但是,Linux系统不同,Linux文件系统里面不都是磁盘文件。

从Window过来学习Linux的同学要纠正一个思维定式,就是看到路径就一定要和磁盘上的存储的目录或文件对应起来。

而Linux文件系统目录里面除了磁盘文件,还有很多设备、甚至一些虚拟的对象,也在文件系统目录里面访问。

Linux在启动过程中,就会根据配置,创建一个虚拟的文件系统目录结构(可以想象成,Linux系统创建在内存中的一个目录结构),比如,下图蓝色部分所示

 随后的启动过程,才会,将不同的分区 挂接(mount) 到文件系统不同的目录中。

上图就是把一个磁盘分区挂接到 /opt 下面。 /opt 这个路径在这个动作中被称为挂接点。

挂接后的文件系统目录如下图所示。

 具体挂接到那个点,在安装Linux操作系统的时候,就选择好的。大家还记得安装过程中磁盘分区和选择mount路径的那个步骤吗?

注意:Linux启动过程中,首先挂接的是 根节点 / 对应的磁盘分区文件系统,找到其中的 /etc/fstab文件,里面记载了其他文件系统的挂接点,再依次挂接其他的文件系统。

● Linux目录结构里面没有文件系统的盘符

从上面的示例可以看到,Linux 文件系统里面只有一个 公共的根 / , 也叫根目录。

文件系统挂接到哪个挂接点,该文件系统下面的文件就从哪个挂接点算起。 比如上图中磁盘分区挂接到 /opt 下面, 那么原来该文件系统中的文件a1 的路径就是 /opt/a1 . 如果直接挂接到根目录 /下面,那么原来该文件系统中的文件a1 的路径就是 /a1

一个文件的全路径 是 从 根 到 该文件 这条路径上 所有节点名 顺序连接,每个节点之间以 / 分开。

比如,文件a3的全路径就是:/opt/a3。

● Linux目录结构是区分大小写的 在Linux中 /root/abc 和 /root/abC 是两个文件

目录和文件操作

当前工作目录

我们在命令行里执行命令的时候,都有一个 当前目录(也叫工作目录),就是我们所在的目录。

当用户刚登录系统时,当前工作目录是用户的 home目录

root用户的home目录,是 /root

其他用户home目录,是在创建用户的时候 指定产生的,一般是 /home/用户名

比如你是用户 byhy,home目录通常就是 /home/byhy

当前目录下面的所有文件都可以直接访问, 假设当前目录 下面有个文件 a.txt。 要用vi编辑它,就可以直接执行vi a.txt

查看当前目录使用命令 pwd ,比如

[root@izbqz ~]# pwd
/root/package

改变当前目录用命令 cd

比如,

改变当前目录为package目录(这个动作也称之为进入到package目录), 就执行命令 cd package

改变当前路径到根目录 就执行命令 cd /

绝对路径与相对路径

我们命令行要操作一个文件(或者目录),必须给出这个文件的路径。路径分为:

● 绝对路径: 绝对路径 开始于根目录,沿着目录层级,一直到达所期望的目录或文件。

比如下图

其 中的 photos(假设它是个目录) 的绝对路径 就是 /home/jono/photos

我们要进入到 photos这个目录,就执行命令 cd /home/jono/photos

● 相对路径:

相对路径相对的是 当前目录。

在使用相对路径的过程中, 经常用到一对特殊符号 . (点) 和 .. (两个点)。

符号 . 指的是当前目录,.. 指的是当前目录的父目录。

根据上面的图,假如当前目录为 jono ,如果要用相对路径切换到photos,就这样写 cd ./photos ,也可以直接写 cd photos

假如当前目录为 cory ,如果要用相对路径切换到 photos,就这样写 cd ../jono/photos 。其中 两个点 .. 表示上级目录。当然也可以使用绝对路径 cd /home/jono/photos

查看目录和文件

查看目录内容 或者某个文件的属性 使用命令 ls

ls 可能是用户最常使用的命令。通过它,我们可以知道目录里面包含的内容,也可以知道 文件和目录的 属性。

只要简单的输入 ls 就能看到 当前目录下所包含的文件和子目录列表。

比如上图中,我们就发现当前目录下,有一个 目录 , 有两个文件 Python-3.6.8.tgz readme.txt , 还有 一个目录 Python-3.6.8

为什么呈现出不同的颜色?Linux系统可以根据 的类型(文件还是目录)和 扩展名 决定 列出 时的颜色。这些都是可以配置的。

除了当前工作目录以外,也可以指定要列出内容的目录,就像这样:

[root@iztqz ~]# ls /home/byhy/
by.txt  frontend

我们经常使用 ls 命令的“-l”选项,这样可以显示出更多的信息:

[byhy@iztqz ~]$ ls -l
total 8
-rw-rw-r-- 1 byhy byhy   13 May 10 10:36 byhy.txt
drwxrwxr-x 2 byhy byhy 4096 Apr 17 11:55 frontend

各个字段的含义如下:

-rw-r--r-- 文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他人的访问权限。这个字段的含义在后面用户权限那一章会详细讲解。

1 文件的硬链接数目。

byhy 文件所有者的用户名。

byhy 文件所属用户组的名字。

82 以字节数表示的文件大小。

May 10 10:36 上次修改文件的时间和日期。

byhy.txt 文件名。

查看文本文件内容

查看文本文件的内容除了我们之前提到过的用vi编辑器外,对于比较短的文件, 可以直接用命令cat将文件的内容显示到屏幕上。

比如

[byhy@izbp16hara3tw8kbagjotqz ~]$ cat byhy.txt
byhy testing

说明byhy.txt 的文件内容就是 一行 byhy testing

创建目录

mkdir 命令是用来创建目录的。

例如

mkdir byhy1

会在当前目录下,创建一个名为"byhy1"的目录,而

mkdir byhy1 byhy2 byhy3

会创建三个目录,名为 byhy1, byhy2, byhy3。

如果我们要创建好几层的目录,比如 /root/byhy/python/lesson1,

直接这样写命令 mkdir /root/byhy/python/lesson1

shell 会报错,因为系统中可能还 没有 /root/byhy/python 这个目录。

一种方法是:我们 依次 创建 每一级目录, 像这样

mkdir /root/byhy
mkdir /root/byhy/python
mkdir /root/byhy/python/lesson1

更简单的方法是,使用参数 -p

mkdir -p /root/byhy/python/lesson1

删除文件和目录

rm 命令用来 删除 文件和目录。

rm 命令后面 直接加上要删除的文件,比如

rm file1 file2

当我们要删除目录的时候 ,需要加上 -r 选项,否则会报错,如下所示

$ rm dir1
rm: cannot remove 'dir1': Is a directory

要这样写

$ rm -r dir1

-r 参数 也可以详细的写成 –recursive 。 它表示要 递归地删除文件。 这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。

通常 -r 和 -f 参数会一起使用。

-f 参数 也可以详细的写成–force 。 它表示忽视不存在的文件,不显示提示信息。

比如:

rm -rf file1 dir1 file2 dir2

如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行,不会报错

执行 rm 操作 要非常小心, rm 不像Windows里面有回收站,一旦你用 rm 删除了一些东西,想再恢复是相当的麻烦的。

通配符

当前目录下有这样一些文件

byhy1.txt  file1.jpg  file2.jpg  file3.jpg  
file5.jpg  hy2.jpg   hyby.jpg  

我们要删除 其中 所有 以file开头, 扩展名为 .jpg 的文件,怎么办?

当然可以

rm -f file1.jpg  file2.jpg  file3.jpg file5.jpg

但是如果 这样的文件有上百个, 敲起来是非常麻烦的。

Linux 提供了一组特殊字符来匹配 文件名中的各部分内容。

这些特殊字符叫做 通配符

上面的例子,我们可以这样写

rm -f  file*.jpg
  • 匹配任意多个字符(包括零个或一个), 这样是不是,方便多了?

常用的通配符有下面:

* 匹配任意 多个 字符(包括零个或一个)

? 匹配任意 一个 字符(不包括零个)

[abcd] 匹配abcd中任意一个字符


下面是一些示例的用法

* 表示 所有文件(或目录)

by* 表示 文件名以“by”开头的文件(或目录)

by*.py 表示 以"by"开头,中间有任意多个字符,并以".py"结尾的文件(或目录)

byhy???? 表示 以“byhy”开头,其后紧接着 4个字符 的文件(或目录)

[byh]* 表示 文件名以"b",“y”,或"h"开头的文件(或目录)

byhy[0-9][0-9] 表示 以"byhy"开头,并紧接着2个数字的文件(或目录)

很多 Linux命令,只要它们使用的参数是文件名,都可以使用通配符, 比如 ls、cp、rm、mv 等等

大家要注意:rm命令时,使用通配符特别要小心。 很多人 曾经 为此 流过 悔恨的泪水。

比如,你想删除一个目录中的所有 jpg 文件。你应该这样写 rm *.jpg

如果你不小心在 “*” 和 “.jpg” 之间多输入了一个空格,就像这样: rm * .jpg

这个 rm 命令会删除目录中的所有文件,还会提示没有文件叫做 “.jpg”。

所以,白月黑羽建议大家:只要你使用 rm 命令里面有通配符, 一定要在执行之前 慎重的 思考 10秒钟以上, 再敲回车键。

复制文件和目录

cp 命令, 用来 复制文件或者目录。

假设 byhy1 是一个文件,我们可以 这样

cp byhy1 byhy2

如果 byhy2 这个文件 不存在, 上面的命令会创建一个新文件 byhy2 ,并且把 byhy1内容 拷贝到byhy2中。

如果 byhy2 已经存在了, 上面的命令会直接把 byhy1内容 拷贝到byhy2中, 就是说会覆盖byhy2 原来的内容。

如果我们要拷贝的是一个目录, 则 需要加上 -r 选项

比如

cp -r  frontend frontend2

指定 -r 或者 –recursive 会递归地复制目录及目录中的内容。就是说,如果 frontend 里面有好多级子目录和文件,全部都会被拷贝过去。

可以拷贝 文件或者目录到 另外一个目录中,比如

cp -r file1 dir1 dir2 就是复制文件 file1 和 目录dir1 到目录 dir2中。目录 dir2 必须存在。


再比如 ```cp dir1/* dir2``` 这里使用通配符,可以把目录 dir1 中的所有文件都 复制到目录 dir2 中。 dir2 必须已经存在。

移动文件目录、重命名文件目录

mv 命令可以 移动 文件或者目录, 也可以 重命名 文件或者目录

mv 使用方法与 cp 很相像。

假设 byhy1 是一个文件,我们可以 这样

mv byhy1 byhy2

如果 byhy2 这个文件 不存在, 上面的命令会 把文件 byhy1 改名为 byhy2 ,并且把 byhy1内容 拷贝到byhy2中。

如果 byhy2 已经存在了, 上面的命令会把文件 byhy1 改名为 byhy2, 等于删除了原来的 byhy2。

假设 dir1 是一个目录,我们可以执行

mv  dir1 dir2

如果目录 dir2 不存在,就会把 dir1目录 改名为 dir2。

如果目录 dir2 存在,就会把 dir1(及它的内容)到目录 dir2。

假设 byhy1 是一个文件,dir1 是一个目录,我们可以执行

mv  byhy1 dir1 dir2

这样写的话, 如果目录 dir2 存在,就会 移动文件 byhy1 和 目录 dir1(及它的内容)到目录 dir2。

在文件中查找字符串

在 Linux 操作过程中,经常需要在一个文本文件中 查询包含特定关键字的那些行的信息。

比如,我们需要在 日志文件 django.log 中查看所有包含了 Error 关键字的行。

当然,我们可以使用vi打开这个文件,然后再底行模式输入 /Error 查看。

更快捷的方式,就是直接 使用 grep命令

比如

$ grep Error django.log
1130_15:57:28 Internal Server Error: /api/cust/pages
    raise ExpiredSignatureError('Signature has expired')
jwt.exceptions.ExpiredSignatureError: Signature has expired
1130_16:00:20 Internal Server Error: /api/cust/pages
    raise ExpiredSignatureError('Signature has expired')
jwt.exceptions.ExpiredSignatureError: Signature has expired
1130_16:08:38 Internal Server Error: /api/cust/pages
    raise ExpiredSignatureError('Signature has expired')
jwt.exceptions.ExpiredSignatureError: Signature has expired

如果你想同时显示 各行的行号,可以加上参数 -n

比如

$ grep Error django.log -n
1:1130_15:57:28 Internal Server Error: /api/cust/pages
18:    raise ExpiredSignatureError('Signature has expired')
19:jwt.exceptions.ExpiredSignatureError: Signature has expired
20:1130_16:00:20 Internal Server Error: /api/cust/pages
37:    raise ExpiredSignatureError('Signature has expired')
38:jwt.exceptions.ExpiredSignatureError: Signature has expired
39:1130_16:08:38 Internal Server Error: /api/cust/pages
56:    raise ExpiredSignatureError('Signature has expired')
57:jwt.exceptions.ExpiredSignatureError: Signature has expired

如果你要查找的不仅仅是Error 这样的 一个单词,而是一段句子,比如 要找 Internal Server Error

就需要使用双引号,这样写

$ grep "Internal Server Error" django.log -n
1:1130_15:57:28 Internal Server Error: /api/cust/pages
20:1130_16:00:20 Internal Server Error: /api/cust/pages
39:1130_16:08:38 Internal Server Error: /api/cust/pages
58:1130_16:09:16 Internal Server Error: /api/cust/pages

grep error django.log -n -C 2        除了查看出错的行,还有上面两行和下面两行
grep error django.log -n -B 2          除了查看出错的行,还有出错前两行
grep error django.log -n -A 2          除了查看出错的行,还有出错后两行

用户管理和文件权限

用户和用户组

现代操作系统基本都是一个 多用户 的操作系统,Windows、MacOS、Linux都是这样。

任何一个用户,要使用Linux系统,都必须用Linux账号登陆系统。

Linux 系统有个特殊的账号 root 。 通常是 系统管理员使用该账号,就像Windows里面的Administrator账号一样。

root账号 是系统安装好就有的,具有系统中最高的权限,比如:可以创建其它账号、停止其它用户进程、修改一些Linux系统配置文件、访问其它用户文件。

而其它账号则是有权限限制的,上面说的root用户的特权,其它账号通常是没有的。

之所以要有这样的权限区别,就是防止一些用户不小心(或者故意)做出的破坏。

Linux系统中,每个用户账号 都对应一个 用户 ID。

用户ID 就是一个数字,因为计算机处理数字更加方便。

用户的 ID 与账号的信息就存储在文件 /etc/passwd 当中。

另外 每个用户可以属于一个或者多个 用户组 ,每个用户组对应一个 GroupID

GroupID 的信息存储在文件 /etc/group 当中。

系统管理员可以对某个用户组中的所有用户进行统一管理,比如分配权限等。

添加用户

当你们公司新来了一位员工,需要使用你们的Linux主机, 你如果是管理员, 可以为他创建一个用户账号。

Linux系统中创建用户,可以使用命令 adduser ,随后输入该用户的密码2次,并且一路按回车确认信息,即可。

该命令需要root权限,所以用root账号登录,

比如:

root@byhy-server:~# adduser byhy2
Adding user `byhy2' ...
Adding new group `byhy2' (1001) ...
Adding new user `byhy2' (1001) with group `byhy2' ...
Creating home directory `/home/byhy2' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for byhy2
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

这样,就添加了一个用户byhy2

使用命令 cat /etc/passwd 查看文件内容,你会发现在/etc/passwd文件末尾中新增了一行数据,如下所示

byhy2: x:1001:1001:,,,:/home/byhy2:/bin/bash

/etc/passwd文件每行对应一个用户的信息。 一行中的字段用":“隔开。每个字段的含义分别是

 用户名
 登录密码 
 用户ID 
 用户Group ID
 描述信息
 用户的home目录
 该用户缺省shell

该命令 同时也为该用户创建了一个用户组, 组名就叫 byhy2 ,如下所示

root@byhy-server:~# groups byhy2
byhy2 : byhy2

当然,你可以创建用户的时候,就加入一个指定的组,而不是新建一个组,
比如 adduser --ingroup root byhy ,就在创建byby用户的同时,把它加入到 root 这个用户组里面了。

另外该命令 还为该用户创建了一个 home目录(这里就是 /home/byhy2), 该目录作为byhy2用户登录后使用的主目录,该目录属于byhy2用户所有。

设置密码

使用命令adduser添加用户时,就会设置密码。

如果后面你想更新密码了怎么办? 使用命令 passwd

# passwd byhy
Changing password for user byhy.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

但是,只有root用户才可以给其他用户设置密码,普通用户只能修改自己的密码。

删除用户

假如,有一天,这位同事辞职了,你需要删除他的账号,使用命令 deluser

比如

root@byhy-server:~# deluser byhy2
Removing user `byhy2' ...
Warning: group `byhy2' has no more members.
Done.

用户间切换

假如你是系统管理员, 正使用root账号操作。

现在你需要以byhy账号进行一些操作, 可以从root用户切换到byhy账号,

切换账号使用命令 su , 英文意思 substitute user 或者 switch user 。

比如 su - byhy

注意,其中有一个符号 - , 切换命令中使用这个符号,表示要重新创建用户环境,就像使用byhy账号重新登陆一样。

也可以不用符号 - ,比如 su byhy ,这样就会使用当前的用户的环境(保留现有的环境变量),切换到新用户byhy

如果现有用户不是root 用户,切换到其他用户账号,需要输入密码, 如果是root用户则不需要输入密码。

查看用户组

要查看自己属于哪个用户组,使用命令 groups ,比如

byhy@byhy-server:~$ groups
byhy adm cdrom sudo dip plugdev lxd

表示当前用户byhy 属于这些组: byhy adm cdrom sudo dip plugdev lxd

其中第一个 byhy 是byhy用户的 主用户组(primary group) ,其它的是 从用户组(secondary group)

/etc/passwd 文件里面记录的是用户的主用户组

要查看其它属于哪个用户组,使用命令 groups <用户名> ,比如

byhy@byhy-server:~$ groups root
root : root
byhy@byhy-server:~$ groups byhy
byhy : byhy adm cdrom sudo dip plugdev lxd

要查看某个组里面有哪些用户

可以直接看/etc/group 文件,

更快速的,可以这样

grep '^sudo' /etc/group

但是这样只能查看到从用户组为该组的用户。

/etc/group里面记录的从用户组用户。

也可以使用命令

groupmems -g groupname -l

id指令

id byhy       
uid 表用用户 ID,gid 表示用户主组 ID,groups 表示用户所有的属组

添加用户组

增加一个新的用户组使用 addgroup 命令。

比如:

addgroup byhyusers

此命令向系统中增加了一个新组byhyusers。

删除用户组

如果要删除一个已有的用户组,使用 delgroup 命令

比如

delgroup byhyusers

此命令从系统中删除组byhyusers。

改变用户所属组

如果要将一个用户从组1改到组2,需要root用户使用 usermod 命令,其格式如下:

例如:下面的 命令将用户byhy的 主用户组(primary group)设置为 g1 。

usermod –g g1 byhy

注意:主用户组只能有一个


 

下面的命令将用户byhy用户的 从用户组(secondary group)设置为:g2,g3

usermod –G g2,g3 byhy

从用户组 可以有多个。

下面的命令给用户byhy 再添加 两个从用户组(secondary group) g2,g3 ,原来所属的从用户组仍然也在

usermod -a -G g1,g2 byhy

注意: 有 -a 参数是添加从用户组, 没有 -a 参数是设置从用户组

Linux 文件访问权限

Linux文件的访问有三种权限: 读(用字母r表示)、写(用字母w表示)、执行(用字母x表示)

某个用户 对于一个 文件

有读权限,表示该用户可以读取文件的内容,

有写权限,表示该用户可以修改文件内容,

有执行权限, 表示该用户可以运行该文件(当然该文件应该是可执行文件)

而 这三种权限 对目录,含义又不一样。

某个用户 对于一个 目录

有读权限,表示该用户可以查看该目录里面的内容,

有写权限,表示该用户可以在该目录里面 创建 和删除 文件,

有执行权限, 表示该用户可以使用 cd命令,进入该目录

对 某个文件或者目录,Linux系统需要说明 三种类型的用户 ,分别具有怎样的权限

这三种类型分别是:

  • 文件的所有者,英文叫 owner , 也就是 该文件的 创建者

  • 文件归属的用户组里面的用户 ,英文叫 grouper,

  • 其他用户 (非owner和非grouper)

Linux系统需要为每个文件和目录,指定这个三种类型的用户,具有什么r、w、x里面的哪些权限

文件存取权限的显示 可以通过"ls -l"命令显示,如:

$ ls -l file1

显示如下:

$ ls -l mysql57-community.rpm
-rwxr-xr--. 1 root root 9224 Sep 12  2016 mysql57-community.rpm

其中:

  • 第2-4字符"rwx"表示此文件所有者root 对此文件的操作权限是为"可读、可写、可执行”,

  • 第5-7字符"r-x" 表示此文件所归属的root组内的用户对此文件的操作权限是"可读、不可写、可执行",

  • 第8-10字符"r–" 表示其他用户对此文件的操作权限是"可读、不可写、不可执行"

修改文件访问权限

文件的所有者或者root用户可以修改文件的访问权限

用chmod命令修改文件的存取权限,chmod命令的格式如下:

chmod  [who][op][permission]  file...

who项表示用户类型,它的内容为以下一项或多项:

u	拥有者(user --- owner)
g	与拥有者同一组的用户(group)
o	其他人(other)
a	所有人(all)

op项表示动作:

+	表示要加上permission指定的权利
-	表示要取消permission指定的权利

permission项为存取权限,它的内容为以下一项或多项:

r	表示可读
w	表示可写
x	表示可执行

比如:

chmod u+w file1 ,该命令添加了 拥有者对file1文件的写权限

chmod u-x file1 ,该命令去掉了 拥有者对file1文件的执行权限

chmod ug+rwx file1 ,该命令添加了 拥有者和同组用户 对file1文件的 读、写、执行权限

chmod a+rwx file1,该命令添加了 所有人 对file1文件的 读、写、执行权限

chmod o+rx /root , 该命令添加了 其它组 对 目录 /root 的可读可执行权限。 对于目录来说 ,可执行权限意味着,用户可以 cd 进入 到这个目录。

chmod -R o+rx /root , 参数 -R 表示递归的意思,该命令执行结果是:其它用户可以对 /root 目录以及所有它的子目录、子文件 都有 可读可执行权限 。

改变文件所有者及文件所在组

chown将指定文件的拥有者改为指定的用户或组。

该命令的参数中,用户可以是用户名或者用户ID;组可以是组名或者组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。

系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限.

注意:必须是有root权限的用户才能改变文件所有者。

改变文件所有者的命令格式如下:

chown [选项]... [所有者][:[组]] 文件...

例如:

chown byhy test1 ,就把文件test1的所有者变更为用户byhy

chown byhy:byhy test1 ,就把文件test1的所有者变更为用户byhy,所属组变为byhy

chown -R byhy dir1 ,就把目录dir1以及下面所有的子目录和文件的所有者变更为用户byhy

也可以用命令chgrp改变文件所有者组,格式如下:

chgrp [选项] [组] [文件]

注意:必须是有root权限的用户才能改变文件组别的归属

比如:

chgrp byhy test1 , 就把文件test1的用户组变更为组byhy

sudo:以root权限运行程序

有的程序需要做一些特权操作,比如前面讲的用户账号管理:adduser、deluser。

通常我们要执行这样的程序必须以root用户登录去执行。

但是,我们有时却希望给某几个信任的用户授予这样的权限,允许他们某次可以申请以以root权限执行该程序。

Windows里面的 以管理员权限 运行某个程序,就是这样。

Linux上也有这种方法,就是使用命令 sudo

比如

sudo adduser byhy3

就是申请以root权限运行 adduser byhy3 这个命令。

当然,很明白,不是你说申请运行就一定可以的,前提是你当前登录的账号 要在系统设置里面 允许这样做。

这个设置是 在 /etc/sudoers 里面配置的。 如下

root    ALL=(ALL:ALL) ALL
      #如何登录=(以任何账号登录:以任何群组)执行所有命令
%admin         ALL=(ALL) ALL
%sudo          ALL=(ALL:ALL) ALL

byhy2, byhy3   ALL = /sbin/shutdown, /sbin/reboot

通过配置这个文件,可以设置

哪些用户(或者哪些组里面的用户) ,在什么地方, 以 哪些账号的权限 , 运行哪些程序。

一般不建议直接修改这个文件, 防止语法写错,导入整个规则被破坏。

而是使用命令 visudo 命令修改, 这个命令可以对错误的修改做检查,防止意外。

通常,我们会给某个组设置规则, 然后只需要把某些用户加入组中即可。

比如,Ubuntu上可以把某个用户加入 sudo 这个组, 既可以拥有 任何地方、以任何账号的权限、运行任何程序 的能力。
usermod -a -G sudo byhy8

把用户加入组的命令,就是使用 usermod, 上面已经讲过。

注意:通常修改组后,该账号需要重新登录一下,才有组的sudo 权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题训练营第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结

四数相加 看完题后的思路 首先想到了暴力解法,四重for循环,时间复杂度为0(n^4).接着往下想,四数相加不正好是(两数相加)(两数相加)吗,可以依次求出两数相加的结果存入hash表中 和-[下标1,下标2],然后再进行两数相加. 思路 上面的思路中,有两点疑问: (12)(34)(13)(24)吗? 1…

渗透测试基础入门【01】——测试流程(IPC$)

渗透测试基础入门【01】——测试流程&#xff08;IPC$&#xff09; 注意&#xff0c;攻击对方需要对方授权&#xff0c;本文章目的只为教学&#xff0c;不要拿去干违法的事 1 渗透测试流程 授权&#xff08;获取目标用户授权&#xff0c;否则是违法行为&#xff09;信息收集 …

【4 - 降维算法PCA和SVD - 原理部分】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

nacos注册源码分析

Nacos注册服务 cosumer启动的时候&#xff0c;从nacos server上读取指定服务名称的实例列表&#xff0c;缓存到本地内存中。 开启一个定时任务&#xff0c;每隔10s去nacos server上拉取服务列表 nacos的push机制&#xff1a; 通过心跳检测发现服务提供者出现心态超时的时候…

SpringCloud学习笔记 - 流控规则 - Sentinel

1. Sentinel流控规则简介 这里的流控指的是“流量控制”&#xff0c;进一步解释说明&#xff1a; 资源名&#xff1a;唯一名称&#xff0c;默认请求路径。 针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;默认default&#xff08;不…

爬虫解析模块(bs4,selenium)

bs4文档 from bs4 import BeautifulSoupBeautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup自动将输入文档转换为Unicode编码&#xff0c;输出文档转换为utf-8编码。 解析器 解析器使用方法优势劣势Python标准库BeautifulS…

Dubbo——入门介绍

目录1.概述1.1.什么是 Dubbo &#xff1f;1.2.Dubbo 架构2.Dubbo 快速入门2.1.Zookeeper 安装2.2.创建项目2.3.代码实现2.3.1.dubbo-service 模块2.3.2.dubbo-web 模块2.4.本地启动2.5.使用 Dubbo 实现 PRC2.5.1.修改 dubbo-service 模块2.5.2.修改 dubbo-web 模块2.5.3.启动 d…

可免费编辑 PDF 内容的 7 大 PDF 编辑工具

有时您可能希望编辑 PDF 文档中的敏感信息&#xff0c;例如财务帐号和 ID 号&#xff0c;以便在不泄露隐私的情况下共享 PDF。编辑 PDF 是从 PDF 中删除私有内容。使用PDF 编辑工具可以轻松完成编辑。市场上有这么多工具&#xff0c;您需要选择最好的一种。 7 大 PDF 编辑工具 …

data analysis and predict

data anlysis and predict 谢邀&#xff0c;本人正在崩溃和兴奋间反复横跳&#xff08;崩溃居多&#xff09;&#xff0c;anyway, 我心态超好的&#xff01;besides, 仅供个人学习查阅&#xff0c;不具任何参考价值&#xff01;&#xff01;&#xff01; &#xff08;小边不想努…

路由信息协议RIP

文章目录路由信息协议RIP一、Routing Information Protocol的定义二、RIP的基本工作过程三、“坏消息传播得慢”的问题四、总结路由信息协议RIP 一、Routing Information Protocol的定义 RIP是分布式的基于距离向量的路由选择协议 协议RIP的特点是&#xff1a; 仅和相邻路由…

Java数据结构(泛型)

1、集合框架 Java 集合框架Java Collection Framework &#xff0c;又被称为容器container &#xff0c;是定义在 java.util 包下的一组接口interfaces 和其实现类classes 。 其主要表现为将多个元素element 置于一个单元中&#xff0c;用于对这些元素进行快速、便捷的存储sto…

【XML了解】xml与hxml 标记语言学习

XML与HXML的区别 XML 被设计用来传输和存储数据&#xff0c;结构化、存储以及传输信息&#xff08;如&#xff1a;数据包&#xff09; XML 被设计用来传输和存储数据&#xff0c;其焦点是数据的内容 XML 标签没有被预定义, 需要自行定义标签 HTML 被设计用来表现和展示数据&…

数组常用方法总结 (7) :copyWithin / fill / reduce / reduceRight

copyWithin 将指定位置的元素复制到数组的其他位置。返回值为移动后数组。原始数组的内容会被改变&#xff0c;原始数组的长度不会改变。arr.copyWithin(index, startIndex, endIndex)第一个参数为&#xff0c;期望被复制的内容将要插入的位置。第二个参数为&#xff0c;数组中…

SpringBoot 参数接收只看这一篇文章就够了

好久没有写过接口了&#xff0c;最近在写一些基础接口&#xff0c;在写参数接口接收参数的时候居然想不起来&#xff0c;会有那么一丝丝的怀疑&#xff0c;虽然并不会影响编码&#xff0c;但是说明一个问题&#xff0c;没有系统的总结知识&#xff0c;没有温故知新&#xff0c;…

PMP真的有用吗?

作为一个考了PMP的前辈来说&#xff0c;是有用的。PMP 含金量&#xff0c;PMP有没有用&#xff0c;这类问题一直是大家关注的重点&#xff0c;知乎上几个相关问题热度也一直很高。友情提示一句&#xff1a;PMP 就是一个证书&#xff0c;能起到加分和门槛的作用&#xff0c;技术…

Diazo Biotin-PEG3-DBCO,二苯并环辛炔PEG3重氮生物素,无铜 Click Chemistry

Diazo Biotin-PEG3-DBCO反应原理&#xff1a;Diazo Biotin-PEG3-DBCO 是一种点击化学标记生物素&#xff0c;可通过无铜 Click Chemistry 与叠氮化物发生反应。重氮允许使用连二亚硫酸钠 (Na2S2O4) 从链霉亲和素中有效释放捕获的生物素化分子。点击化学生物素标记试剂包含各种点…

基于麻雀算法优化的深度极限学习机DLM的预测算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于SpringBoot的SSMP整合(业务层表现层)

基于SpringBoot的SSMP整合&#xff08;数据层&#xff09;https://blog.csdn.net/weixin_51882166/article/details/128693739?spm1001.2014.3001.5502 标准CRUD Service层接口定义与数据层接口定义具有较大差距。 定义Service接口&#xff1a; package com.example.ssmp_…

蓝桥杯STM32G431RBT6学习——LCD

蓝桥杯STM32G431RBT6学习——LCD 前言 作为在开发板上最显眼的LCD屏幕&#xff0c;自然而然也是每年的必考考点。国信长天开发板使用的是一块2.4寸&#xff08;240*320&#xff09;的TFT-LCD液晶屏&#xff0c;其引脚占用如下&#xff1a; 其中&#xff0c;CS为片选信号引脚…

【Netty】实现IM聊天室案例Demo

文章目录1、WebSocket链接建立2、实现用户上线功能3、私聊发送消息注意&#xff1a; 该文章不会详细介绍Netty相关概念和原理&#xff0c;主要目的是介绍如何快速构建聊天室Demo 不会在文章主体过多说明代码流程&#xff0c;文章中的代码已经配备了详细的注释 1、WebSocket链接…