linux基础操作之一

2023-05-16

文章目录

        • 1、基本概念及操作
          • 常用快捷键:
        • 2、用户及文件权限管理
          • 1、Linux 用户管理
            • 1、查看用户:
            • 2、创建账户:
            • 3、用户组
            • 4 删除用户和用户组
            • 5 鲲鹏服务器安装`perf`
            • 6 阿里云服务器安装`perf`
          • 2、Linux 文件权限管理
            • 1 查看文件权限
            • 2 变更文件所有者
            • 3 修改文件权限
        • 3、linux 目录结构与文件的基本操作
          • 1、目录结构
          • 2、Linux 文件的基本操作
            • **复制文件**
            • **复制目录**
            • **重命名文件**
            • **批量重命名**
            • **使用 cat,tac 和 nl 命令查看文件**
            • **使用 more 和 less 命令分页查看文件**
            • **使用 head 和 tail 命令查看文件**
            • 查看文件类型
        • 4、环境变量与文件查找
          • 1、环境变量
            • 0、变量
          • 1、环境变量
            • 2、命令的查找路径与顺序
            • 3、修改和删除已有变量
            • 4、如何让环境变量立即生效
          • 2、搜索文件
            • 1、`whereis`简单快速
            • 2、`locate`快而全
            • 3、`which`小而精
            • 4、`find`精而细
            • 5、轻松一下
            • 6、挑战:寻找文件

1、基本概念及操作

常用快捷键:

在这里插入图片描述
在这里插入图片描述

2、用户及文件权限管理

1、Linux 用户管理
1、查看用户:
$ who am i

# 或者

$ who mom likes

在这里插入图片描述

2、创建账户:

su,su- 与 sudo
su <user> 可以切换到用户 user,执行时需要输入目标用户的密码,
sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su - <user> 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。

1、现在我们新建一个叫 lilei 的用户:

sudo adduser lilei

2、这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:

ls /home

在这里插入图片描述
3、现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:

su -l lilei

在这里插入图片描述
以上是: who am iwhoami 命令的区别。
4、退出当前用户跟退出终端一样,可以使用 exit 命令或者使用快捷键 Ctrl+D

3、用户组

方法一:使用 groups 命令

groups shiyanlou

在这里插入图片描述

其中冒号之前表示用户,后面表示该用户所属的用户组。
默认情况下在 sudo 用户组里的可以使用 sudo 命令获得 root 权限。shiyanlou 用户也可以使用 sudo 命令,为什么这里没有显示在 sudo 用户组里呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我们在 /etc/sudoers.d 目录下创建了这个文件,从而给 shiyanlou 用户赋予了 sudo 权限

方法二:查看 /etc/group 文件

cat /etc/group | sort

//没找到?没关系,你可以使用 grep 命令过滤掉一些你不想看到的结果:
cat /etc/group | grep -E "shiyanlou"

在这里插入图片描述

/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:

group_name:password:GID:user_list

你看到上面的 password 字段为一个 x,并不是说密码就是它,只是表示密码不可见而已。

这里需要注意,如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,这里的 GID 是指用户默认所在组的 GID,可以使用 id 命令查看。比如 shiyanlou 用户,在 /etc/group 中的 shiyanlou 用户组后面是不会显示的。lilei 用户,在 /etc/group 中的 lilei 用户组后面是不会显示的。

将其它用户加入 sudo 用户组

# 注意 Linux 上输入密码是不会显示的
$ su -l lilei
$ sudo ls

使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

1、这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限,首先我们切换回 shiyanlou 用户。

su - shiyanlou

2、当然也可以通过 sudo passwd shiyanlou 进行设置,或者你直接关闭当前终端打开一个新的终端。

groups lilei
sudo usermod -G sudo lilei
groups lilei

3、然后你再切换回 lilei 用户,现在就可以使用 sudo 获取 root 权限了。

4 删除用户和用户组

删除用户是很简单的事:

sudo deluser lilei --remove-home

使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。
删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。

5 鲲鹏服务器安装perf
执行以下命令,备份Euler repo相关文件。
mkdir -p /etc/yum.repos.d/repo_bak/

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/

下载源
curl -o /etc/yum.repos.d/EulerOS-base.repo http://mirrors.myhuaweicloud.com/repo/EulerOS_2_8_base.repo

清空缓冲
yum makecache

安装perf
yum install perf
6 阿里云服务器安装perf

两种安装方法

sudo apt-get install linux-source
cd /usr/src
tar -xjf linux-source-4.15.0.tar.bz2
cd linux-source-4.15.0/tools/perf
make && make install
2、Linux 文件权限管理
1 查看文件权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件类型:

关于文件类型,这里有一点你必需时刻牢记 **Linux 里面一切皆文件**,正因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。
socket:网络套接字,具体是什么,感兴趣的用户可以去学习实验楼的后续相关课程。
pipe 管道,这个东西很重要,我们以后将会讨论到,这里你先知道有它的存在即可。
软链接文件:链接文件是分为两种的,另一种当然是“硬链接”(硬链接不常用,具体内容不作为本课程讨论重点,而软链接等同于 Windows 上的快捷方式,你记住这一点就够了)。

文件权限:

读权限,表示你可以使用 cat <file name> 之类的命令来读取某个文件的内容;
写权限,表示你可以编辑和修改某个文件的内容;
执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

2 变更文件所有者

1、切换到 lilei 用户,然后在 /home/lilei 目录新建一个文件,命名为 iphone11。

su - lilei
pwd
touch iphone11
ls -alh iphone11

2、可见文件所有者是 lilei :现在切换回到 shiyanlou 用户,使用以下命令变更文件所有者为 shiyanlou。

# 需要切换到 shiyanlou 用户执行以下操作
cd /home/lilei
ls iphone11
sudo chown shiyanlou iphone11

现在查看,发现文件所有者成功修改为 shiyanlou。

3 修改文件权限

如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改。文件的权限有两种表示方式:

  1. 方式一:二进制数字表示
    在这里插入图片描述

每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7。
例如我们刚刚新建的文件 iphone11 的权限是 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。

1、为了演示,我先在文件里加点内容

echo "echo \"hello shiyanlou\"" > iphone11

2、然后修改权限:

$ chmod 600 iphone11
$ ls -alh iphone11

3、切换到 lilei 用户,尝试写入和读取操作,可以看到 lilei 用户已经不能读写这个 iphone11 文件了:

  1. 方式二:加减赋值操作
    要完成上述实验相同的效果,你可以:
$ chmod go-rw iphone11

g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。

3、linux 目录结构与文件的基本操作

Linux 的目录与 Windows 的目录的区别,或许对于一般操作上的感受来说没有多大不同,但从它们的实现机制来说是完全不同的。
1、一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘…)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。所以通常 Windows 在使用一段时间后,磁盘上面的文件目录会显得杂乱无章(少数善于整理的用户除外吧)。
2、 然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等。

1、目录结构
  1. FHS 标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)

FHS 定义了两层规范:
第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin/sbin 则应该放置可执行文件等等。
第二层则是针对 /usr/var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。

在这里插入图片描述
关于上面提到的 FHS,这里还有个很重要的内容你一定要明白,FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动(注意,不是不能,学习过程中,不要怕这些),将目录定义为四种交互作用的形态,如下表所示:

在这里插入图片描述

# 因为我们的环境的原因,每次新启动实验会清除系统恢复到初始状态,所以需要手动更新软件包索引,以便我们安装时能找到相应软件包的源。

sudo apt-get update

sudo apt-get install tree
2、Linux 文件的基本操作

使用 touch 命令创建空白文件,关于 touch 命令,其主要作用是来更改已有文件的时间戳的(比如,最近访问时间,最近修改时间),但其在不加任何参数的情况下,只指定一个文件名,则可以创建一个指定文件名的空白文件(不会覆盖已有同名文件),当然你也可以同时指定该文件的时间戳,更多关于 touch 命令的用法,会在下一讲文件搜索中涉及。

还有一点需要注意的是,若当前目录已经创建了一个 test 文件,再使用 mkdir test 新建同名的文件夹,系统会报错文件已存在。这符合 Linux 一切介文件的理念。

若当前目录存在一个 test 文件夹,则 touch 命令,则会更改该文件夹的时间戳而不是新建文件。

复制文件
cp test father/son/grandson
复制目录
cd /home/shiyanlou
mkdir family
cp -r father family
重命名文件

例如将文件“ file1 ”重命名为“ myfile ”:

mv file1 myfile
批量重命名

rename 命令并不是内置命令,若提示无该命令可以使用 sudo apt-get install rename 命令自行安装。

$ cd /home/shiyanlou/

# 使用通配符批量创建 5 个文件:
$ touch file{1..5}.txt

# 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件:
$ rename 's/\.txt/\.c/' *.txt

# 批量将这 5 个文件,文件名和后缀改为大写:
$ rename 'y/a-z/A-Z/' *.c

简单解释一下上面的命令,rename 是先使用第二个参数的通配符匹配所有后缀为 .txt 的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的 .txt 后缀替换为 .c,

使用 cat,tac 和 nl 命令查看文件
#可以加上 -n 参数显示行号:
cat -n passwd
tac -n passwd

# nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。
nl -b a passwd
#这里简单列举它的常用的几个参数:
-b : 指定添加行号的方式,主要有两种:
    -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
    -b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
    -n ln:在行号字段最左端显示
    -n rn:在行号字段最右边显示,且不加 0
    -n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)

你会发现使用这几个命令,默认的终端窗口大小,一屏显示不完文本的内容,得用鼠标拖动滚动条或者滑动滚轮才能继续往下翻页,要是可以直接使用键盘操作翻页就好了,那么你就可以使用下面要介绍的命令。

使用 more 和 less 命令分页查看文件

如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的,比如说 man 手册内部就是使用的 less 来显示内容。其中 more 命令比较简单,只能向一个方向滚动,而 less 为基于 more 和 vi (一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less 的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。

#使用 more 命令打开 passwd 文件:
more passwd
使用 head 和 tail 命令查看文件

这两个命令,那些性子比较急的人应该会喜欢,因为它们一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。还是拿 passwd 文件举例,比如当我们想要查看最近新增加的用户,那么我们可以查看这个 /etc/passwd 文件,不过我们前面也看到了,这个文件里面一大堆乱糟糟的东西,看起来实在费神啊。因为系统新增加一个用户,会将用户的信息添加到 passwd 文件的最后,那么这时候我们就可以使用 tail 命令了:

#显示最后十行
tail /etc/passwd
#甚至更直接的只看一行, 加上 -n 参数,后面紧跟行数
tail -n 1 /etc/passwd

关于 tail 命令,不得不提的还有它一个很牛的参数 -f,这个参数可以实现不停地读取某个文件的内容并显示。这可以让我们动态查看日志,达到实时监视的目的。

查看文件类型
#我们可以使用 file 命令查看文件的类型:
file /bin/ls
#这是一个可执行文件,运行在 64 位平台,并使用了动态链接文件(共享库)。

与 Windows 不同的是,如果你新建了一个 shiyanlou.txt 文件,Windows 会自动把它识别为文本文件,而 file 命令会识别为一个空文件。这个前面我提到过,在 Linux 中文件的类型不是根据文件后缀来判断的。当你在文件里输入内容后才会显示文件类型。
在这里插入图片描述

xeyes
nohup xeyes &
sudo kill -9 [进程号]

4、环境变量与文件查找

1、环境变量
0、变量

在 Shell 中如何创建一个变量,如何给变量赋值和如何读取变量的值呢?这部分内容会在 bash 脚本编程 这门课中详细介绍,这里我简单举例说明一下:

1、使用 declare 命令创建一个变量名为 tmp 的变量:
declare tmp
#其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。

2、使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou。注意,与其他语言不同的是, Shell 中的赋值操作,= 两边不可以输入空格,否则会报错。
# 正确的赋值
tmp=shiyanlou
# 错误的赋值
tmp = shiyanlou

3、读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入):
echo $tmp

注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。

1、使用 declare 命令创建一个变量名为 tmp 的变量:

declare tmp
#其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。

2、使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou。注意,与其他语言不同的是, Shell 中的赋值操作,= 两边不可以输入空格,否则会报错。

# 正确的赋值
tmp=shiyanlou
# 错误的赋值
tmp = shiyanlou

3、读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入):

echo $tmp
1、环境变量

简单理解了变量的概念,就很容易理解环境变量了。环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。
1、在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。
2、Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

在这里插入图片描述
通常我们会涉及到的变量类型有三种:

1、当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
2、Shell 本身内建的变量。
3、从自定义变量导出的环境变量。

也有三个与上述三种环境变量相关的命令:set,env,export。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。详见下表:
在这里插入图片描述
在这里插入图片描述

1、你可以更直观的使用 vimdiff 工具比较一下它们之间的差别:

temp=shiyanlou
export temp_env=shiyanlou
env|sort>env.txt
export|sort>export.txt
set|sort>set.txt

上述操作将命令输出通过管道 | 使用 sort 命令排序,再重定向到对象文本文件中。管道的概念后面我们会学到,现在你知道知道这是什么意思就行了。

2、使用 vimdiff 工具比较导出的几个文件的内容,退出 vimdiff 需要按下 Esc 后输入 :q 即可退出。

vimdiff env.txt export.txt set.txt

关于哪些变量是环境变量,可以简单地理解成在当前进程的子进程有效则为环境变量,否则不是(有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分,我们只要理解它们的实质区别即可)。
3、我们这里用 export 命令来体会一下,先在 Shell 中设置一个变量 temp=shiyanlou,然后再新创建一个子 Shell 查看 temp 变量的值:

temp=shiyanlou #在 Shell 中设置一个变量
echo $temp
zsh #创建子shell,从默认的bash切换到zsh
echo $temp
exit #退出
export temp #导出变量temp为环境变量
zsh
echo $temp

在这里插入图片描述
4、但是问题来了,当你关机后,或者关闭当前的 shell 之后,环境变量就没了啊。怎么才能让环境变量永久生效呢?
永久的:需要修改配置文件,变量永久生效;
临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。
5、这里介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。还有要注意区别的是每个用户目录下的一个隐藏文件:
在这里插入图片描述
这个 .profile 只对当前用户永久生效。因为它保存在当前用户的 Home 目录下,当切换用户时,工作目录可能一并被切换到对应的目录中,这个文件就无法生效。而写在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。

注意:为了与普通变量区分,通常我们习惯将环境变量名设为大写。

2、命令的查找路径与顺序

1、我们在 Shell 中输入一个命令,Shell 是怎么知道去哪找到这个命令然后执行的呢?

这是通过环境变量 PATH 来进行搜索的,熟悉 Windows 的用户可能知道 Windows 中的也是有这么一个 PATH 环境变量。这个 PATH 里面就保存了 Shell 中执行的命令的搜索路径。

查看 PATH 环境变量的内容:

echo $PATH

#输出
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

通常这一类目录下放的都是可执行文件,当我们在 Shell 中执行一个命令时,系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找,如果存在同名的命令,则执行先找到的那个。

2、下面我们将练习创建一个最简单的可执行 Shell 脚本和一个使用 C 语言创建的“ hello world ”程序

1、创建一个 Shell 脚本文件,你可以使用 gedit,vim,sublime 等工具编辑。如果你是直接复制的话,建议使用 gedit 或者 sublime,否则可能导致代码缩进混乱。

cd /home/shiyanlou
touch hello_shell.sh
gedit hello_shell.sh

在脚本中添加如下内容,保存并退出

#!/bin/bash

for ((i=0; i<10; i++));do
   echo "hello shell"
done

exit 0

为文件添加可执行权限,否则执行会报错没有权限:

chmod 755 hello_shell.sh

执行脚本:

cd /home/shiyanlou
./hello_shell.sh

2、创建一个 C 语言“ hello world ”程序:

#include <stdio.h>

int main(void)
{
   printf("hello world!\n");
   return 0;
}

保存后使用 gcc 生成可执行文件:

gcc -o hello_world hello_world.c
#gcc 生成二进制文件默认具有可执行权限,不需要修改

3、在 /home/shiyanlou 家目录创建一个 mybin 目录,并将上述 hello_shell.shhello_world 文件移动到其中:

cd /home/shiyanlou
mkdir mybin
mv hello_shell.sh hello_world mybin/

4、现在你可以在 mybin 目录中分别运行你刚刚创建的两个程序:

cd mybin
./hello_shell.sh
./hello_world

5、回到上一级目录,也就是 shiyanlou 家目录,当再想运行那两个程序时,会发现提示命令找不到,除非加上命令的完整路径,但那样很不方便,如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?
那就要将命令所在路径添加到 PATH 环境变量了。
6、在前面我们应该注意到 PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径:

PATH=$PATH:/home/shiyanlou/mybin
#注意这里一定要使用绝对路径。现在你就可以在任意目录执行那两个命令了(注意需要去掉前面的 ./)。

7、你可能会意识到这样还并没有很好的解决问题,因为我给 PATH 环境变量追加了一个路径,它也只是在当前 Shell 有效,我一旦退出终端,再打开就会发现又失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令?下面我们就来说说后一种方式——让它自动执行。
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。实验楼的环境使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。Shell 的种类有很多,可以使用 cat /etc/shells 命令查看当前系统已安装的 Shell。
我们可以简单地使用下面命令直接添加内容到 .zshrc 中:

echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc`

在这里插入图片描述
上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 > 是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件

3、修改和删除已有变量

1、变量修改
变量的修改有以下几种方式:
在这里插入图片描述
比如我们可以修改前面添加到 PATH 的环境变量,将添加的 mybin 目录从环境变量里删除。为了避免操作失误导致命令找不到,我们先将 PATH 赋值给一个新的自定义变量 mypath:

mypath=$PATH
echo $mypath
mypath=${mypath%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
mypath=${mypath%*/mybin}

2、变量删除
可以使用 unset 命令删除一个环境变量:

unset mypath
4、如何让环境变量立即生效

1、前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:

 cd /home/shiyanlou
source .zshrc

2、source 命令还有一个别名就是 .,上面的命令如果替换成 . 的方式就该是:

. ./.zshrc

3、在使用.的时候,需要注意与表示当前路径的那个点区分开。
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

2、搜索文件

与搜索相关的命令常用的有 whereiswhichfindlocate

1、whereis简单快速
whereis who
whereis find
#这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。

whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。

2、locate快而全

使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。
不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。
注意这个命令也不是内置的命令,在我们的环境中需要手动安装,然后执行更新。

sudo apt-get update
sudo apt-get install locate
sudo updatedb

1、它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件:

locate /etc/sh
#注意,它不只是在 /etc 目录下查找,还会自动递归子目录进行查找。

2、查找 /usr/share/ 下所有 jpg 文件:

locate /usr/share/\*.jpg
#注意要添加 * 号前面的反斜杠转义,否则会无法找到。
3、which小而精

which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。

which man
which nginx
which ping
4、find精而细

find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find 命令强大到,要把它讲明白至少需要单独好几节课程才行,我们这里只介绍一些常用的内容。

1、这条命令表示去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方。命令前面加上 sudo 是因为 shiyanlou 只是普通用户,对 /etc 目录下的很多文件都没有访问的权限,如果是 root 用户则不用使用。

sudo find /etc/ -name interfaces
#注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path][option] [action] 。

在这里插入图片描述
2、列出 home 目录中,当天(24 小时之内)有改动的文件:

find ~ -mtime 0

3、列出用户家目录下比 /etc 目录新的文件:

find ~ -newer /etc
5、轻松一下

《黑客帝国》电影里满屏幕代码的“数字雨”,在 Linux 里面你也可以轻松实现这样的效果,你只需要一个命令 cmatrix 。
1、需要先安装,因为 Ubuntu 没有预装:

sudo apt-get update
sudo apt-get install cmatrix

2、装好之后先不要急着执行,为了看到更好的效果,我们需要先修改终端的主题配色,在终端上面菜单栏中找到[首选项]修改,修改颜色预设为黑底绿字。
在这里插入图片描述
3、然后输入 cmatrix 开始运行。
按下 F11 可以全屏显示。

4、还可以改变代码的颜色:

cmatrix -C red
6、挑战:寻找文件

介绍

有一个非常重要的文件(sources.list)但是你忘了它在哪了,你依稀记得它在 /etc/ 目录下,现在要你把这个文件找出来,然后设置成自己(shiyanlou 用户)可以访问,但是其他用户并不能访问。

目标

1、 找到 sources.list 文件
2、把文件所有者改为自己(shiyanlou)
3、把权限修改为仅仅只有自己可读可写

参考答案

sudo find /etc -name sources.list
sudo chown shiyanlou /etc/apt/sources.list
sudo chmod 600 /etc/apt/sources.list

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux基础操作之一 的相关文章

  • ROS2学习笔记(1)ROS2+docker的配置方法

    ROS2学习笔记 xff08 1 xff09 ros2 43 docker的配置方法 1 前言2 安装docker2 1 docker的发展史2 2 什么是docker2 3 docker的思想2 3 1 集装箱2 3 2 标准化1 运输方
  • ubuntu之更改ubuntu和windows双系统启动顺序

    ubuntu之更改ubuntu和windows双系统启动顺序 背景方法 背景 安装好ubuntu和windows双系统后 xff0c 一般grub引导默认选择第一个为启动项 xff0c 在公司打工还好 xff0c 毕竟要进ubuntu挣钱
  • 【lightDM】组件理解

    前言 LightDM xff08 Light Display Manager xff09 是轻量级 Linux 桌面显示管理器 其目的是成为 X org 的 X Server 的标准显示管理器 LightDM 负责启动 X servers
  • 【机器人学中的状态估计】第一讲

    1 什么是状态估计 xff1f 通过获得传感器的观测值 xff0c 建立观测值到状态量的模型 xff0c 估计出状态量 2 概率密度函数 后验概率 p x y
  • VScode环境下使用git与github远程操作要点记录

    部分内容来源于网络 xff0c 外加了自己的实践 xff0c 记录了一下 文章目录 一 windows上使用git1 官网下载git https git scm com download win 2 创建本地仓库 二 git远程连接gith
  • 【千律】C++基础:TXT文件的创建、写入和读取

    include lt fstream gt include lt iostream gt using namespace std int main 初始化 ifstream iread txt 初始化输入流 ofstream write t
  • Matlab计算福利彩票的中奖概率

    Quez1 计算福彩双色球一等奖的中奖概率 福彩双色球的玩法如下 从编号1 33的红球里任选6个 另外在编号1 16的蓝球里再任选1个 如果选择的红球和蓝球和当期的开奖结果完全一致 顺序可不同 则中一等奖 Analysis 这是一个组合问题
  • 【千律】OpenCV基础:基于梯度的模板匹配

    环境 xff1a Python3 8 和 OpenCV 内容 xff1a 基于梯度的模板匹配 主要关注边缘信息 xff0c 能够较好的识别不同颜色的目标 实现步骤 xff1a 1 给定原图像I和模板T 2 指定差异度 xff08 相似度 x
  • golang使用SM2(SM2withSM3)签名、验签数据

    golang使用SM2签名 验签数据 场景标准密钥签名算法 Start依赖公钥转base64私钥转hex私钥生成公钥生成密钥对Hex私钥转私钥对象base64公钥转公钥对象签名验签 测试 场景 对接招行支付 标准 密钥 私钥 xff1a H
  • 树莓派与pixhawk串口通信

    一 Pixhawk部分 1 读取数据测试 步骤 xff1a 在Firmware src modules中添加一个新的文件夹 xff0c 命名为rw uart在rw uart文件夹中创建CMakeLists txt文件 xff0c 并输入以下
  • 关于pixhawk波特率修改的两种方法

    一 QGC地面站修改 将pixhawk与地面站相连接进入参数设置界面 xff0c 搜索SYS COMPANION参数设置需要的波特率保存设置 二 终端 xff08 Terminal xff09 修改 打开终端 xff0c 进入源码所在Fir
  • gazebo仿真环境搭建

    主要内容 xff1a 安装gazebo配置gazebo运行gazebomavros控制飞机 1安装gazebo 如果已经安装MAVROS可以直接在终端上输入gazebo查看是否已经拥有gazebo xff0c 因为MAVROS中含有gaze
  • Intel Realsense D435i标定详细步骤

    主要介绍Inter D435i深度相机的IMU 相机和IMU与相机外参数标定的过程 其中 IMU使用的是realsense官方文档的教程 相机和外参数使用的是Kalibr的标定方法 本文所介绍过程的所有代码和生成文件资源放在Kalibr工具
  • 在Ubuntu、NVIDIA_TX2下查看CPU/GPU/内存使用率

    一 Ubuntu 1 cpu 内存 1 使用top命令 top 2 更直观的工具htop sudo apt get install htop htop 2 gpu 用nivida smi命令 xff0c nvidia smi 这个命令只能显
  • 基于RT-Thread OS的 迷你时钟项目

    基于RT Thread OS的 迷你时钟项目 近期在自学RT Thread OS 这是一个国内团队开发的实时物联网操作系统 xff0c 具有组件完整丰富 高度可伸缩 简易开发等优点 RTOS官网 参考学习文档 作品演示 基于RT Threa
  • C++_namespace命名空间

    catalog 内嵌enum class namespace命名冲突多个同名namespace的原理开头 变量 函数前命名空间前 规范写法作用域Base定义顺序 内嵌 c 43 43 17后 支持 namespace A B C 写法 en
  • c++_exception异常,try和catch,noexcept,throw

    catalog noexcept 函数base自定义异常类noexcept 和 throw noexcept 函数 bool f 61 noexcept func 判断 func 函数 是否有标记noexcept base throw 是
  • SQL4种匹配规则

    SQL提供了四种匹配模式 xff1a 1 表示任意0个或多个 字符 如下语句 xff1a Select FROM user Where name LIKE 39 三 39 将会把name为 张三 xff0c 三脚猫 xff0c 唐三藏 等等
  • SDN的HUB实验

    SDN的hub实验 首先需要搭建ryu控制器环境和mininet环境 使用winscp将hub的py代码上传到服务器啊贝云 使用命令搭建拓扑环境 mn topo 61 single xff0c 3 controller 61 remote
  • CSDN上代码块背景颜色的设置

    CSDN上代码块背景颜色的设置 今天发博客的时候发现代码块背景的颜色是白色的 xff0c 我想要改成黑色的 xff0c 于是就研究了一下怎么修改代码块背景的颜色 xff0c 修改代码块的背景颜色只要4步 1 点击个人头像打开管理博客 2 在

随机推荐

  • 模拟电路和数字电路PCB设计的区别

    本文就旁路电容 电源 地线设计 电压误差和由PCB布线引起的电磁干扰 EMI 等几个方面 xff0c 讨论模拟和数字布线的基本相似之处及差别 工程领域中的数字设计人员和数字电路板设计专家在不断增加 xff0c 这反映了行业的发展趋势 尽管对
  • k8s部署资源服务的注意事项

    前言 为了k8s的资源服务能够高效 稳定 健康的运转 xff0c 需要对其进行相应的设置 资源类别 声明每个Pod的resource 在使用k8s集群时 xff0c 经常会遇到 xff1a 在一个节点上调度了太多的Pod xff0c 导致节
  • OCR中有见解的评论

    一 关于人脑与计算机识别的区别 电脑识别最主要是依赖简单的线性分类问题 把20 20个像素直接展成400维向量 xff0c 分类之 虽然现在的算法越来越常见地引入了非线性 xff0c 但是这种非线性的复杂度还是远没法和人脑相比 人脑则是多层
  • 梯度响应图——针对无纹理目标的检测

    题目 xff1a Gradient response maps for real time detection of textureless objects amp emsp xff1b gt amp ensp xff1b gt amp n
  • 深度学习技术在语义分割中的应用综述

    论文题目 xff1a A Review on Deep Learning Techniques Applied to Semantic Segmentation 博客园上的翻译 知乎上的提取 CSDN上的总结1 CSDN上的总结2
  • A Survey on Optical Character Recognition System 光学字符识别系统综述

    论文题目 xff1a 2017 A Survey on Optical Character Recognition System 摘要 光学字符识别 xff08 OCR xff09 是近年来研究的热点 它被定义为将文档图像数字化为其组成字符
  • 数据结构算法与解析(STL版含源码)

    文章目录 第1章 线性表1 1 顺序存储结构1 1 1 顺序表1 1 2 vector线性表 STL的顺序存储结构 1 2 链式存储结构1 2 1 单链表1 2 2 双向循环链表1 2 3 list线性表 STL的链式存储结构 1 3 静态
  • C++后台开发面试题集绵

    文章目录 一 C 43 43 语言1 引用和指针的区别 xff1f 3 C 43 43 中指针参数传递与引用参数传递 xff1f 4 形参与实参的区别 xff1f 5 static的用法和作用 xff1f 6 静态变量什么时候初始化 xff
  • 计算机网络

    文章目录 第一章 概述小结局域网 广域网 Internet网络通信 xff08 OSI模型 xff09 xff1a 计算机网络的性能指标 xff1a 第二章 物理层小结物理层的基本概念数据通信的基础知识基带与带通 xff1a 常用编码 xf
  • mysql使用和优化

    取当天0点0分 xff0c 下一天0点0分 UNIX TIMESTAMP获取时间戳 timestamp获取时间 select UNIX TIMESTAMP date sysdate timestamp adddate date sysdat
  • 数据库系统

    文章目录 第1章 概论第2章 基本知识与关系模型1 数据库 数据库管理系统 数据库系统什么是数据库什么是数据库系统什么是数据库管理系统DBMS小结 2 数据库系统的结构抽象与演变数据库系统的标准结构3 数据模型4 数据库系统的演变与发展5
  • 操作系统(学习笔记)

    文章目录 1 什么是操作系统2 操作系统的启动3 操作系统的接口4 系统调用的实现5 操作系统的历史6 我们的任务8 CPU管理9 多进程图像1 读写PCB xff0c OS中最重要的结构 xff0c 贯穿始终 2 要操作寄存器完成切换 x
  • 2020华为软挑总结

    文章目录 一 热身赛编程闯关 xff1a 评价标准 xff1a 问题分析 二 初赛问题描述评价标准 xff1a 问题分析思路一 xff1a 思路二 xff1a 思路三 xff1a 针对思路三的提速 xff1a 最终结果 xff1a 三 co
  • Linux命令总结之目录命令

    文章目录 Linux 目录命令1 96 ls 96 命令2 96 cd 96 命令3 96 pwd 96 命令4 96 mkdir 96 命令5 96 rm 96 命令6 96 mv 96 命令7 96 cp 96 命令8 96 cat 9
  • Markdown 公式指导手册

    Markdown 公式指导手册
  • Linux学习

    文章目录 一 基础入门二 Linux 命令总结一 Linux 目录命令 https blog csdn net weixin 42715287 article details 105825021 二 Linux 文件管理命令 https e
  • Linux命令总结之文件管理命令

    文章目录 二 Linux 文件管理命令1 96 which 96 命令到底什么是命令 xff1f 2 96 whereis 96 命令3 96 locate 96 命令4 96 find 96 命令5 96 xargs 96 命令 二 Li
  • Linux命令总结之文本编辑命令

    文章目录 Linux 文本编辑命令1 96 wc 96 命令2 96 grep 96 命令3 96 正则表达式 96 命令4 96 cut 96 命令5 96 paste 96 命令6 96 tr 96 命令7 96 sort 96 命令8
  • Linux命令总结之Linux 磁盘管理命令

    文章目录 Linux 磁盘管理命令1 96 df 96 命令2 96 du 96 命令3 96 time 96 命令 Linux 磁盘管理命令 1 df命令 linux 中 df 命令的功能是用来检查 linux 服务器的文件系统的磁盘空间
  • linux基础操作之一

    文章目录 1 基本概念及操作常用快捷键 xff1a 2 用户及文件权限管理1 Linux 用户管理1 查看用户 xff1a 2 创建账户 xff1a 3 用户组4 删除用户和用户组5 鲲鹏服务器安装 96 perf 96 6 阿里云服务器安