0基础带你入门Linux之使用

news2024/12/25 23:42:38


1.Ubuntu软件管理

回顾一下,我们之前使用su root切换到root模式,使用who

发现为什么显示的还是bd用户呢?为什么呢?

这个who是主要来查看的是我们登录的时候是以什么用户登录的

所以即使我们使用who进行查看的时候显示的还是bd用户

如果想要显示的是root用户的话我们需要在乌班图里面进行命令的输入的

2.用户的操作

我们在Windows上常用管理工具

或者直接去官网上下载软件

在大多数的Linux中,都有各自的软件管理工具,比如Ubuntu常用的是apt,通过软件管理包来安装和更新软件等

关于apt的使用:

可以发现我们的apt前面都存在一个sudo,因为我们想要安装一个软件、删除和更新的话,普通用户是没有权限的

我们通过sudo进行提权的操作

-y的意思是:我们在安装软件包的时候,回问我们一下选项,我们回答yes或者是no

加上-y就能自动进行回复这个的操作

安装软件:sudo apt install 插件名字

现在我们进行一个下载插件的操作

我们下载一个sl插件,是一个火车行驶的样子

bd@clem:~$ sudo apt install sl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  sl
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.7 kB of archives.
After this operation, 60.4 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe amd64 sl amd6                                                                              4 5.02-1 [12.7 kB]
Fetched 12.7 kB in 2s (6,466 B/s)
Selecting previously unselected package sl.
(Reading database ... 119188 files and directories currently installed.)
Preparing to unpack .../archives/sl_5.02-1_amd64.deb ...
Unpacking sl (5.02-1) ...
Setting up sl (5.02-1) ...
Processing triggers for man-db (2.9.1-1) ...
bd@clem:~$

通过百度翻译我们能知道这里面大概的命令的意思

下载完毕之后直接sl回车,就出现了下面的画面

我们再安装一个插件cmatrix

bd@clem:~$ sudo apt install cmatrix
[sudo] password for bd:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  cmatrix-xfont
The following NEW packages will be installed:
  cmatrix
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 17.2 kB of archives.
After this operation, 52.2 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe amd64 cmatrix                                                                               amd64 2.0-2 [17.2 kB]
Fetched 17.2 kB in 1s (15.8 kB/s)
Selecting previously unselected package cmatrix.
(Reading database ... 119211 files and directories currently installed.)
Preparing to unpack .../cmatrix_2.0-2_amd64.deb ...
Unpacking cmatrix (2.0-2) ...
Setting up cmatrix (2.0-2) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for man-db (2.9.1-1) ...
bd@clem:~$

安装完之后我们输入cmatrix回车

然后我们使用CTRL+C就能退出这个页面了

卸载软件的方式:sudo apt remove 插件名字

bd@clem:~$ sudo apt remove sl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  sl
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 60.4 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 119211 files and directories currently installed.)
Removing sl (5.02-1) ...
Processing triggers for man-db (2.9.1-1) ...
bd@clem:~$

查看已经安装的软件:apt list --installed

里面安装了很多的软件,从图片里面就能看得出来的

删除软件包---sudo apt purge 软件的名字

sudo apt purge 命令会从你的系统中删除指定的软件包,并且还会删除它们的配置文件

bd@clem:~$ sudo apt purge sl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  sl*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 60.4 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 119221 files and directories currently installed.)
Removing sl (5.02-1) ...
Processing triggers for man-db (2.9.1-1) ...
bd@clem:~$

我们软件在安装完成之后可能会有软件安装包的残留

那么我们就需要使用purge进行对应软件安装包的删除操作

这个时候我们的软件安装包就没了,我们进行sl的输入回车,发现这个软件已经没了

那么现在我们就了解到了两种的软件删除方式了

下载第三方库---pip install 第三方库的名字

库是模块的意思,模块分为三种

1.内置模块(安装python自带的)

2.自定义的py文件

3.第三方模块(别人写的py文件)

现在我们下载一个requests这个库

bd@clem:~$ pip install requests
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (2.22.0)
bd@clem:~$

这里显示的是我们已经存在了,那么我们就不做操作

查看已有的第三方库---pip list

删除第三方库---pip uninstall 要删除的第三方库的名字

然后我们利用pip list查看目前的第三方库

发现requests已经被删除了

虚拟机和本机文件互传

现在我们想将桌面的xuanxuan.txt这个文件同步到虚拟机里面我们该怎么做呢?

我们直接将这个文件拖动到左边这个文件夹里面就行了

bd@clem:~$ pwd
/home/bd
bd@clem:~$ ls
68  environment  kaizi  kk  py_case  xuanxuan.txt
bd@clem:~$

我们通过cat能看到这个文件我们在移动到这里之前在里面写的数据

bd@clem:~$ cat xuanxuan.txt
12345678bd@clem:~$

还存在第二种方式,但是已经被淘汰了

2.用户的操作

用户的添加操作 useradd -m 用户名

-m的解释

我们在创建新用户的时候通常会使用到-m

在 Linux 系统中,使用 useradd 命令添加新用户时,-m 选项用于创建用户的主目录。

具体来说:

  1. -m 选项会创建一个新的主目录(通常是 /home/用户名)。

  2. 如果不使用 -m 选项,需要手动创建用户的主目录。

例如:

sudo useradd -m username

这个命令会添加一个名为 username 的新用户,并自动创建 /home/username 主目录。

如果不使用 -m 选项:

sudo useradd username

这个命令会添加一个名为 username 的新用户,但不会创建主目录。你需要手动创建主目录:

sudo mkdir /home/username
sudo chown username:username /home/username

总结一下:

  • -m 选项:自动创建用户的主目录。

  • 不使用 -m 选项:需要手动创建用户的主目录。

最上面就是我们会用到的简短指令

添加用户的操作

使用sudo useradd -m xiaohei

先提权再新建一个用户,一定要加-m。作用上面说了

我们在第二步输入密码之后就创建成功了

bd@clem:~$ sudo useradd -m xiaohei
[sudo] password for bd:

创建成功之后我们cd到home目录里面去

使用ls进行查看操作,然后发现多了一个xiaohei 的用户

bd@clem:~$ cd /home/
bd@clem:/home$ ls
bd  xiaohei

我们创建用户的时候都会生成一个文件夹的,在home目录里面生成的

那么我们现在能不能切换到xiaohei 这个用户里面呢?

这个明显是不能的

因为是刚刚创建的,并且没有设置这个用户的密码,那么我们是不能进行用户的切换的

所以我们需要设置一下密码

bd@clem:/home$ sudo passwd xiaohei
New password:
Retype new password:
passwd: password updated successfully

那么这个时候我们已经给xiaohei设置好了密码了

我们cd回车

然后看看pwd看看现在在哪里,可以看的出我们在xiaohei这里面

bd@clem:/home$ su xiaohei
Password:
$ pwd
/home
$ ls
bd  xiaohei
$ cd
$ pwd
/home/xiaohei
$

通过后面的vim的知识,我们将配置文件进行了修改的操作

我们su到了xiaohei 的界面,然后显示就正常了

用户的删除操作 sudo userdel -rf 要删除的用户名

我们先通过前面的知识创建一个新用户xiaomiong并且设置好密码

bd@clem:/home$ sudo useradd -m xiaoming
[sudo] password for bd:
bd@clem:/home$ ls
bd  xiaohei  xiaoming
bd@clem:/home$ sudo passwd xiaoming
New password:
Retype new password:
passwd: password updated successfully
bd@clem:/home$ su bd
Password:
bd@clem:/home$
bd@clem:/home$ su xiaohei
Password:
xiaohei@clem:/home$ cd /
xiaohei@clem:/$ ls
bin   etc   lib32   lost+found  opt   run   srv       tmp
boot  home  lib64   media       proc  sbin  swap.img  usr
dev   lib   libx32  mnt         root  snap  sys       var
xiaohei@clem:/$ cd home
xiaohei@clem:/home$ ls
bd  xiaohei  xiaoming

然后现在我们想将xiaoming 这个用户进行删除的操作

那么我们应该怎么做呢?

xiaohei@clem:/home$ sudo userdal xiaoming
[sudo] password for xiaohei:
xiaohei is not in the sudoers file.  This incident will be reported.
xiaohei@clem:/home$

我们需要先切换到bd,因为xiaoming这个用户没有增删改查的权利

我们在bd用户实现删除之后我们发现xiaoming这个文件夹还存在,为什么呢?

bd@clem:/home$ sudo userdel xiaoming
bd@clem:/home$ ls
bd  xiaohei  xiaoming

那么就是说现在还没有删除完

bd@clem:/home$ sudo userdel -rf xiaoming
userdel: user 'xiaoming' does not exist
bd@clem:/home$

我们使用-rf进行强制删除的操作

其实用户xiaoming已经不存在了,但是这个文件夹还在啊,那么我们就将文件夹删除了

xiaoming这个文件夹里面是没有东西的

bd@clem:/$ cd home
bd@clem:/home$ ls
bd  xiaohei  xiaoming
bd@clem:/home$ rm -rf xiaoming
rm: cannot remove 'xiaoming/.bash_logout': Permission denied
rm: cannot remove 'xiaoming/.bashrc': Permission denied
rm: cannot remove 'xiaoming/.profile': Permission denied

上面的这个就是拒绝访问的意思,还是我们的权利不够

可以看的出还是删的不干净

那么我们就进行提权的操作

bd@clem:/home$ sudo rm -rf xiaoming
[sudo] password for bd:
bd@clem:/home$ ls
bd  xiaohei

然后通过ls就能看的到我们已经将xiaoming这个文件夹删除了

用户组的操作

了解分组的意义

用户组分组在Linux和Unix系统中是一种重要的权限管理机制。通过用户组,系统管理员可以有效地控制用户对文件、目录和设备的访问权限,以及对系统资源的使用。以下是用户组分组的一些主要用途:

  1. 权限管理
  • 用户组可以用来设置文件和目录的权限。例如,管理员可以赋予某个组的成员对特定文件的读写权限,而其他用户则没有这些权限。

  • 通过组来管理权限比单独为每个用户设置权限要高效得多。

  1. 资源共享
  • 用户组可以用于在组内共享资源。组内的成员可以访问组内共享的文件和目录,这对于团队协作非常有用。
  1. 简化用户管理
  • 管理员可以通过管理组来简化用户管理。例如,管理员可以给整个组分配权限,而不是单独为每个用户分配,这样可以减少管理工作量。
  1. 安全性
  • 用户组可以帮助实现更细粒度的安全控制。通过将用户分配到不同的组,并为这些组设置不同的权限,可以限制对敏感数据的访问。
  1. 组织结构
  • 在大型组织中,用户组可以帮助反映组织结构。例如,可以将所有财务部门的用户放在一个组中,然后为这个组分配特定的权限。
  1. 项目或任务分组
  • 用户组可以用来组织参与特定项目或任务的用户。这样可以方便地为参与特定项目的所有用户分配必要的资源和权限。
  1. 自动化脚本和程序
  • 某些脚本和程序可能需要以特定的用户组身份运行。通过将用户添加到适当的组,可以确保这些脚本和程序能够正确执行。
  1. 系统服务和守护进程
  • 系统服务和守护进程通常以特定的用户组身份运行,以限制它们的权限并提高系统的安全性。
  1. 审计和监控
  • 用户组可以帮助系统管理员进行审计和监控。管理员可以监控特定组的活动,以识别潜在的安全问题或不当行为。

通过合理地使用用户组,系统管理员可以提高系统的安全性、可管理性和效率。

创建用户组

我们需要切到bd用户,因为权限不够

bd@clem:/home$ sudo groupadd python
[sudo] password for bd:
bd@clem:/home$

给xiaohei进行分组的操作

xiaohei@clem:/home$ cd
xiaohei@clem:~$ ls
t1.txt
xiaohei@clem:~$ ls -l
total 0
-rw-rw-r-- 1 xiaohei xiaohei 0 Sep 16 20:24 t1.txt
xiaohei@clem:~$ newgrp python
Password:
Invalid password.
xiaohei@clem:~$ newgrp python

这里显示密码是无效的,我们无法将xiaohei放到python组里面

我们需要先给xiaohei设置主组和附属组,主组是xiaohei的家目录,附属组是python和Linux

我们在这个之前先创建了两个组:python和linux

我们先切换到bd用户

bd@clem:/home/xiaohei$ sudo usermod -g xiaohei -G python,linux xiaohei

-g是主组, -G是附属组

-G附属组,附属组

如果存在多个组的话我们就使用逗号进行分开的操作

sudo usermod -g xiaohei -G python,linux xiaohei

这个命令是用来修改用户组信息的,具体来说:

  • sudo:以超级用户权限执行后面的命令。

  • usermod:用户账户修改命令。

  • -g xiaohei:将用户 xiaohei 的主用户组(primary group)修改为 xiaohei

  • -G python,linux:将用户 xiaohei 添加到 pythonlinux 这两个附加组(supplementary groups)中。

执行这个命令后,用户 xiaohei 的主用户组将被设置为 xiaohei,并且他还会是 pythonlinux 组的成员。这通常用于:

  1. 权限管理:通过将用户添加到特定的组,可以控制用户对某些文件或设备的访问权限。例如,如果 python 组有权限执行某些 Python 脚本,那么将用户添加到这个组后,用户就可以执行这些脚本。

  2. 组织用户:在多用户系统中,通过将用户分配到不同的组,可以更有效地管理用户和权限。例如,所有使用 Python 的用户都可以被添加到 python 组。

  3. 简化权限分配:而不是单独为每个用户设置权限,可以通过修改组权限来一次性影响组内的所有用户。

请注意,修改用户组信息可能需要重新登录或重启系统才能完全生效。此外,确保你有足够的权限来执行这个命令,因为它涉及到系统级别的用户账户修改。

bd@clem:/home/xiaohei$ su xiaohei
Password:
xiaohei@clem:~$ groups
xiaohei python linux
xiaohei@clem:~$

我们切换到xiaohei这个用户上,我们利用groups看看是哪个组的,可以看见我们设置的三个组别

我们可以看的到xiaohei 是主组,剩下的两个就是附属组

查看用户组 groups

xiaohei@clem:/home$ groups
xiaohei

每个用户的默认组都是自己的家目录

bd@clem:/home/xiaohei$ su xiaohei
Password:
xiaohei@clem:~$ groups
xiaohei python linux
xiaohei@clem:~$

利用groups可以查看到该用户加入的所有用户组

切换用户组

xiaohei@clem:~$ newgrp python
xiaohei@clem:~$ groups
python xiaohei linux
xiaohei@clem:~$

我们使用newgrp 要进行切换的组名

切换完成之后,然后我们发现主组变成了python了

用户在哪个组,那个组就变成主组了

我们现在创建了一个t2.txt文件

xiaohei@clem:~$ newgrp python
xiaohei@clem:~$ groups
python xiaohei linux
xiaohei@clem:~$ ^C
xiaohei@clem:~$ touch t2.txt
xiaohei@clem:~$ ls
t1.txt  t2.txt
xiaohei@clem:~$ ls -l
total 0
-rw-rw-r-- 1 xiaohei xiaohei 0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python  0 Sep 16 20:58 t2.txt

我们对于刚创建的t2.txt文件来说的话

这个文件是处于python是主组的情况下创建的

那么这个文件就是属于python组的

那么举一反三:现在我们现在使用newgrp切换到linux这个组的话,然后我们进行文件的创建的操作,然后我们可以利用ls -l发现我们创建的文件是linux组的

xiaohei@clem:~$ newgrp linux
xiaohei@clem:~$ touch t3.txt
xiaohei@clem:~$ ls -l
total 0
-rw-rw-r-- 1 xiaohei xiaohei 0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python  0 Sep 16 20:58 t2.txt
-rw-rw-r-- 1 xiaohei linux   0 Sep 16 21:03 t3.txt

所以我们发现我们切换到的是哪个组,那么我们在这个组中创建的文件都是这个组的

-rw-rw-r-- 这个是文件的权限

1是文件的数量

后面的xiaohei是创建文件的用户

再后面的python就是创建文件的用户组,后面的就是时间

那么最后我们将主组切换回去

删除用户组 sudo groupdel 要删除的用户组

删除用户组的话我们需要先su 到bd

bd@clem:/home/xiaohei$ sudo groupdel linux
bd@clem:/home/xiaohei$ su xiaohei
Password:
xiaohei@clem:~$ groups
xiaohei python
xiaohei@clem:~$

使用sudo groupdel 指定的用户组

将指定的用户组进行删除的操作

然后我们使用groups查看当前存在的组,那么linux就不存在了

那么我们之前在linux组中创建的文件的显示就不是linux了

3.文件编辑-Vim的使用

vim分为三种模式:

1.命令模式:打开文件就会进入的模式,通过上下左右键进行光标的移动操作,输入:进入编辑模式

2.输入模式:在命令模式下,输入i键进入输入模式,按Esc退出输入模式,进入到命令模式

3.编辑模式(末行模式):在命令模式输入:就能进入编辑模式

修改配置文件

通过vim进行

配置文件在etc文件中

我们在xiaohei这个用户是不能临时提权的

我们需要先切换到bd用户里面,因为xiaohei 没有sudo 的权限

进入命令模式

sudo vim /etc/passwd

这个页面就是命令模式了,我们在命令模式通过上下左右键进行光标的移动操作

在这个页面我们通过上下左右键位找到xiaohei

找到xiaohei 然后将最后面的sh改成bash

进入输入模式进行内容的修改操作

因为现在是命令模式,我们需要按i键进入到输入模式

按了i之后就变成了输入模式了,下面出现了INSERT了

然后我们就能进行一个修改的操作了

将原先的sh改成bash就实现了我们想要的修改配置文件的操作了

改完之后我们想要退出怎么做呢?

我们按左上角的Esc就能实现退出输入模式的操作了

现在我们改完了,想要退出这个页面进入编辑模式我们改怎么做呢?

进入编辑模式

我们在命令模式输入冒号:进入编辑模式

我们在命令模式输入:进入编辑模式的时候我们能选择做一些小操作

q---退出(在没有对文件进行内容改动的情况下)

q!---强制退出(在对文件进行了改动,但是不想保存改动的内容)

wq---保存退出(在文件进行了改动,并且要保存的情况下使用)

我们现在已经将sh修改为了bash了

那么我们就需要进行一个保存的操作了

那么我们如何做呢?

那么我们就需要输入:wq

因为我们改动了并且需要进行保存的操作

在这里输入wq进行回车的操作

我们就回到了原先的界面了

使用vim对t2.txt这个文件进行编辑操作

进入命令模式

我们输入i进入输入模式,在书写完自己的文之后,我们如何退出这个页面呢?

我们先按左上角的Esc

然后输入冒号:

然后输入exit直接退出这个页面

然后我们使用cat就能查到我们刚刚在这个文件里面写入的代码了

xiaohei@clem:~$ vim t2.txt
xiaohei@clem:~$ cat t2.txt
print(123)

xiaohei@clem:~$

必须在命令模式进行命令的输入

我们在使用vim进入到xuanxuan.txt的编辑模式后,我们在其中一行点击yy,这一行的内容就被复制下来了

然后在另一行点击p,那么就在这里粘贴我们之前复制的那行的文本了

寄存器

我们先输入冒号然后输入reg

我们就能查看寄存器内容

使用dd可以删除行

4.查找命令

命令搜索

使用whereis进行搜索命令的位置和帮助文档的位置

bd@clem:~$ vim xuanxuan.txt
bd@clem:~$ 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

如果单纯的只是想要搜索位置的话,我们可以使用上which

bd@clem:~$ which vim
/usr/bin/vim

在 Linux 系统中,命令搜索是一个常见的任务,尤其是当你需要找到特定的命令或者了解命令的用法时。以下是一些常用的方法来搜索 Linux 命令:

  1. 使用 man 命令man 是 "manual" 的缩写,它提供了一个在线帮助系统,你可以使用它来查找命令的手册页。
man command_name
  1. 使用 whatis 命令whatis 命令提供了一个快速的方式来查看命令的简短描述。
whatis command_name
  1. 使用 apropos 命令apropos 命令可以在手册页的名称和简短描述中搜索关键词。
apropos search_keyword
  1. 使用 whereis 命令whereis 命令用于定位二进制、源和手册页文件的位置。
whereis command_name
  1. 使用 which 命令which 命令显示给定命令的绝对路径。
which command_name
  1. 使用 type 命令type 命令用于显示命令的类型,比如是内置命令、别名还是可执行文件。
type command_name
  1. 使用 history 命令history 命令可以查看你之前输入的命令历史,有时候你可以在这里找到你之前使用过的命令。
history | grep search_keyword
  1. 使用 find 命令find 命令可以在文件系统中搜索文件和目录,可以用来查找命令的可执行文件。
find / -type f -name command_name
  1. 使用 grep 命令grep 命令可以用来搜索包含特定文本的文件,你可以用它来搜索包含命令用法的文件。
grep -r "command_name" /path/to/search
  1. 使用 alias 命令: 如果你设置了命令的别名,alias 命令可以显示别名的定义。
alias command_name
  1. 使用 update-alternatives 命令: 在某些 Linux 发行版中,update-alternatives 用于管理软件的多个版本,可以用来查找命令的不同版本。
update-alternatives --list command_name
  1. 使用 locate 命令locate 命令使用预建的数据库来查找文件,可以快速定位命令的位置。
locate command_name

这些方法可以帮助你在 Linux 系统中有效地搜索命令。记得在使用这些命令时,你可能需要根据你的具体需求调整搜索参数。

find命令

find命令格式:find [-path] -options

path就是我们要查找的目录,默认是当前目录

以下是 find 命令的归纳总结:

find 命令格式:

find [path] -options
  • path: 要查找的目录,默认是当前目录。

  • options: 用于指定查找的条件。

常用选项:

  1. -name: 按文件名的某种规则查找。

  2. -type: 按文件类型查找。常用值:

  • f:普通文件

  • d:目录

  1. -size: 按文件大小查找。

  2. -exec: 执行命令。假设 find 指令的回传值为 True,就执行该命令。

  3. -print: 输出查找结果。假设 find 指令的回传值为 True,就将文件或目录名列出到标准输出,默认格式是 ./ 开头的相对路径。

通配符:

  • *:匹配任意内容。

  • ?:匹配任意一个字符。

  • []:匹配任意一个中括号内的字符。


这是 find 命令的基本结构和常见选项,帮助你进行文件和目录的灵活查找。

用的比较多的是前三项

线下我们想查看当前文件夹下的所有py文件

bd@clem:~$ find -name '*.py'

查询之后我们能看到很多的隐藏的py文件

find -name '*.py'

寻找全部(*)的文件中name是.py结束后缀的文件

当前文件夹所有的py文件

进行txt文件的查找

这个*是通配符

我们查找普通的目录--就是这里的文件夹

find -type d

d是目录的意思

bd@clem:/home/xiaohei$ find -type d
.
./jianyi
bd@clem:/home/xiaohei$

找出当前目录中大小为0的文件

bd@clem:/home/xiaohei$ find -size 0
./t3.txt
bd@clem:/home/xiaohei$

查找当前目录大小为10的内容

但是这里我们是没有的

grep命令

您上传的图片内容为有关 grep 命令的选项说明,以下是该内容的归纳总结:

grep 命令及选项说明:

  • 命令格式grep [选项] 文件

  • 常用选项

  • -c:计算符合样本样式的行数。

  • -E:将样本样式扩展为普通表示法(启用扩展正则表达式)。

  • -i:忽略字母大小写的差别。

  • -n:在显示符合样式的行前,标示该行的编号。

  • -s:不显示错误信息。

  • -v:反转查找,显示不符合样式的行。

  • -w:只显示完全匹配的行。

  • -x:只显示完全符合的行。

  • -o:只输出文件中匹配到的部分。

这些选项帮助在文本中进行更精确的查找和过滤。

grep参数 正则表达式 查找的文件

我们先创建一个1.py文件,里面写上几句代码

然后将文件拖到bd用户的文件夹里面

我们先使用cat查看里面的内容

bd@clem:/home/xiaohei$ cd /home
bd@clem:/home$ ls
bd  xiaohei
bd@clem:/home$ cd bd
bd@clem:~$ ls
1.py  68  environment  kaizi  kk  py_case  xuanxuan.txt
bd@clem:~$ cat 1.py
print(123)

def test():
    print(12)

for i in range(1,5):
    print(i)

test()

然后我们使用grep进行符合条件的内容的查找了

现在我们查找的是文件中print的数据行

bd@clem:~$ grep 'print' 1.py
print(123)
    print(12)
    print(i)

那么就会将print的语句打印出来

现在我们想查看文件中含有冒号的句子

]

bd@clem:~$ grep ':' 1.py
def test():
for i in range(1,5):
bd@clem:~$

那么我们循环和函数后面都带有冒号,那么都会在这里显示出来

-n 查看符合条件的语句在多少行

现在我们想看这上面的两个符合条件的句子在多少行,那么我们就需要进行参数的添加操作了

-n的添加可以看行数

bd@clem:~$ grep ':' 1.py
def test():
for i in range(1,5):
bd@clem:~$ ^C
bd@clem:~$ grep -n ':' 1.py
3:def test():
6:for i in range(1,5):
bd@clem:~$

可以看到前面加上了行数,第几行的数据

-c 查看有几个符合参数的

如果想看这个文件中有几个匹配项的话可以使用参数-c进行查看的

bd@clem:~$ grep -c ':' 1.py
2
bd@clem:~$

-v 反向查找---将不符合条件的内容筛选出来

bd@clem:~$ cat 1.py
print(123)

def test():
    print(12)

for i in range(1,5):
    print(i)

test()
bd@clem:~$ grep 'print' 1.py
print(123)
    print(12)
    print(i)
bd@clem:~$ ^C
bd@clem:~$ ^C
bd@clem:~$ ^C
bd@clem:~$ grep ':' 1.py
def test():
for i in range(1,5):
bd@clem:~$ ^C
bd@clem:~$ grep -n ':' 1.py
3:def test():
6:for i in range(1,5):
bd@clem:~$ ^C
bd@clem:~$ grep -c ':' 1.py
2
bd@clem:~$ ^C
bd@clem:~$ grep -v ':' 1.py
print(123)

    print(12)

    print(i)

test()
bd@clem:~$

xargs

bd@clem:/home$ cd bd
bd@clem:~$ ls
1.py  68  environment  kaizi  kk  py_case  xuanxuan.txt
bd@clem:~$ find -name '1.py' | xargs rm
bd@clem:~$ ls
68  environment  kaizi  kk  py_case  xuanxuan.txt
bd@clem:~$

find -name '1.py' | xargs rm

对于这个指令来说的话,我们利用前面将1.py这文件找到,然后给到后面进行指定的命令

我们这里的命令就是删除操作

然后我们回车,这个文件就被删除了

我们这里就是指定删除命令

bd@clem:~$ cd py_case
bd@clem:~/py_case$ ls
kaikai  kaikai.py  t  t1.py  test.py
bd@clem:~/py_case$ find -name '*.py' | xargs ls -l
-rw-rw-r-- 1 bd bd 10 Sep 16 12:08 ./kaikai.py
-rw-rw-r-- 1 bd bd 33 Sep 10 10:05 ./t1.py
-rw-rw-r-- 1 bd bd  0 Sep 10 10:05 ./test.py
bd@clem:~/py_case$

我们利用find命令找到当前目录所有的.py文件,然后利用xargs进行命令的执行,我们执行的命令是ls -l就是查看文件的所有信息

然后我们回车,这个目录直线的所有.py文件的信息就显示出来了

一定要有这个竖线进行分割,右边执行的命令加在左边找到的文件上,

5.权限管理

权限的解释

-rw-rw-r--

第一个符号:-为文件 d为目录(文件夹)l为链接文件

- 为文件
d 为目录(文件夹)
l 为链接文件

第二个到第四个字符:所有者(u)的权限

第五个到第七个字符:所属组(g)的权限

第八个到第十个字符:其他用户(o)的权限

这几个字符关乎到不同的用户有着不同的增删改查的操作

权限指对文件进行读写执行的操作

还能通过数字进行表示

r (4)可读

w(2) 可写

x (1)可执行

所有者(u)

所属组(g)

其他用户(o)

-表示没有权限

xiaohei@clem:~$ mkdir jianyi
xiaohei@clem:~$ ls -l
total 8
drwxrwxr-x 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-r-- 1 xiaohei xiaohei    0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei    1005    0 Sep 16 21:03 t3.txt

前面的rwx是我们的权限,可读可写可执行

后面的是其他用户的权限,只能读和执行,是不能进行写的

我们这个jianyi是xiaohei用户创建的,那么我们切换到bd用户,然后cd到jianyi用户里面,我们进行文件的创建,然后回车,发现报错了,说明我们只能看只能读,但是不能对这个文件夹或者是在这个文件夹里面进行一系列的操作

就是jianyi这个文件夹是xiaohei这个用户创建的,只有xiaohei这个用户才能对jianyi 这个文件夹进行一系列的操作---增删改查,

其他的用户只能看,不能对这个文件夹做出任何的改动

权限的修改只有文件的拥有者和root用户才有改变文件的权限

从下面我们知道rwx可以通过数字进行表示

那么我们现在想要

读写:

  • rw-

  • 6 (r是4,w是2,那么加起来就是6)

读、可执行:

  • r-x

  • 5 (r是4,x是1,加起来就是5)

读写、可执行

  • rwx

  • 7 (所有权限)

没有权限


  • 0

我们对其他用户创建的文件进行vim操作的时候是不行的,因为我们只有读的权限

这个报错原因:对只读文件进行修改

改变权限 sudo chmod 对什么用户(字母表示)+、-(添加权限或者删除权限)操作(r w x) 要添加权限的文件名字

主要是改变其他用户对这个文件的权限

添加权限---对jianyi这个文件添加可写的操作

sudo chmod 对什么用户(字母表示)+操作(r w x) 要修改的文件名字

现在我们能看的到jianyi对于其他用户来说的话只有r-x的权限 ,就是只能看和读不能写

现在我们想用bd用户来对xiaohei用户创建的文件夹进行文件的添加操作

那么我们就需要给其他的用户添加一个可写的操作

我们先sudo进行提权的操作,然后使用chmod进行操作

o是其他用户的表示

+w表示添加一个可写的操作

最后面就是给那个文件进行权限的修改

bd@clem:/home/xiaohei$ sudo chmod o+w jianyi
[sudo] password for bd:
bd@clem:/home/xiaohei$ ls -l
total 8
drwxrwxrwx 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-r-- 1 xiaohei xiaohei    0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei    1005    0 Sep 16 21:03 t3.txt

这个时候我们就能发现我们现在对于其他用户而言的话,jianyi这个文件是有rwx这三种权限的

那么我们通过了chmod对jianyi这个文件添加了可写的操作

原先是只能进行读和可执行

删除权限---对jianyi这个文件调整为只能读,不能写和执行

bd@clem:/home$ cd /home/xiaohei
bd@clem:/home/xiaohei$ ls
jianyi  t1.txt  t2.txt  t3.txt
bd@clem:/home/xiaohei$ sudo chmod o-wx jianyi
bd@clem:/home/xiaohei$ ls -l
total 8
drwxrwxr-- 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-r-- 1 xiaohei xiaohei    0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei    1005    0 Sep 16 21:03 t3.txt
bd@clem:/home/xiaohei$

sudo chmod o-wx jianyi

这个命令的意思就是:我们先提权(sudo),然后将其他用户(o)对jianyi这个文件的的wx(写和可执行的权限) 删除(-)

那么现在其他用户对xiaohei创建的jianyi这个文件只有读的权限了

添加权限---对文件t1.txt进行修改的操作,加上可写的权限

bd@clem:/home/xiaohei$ cd /home/xiaohei
bd@clem:/home/xiaohei$ ls
jianyi  t1.txt  t2.txt  t3.txt
bd@clem:/home/xiaohei$ sudo chmod o+w t1.txt
bd@clem:/home/xiaohei$ ls-l
ls-l: command not found
bd@clem:/home/xiaohei$ ls -l
total 8
drwxrwxr-- 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-rw- 1 xiaohei xiaohei    0 Sep 16 20:24 t1.txt
-rw-rw-r-- 1 xiaohei python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei    1005    0 Sep 16 21:03 t3.txt
bd@clem:/home/xiaohei$

那么现在t1.txt就变成了可读可写的文件了

那么我们现在就能开始进行写

对于用户组的权限

chgrp--修改文件的所属用户组

chgrp 要修改为哪个组 需要修改的文件

上节课我们将t3的主组删除了,现在我们想将t3切换到别的组该怎么做呢?

xiaohei@clem:~$ chgrp xiaohei t3.txt
xiaohei@clem:~$ ls -l
total 12
drwxrwxr-- 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-rw- 1 xiaohei xiaohei   11 Sep 17 14:50 t1.txt
-rw-rw-r-- 1 xiaohei python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei xiaohei    0 Sep 16 21:03 t3.txt

使用chgrp将t3.txt这个文件的主组设置为xiaohei

我们如果想改变用户组的权限的话,我们通过g就能进行修改的操作了

改变属主

现在我们想将t2.txt的用户从xiaohei改成bd

bd@clem:/home/xiaohei$ ^C
bd@clem:/home/xiaohei$ sudo chown bd t2.txt
[sudo] password for bd:
bd@clem:/home/xiaohei$ ls -l
total 12
drwxrwxr-- 2 xiaohei xiaohei 4096 Sep 17 13:20 jianyi
-rw-rw-rw- 1 xiaohei xiaohei   11 Sep 17 14:50 t1.txt
-rw-rw-r-- 1 bd      python    12 Sep 16 21:31 t2.txt
-rw-rw-r-- 1 xiaohei xiaohei    0 Sep 16 21:03 t3.txt
bd@clem:/home/xiaohei$

在bd用户中使用sudo chown bd t2.txt这个命令

将t2.txt文件的归属用户改成bd

xiaohei用户是改变不了的

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

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

相关文章

如何扫描试卷去除笔迹?4种方法还原整洁试卷

如何扫描试卷去除笔迹?扫描试卷去除笔迹,作为现代学习管理与评估的革新手段,不仅显著提升了试卷的整洁美观度,更在环保和资源再利用层面发挥了积极作用。它使得试卷的保存、分享与复习变得更加便捷高效,减少了纸质资源…

2024年9月12日美国Embarcadero公司正式发布RAD Studio Delphi/C++ Builder 12.2 雅典

Embarcadero 非常高兴地宣布,从今天开始,RAD Studio 12.2 Athens 以及 Delphi 12.2 和 CBuilder 12.2 可供客户使用。RAD Studio 12.2 Athens 版本提供了我们在 IDE 中的第一次生成式 AI 集成、用于 Web 开发的新模板库、基于 C Win64 Clang 的新编译器和…

【MATLAB源码-第266期】基于Matlab的k-means算法遥感图像分割系统仿真。

操作环境: MATLAB 2022a 1、算法描述 基于K-means算法的图像分割在遥感图像处理中的应用十分广泛,尤其是对于需要自动提取特定区域或目标的场景。遥感图像通常包含了大量的地物信息,不同的地物如水体、建筑物、植被等在遥感图像中会表现出…

电脑的主板,内存条插多少合适?

首先,不是插满4条内存就是最好的。 内存条插得多,确实可以扩充容量,提升性能。但是有些低端的主板配低端CPU,插满4条内存,稳定性下降。这里的稳定性包括供电,单独的内存供电容量等。此时CPU会通过降低内存…

为什么使用 Rust over C++ 进行 IoT 解决方案开发

物联网已成为我们日常生活中不可或缺的一部分,设备也越来越智能。随着该领域的扩展,迫切需要保证这些支持软件的设备的安全性、生产力和效率。因此,Rust 编程语言正在成为 IoT 设备开发人员仅次于 C 的第二大热门选择。本文将探讨为什么 Rust…

《机器学习》周志华-CH7(贝叶斯分类)

7.1贝叶斯决策论 对分类任务而言,在所有相关概率已知的理想情形下,贝叶斯决策论考虑如何基于这些概率核误判损失来选择最优的类别标记。 R ( x i ∣ x ) ∑ j 1 N λ i j P ( c j ∣ x ) \begin{equation} R(x_{i}|x)\sum_{j1}^{N}\lambda_{ij}P(c_{j}…

【C++】vector详解,模拟实现

目录 1. vector的介绍 2. vector的使用 2.1 构造函数 2.2 遍历方式 2.3 reserve与resize 2.4 shrink_to_fit 2.5 insert,erase,find 3. vector模拟实现 3.1 初始结构 3.2 析构函数 3.3 获取容量和元素个数 3.4 扩容reserve 3.5 resize改变…

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介: 最新简洁大方的自动发卡网站源码,它就是鲸发卡v11.61系统源码,它是修复版。 说到鲸发卡系统,鲸发卡系统在发卡圈很多人都知道的,它是市面最好发卡系统之一,操作起来简单得很,界面也…

【数据结构】排序算法---快速排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 递归版本代码实现5.1 hoare版本5.2 挖坑法5.3 lomuto前后指针 6. 优化7. 非递归版本代码实现结语 1. 定义 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 O ( n l o g n ) Ο(nlogn) …

在 Windows 上恢复已删除的 PDF 文件的最佳方法

如果您不小心删除了 PDF 文件或由于系统突然崩溃而无法再找到它们,本指南介绍了恢复已删除文件的最佳方法。 帖子中列出的方法简单、有效且可行。我们在列出它们之前对其进行了测试。 什么是 PDF,Adobe 将未保存的 PDF 存储在哪里? 自从 Ad…

数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)

目录 一、安装所需的python包二、采用K-NN算法进行缺失值填充2.1可直接运行代码2.2以某个缺失值数据进行实战2.2.1代码运行过程截屏:2.2.2填充后的数据截屏: 三、K 近邻算法 (K-Nearest Neighbors, KNN) 介绍3.1 K 近邻算法定义3.2 K 近邻算法的基本思想…

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件(目录)复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…

六、二分搜索-算法总结

文章目录 六、二分搜索6.1 简介6.2 典型实例 -- 二分查找6.2 模板6.3 常见题目6.3.1 搜索插入位置6.3.2 搜索二维矩阵6.3.3 寻找旋转排序中数组中的最小值6.3.4 寻找旋转排序数组中的最小值 II6.3.5 搜索旋转排序数组6.3.6 搜索旋转排序数组 II 总结 六、二分搜索 6.1 简介 给…

Java或者前端 实现中文排序(调API的Demo)

目录 前言1. 前端2. Java 前言 前端 Vue 中的中文排序通常使用 JavaScript 提供的 localeCompare 方法来比较中文字符串 Java 后端可以使用 Collator 类来实现中文排序 1. 前端 在 Vue 中&#xff0c;使用 localeCompare 来实现中文字符串的排序&#xff1a; <template&…

Skyeye 云智能制造 v3.14.5 发布,ERP 商城

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

SAM 2: Segment Anything in Images and Videos

SAM2: 在图像和视频中分割任何内容 作者 Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu 等 (Meta FAIR) 论文&#xff1a;SAM2: Segment Anything in Images and Videos项目代码&#xff1a;GitHub Repository互动演示&#xff1a;Demo 摘要 SAM2 是一个用于处…

基于51单片机的锅炉温度控制系统PID调节proteus仿真

地址&#xff1a; https://pan.baidu.com/s/17oMgAnUBUKKEVnv5hNRQmQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

招聘数据分析师,HR会考察候选人哪些方面?

数据分析是必须具备深厚的专业技能底蕴&#xff0c;这是最基本的要求&#xff0c;其中包括对数据分析工具和编程语言的精通&#xff0c;以及对数据库管理的实验操作。 在数据分析师的招聘过程中&#xff0c;必须要注重对方掌握的知识&#xff0c;比如数据挖掘数据可视化等先进…

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的&#xff0c;因为压根就不是一个规则。但是他们在内存中…

详解:Tensorflow、Pytorch、Keras(搭建自己的深度学习网络)

这是一个专门对Tensorflow、Pytorch、Keras三个主流DL框架的一个详解和对比分析 一、何为深度学习框架&#xff1f; 你可以理解为一个工具帮你构建一个深度学习网络&#xff0c;调用里面的各种方法就能自行构建任意层&#xff0c;diy你想要的DNN&#xff0c;而且任意指定学习…