$ who am i
# 或者
$ who mom likes
su,su- 与 sudo
su
可以切换到用户 user,执行时需要输入目标用户的密码,
sudo
可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su -
命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
1、现在我们新建一个叫 lilei 的用户:
sudo adduser lilei
2、这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:
ls /home
3、现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:
su -l lilei
以上是: who am i
和 whoami
命令的区别。
4、退出当前用户跟退出终端一样,可以使用 exit
命令或者使用快捷键 Ctrl+D
。
方法一:使用 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 权限了。
删除用户是很简单的事:
sudo deluser lilei --remove-home
使用
--remove-home
参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。
删除用户组可以使用groupdel
命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
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
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
关于文件类型,这里有一点你必需时刻牢记
**Linux 里面一切皆文件**
,正因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。
socket:
网络套接字,具体是什么,感兴趣的用户可以去学习实验楼的后续相关课程。
pipe 管道
,这个东西很重要,我们以后将会讨论到,这里你先知道有它的存在即可。
软链接文件:
链接文件是分为两种的,另一种当然是“硬链接”(硬链接不常用,具体内容不作为本课程讨论重点,而软链接等同于 Windows 上的快捷方式,你记住这一点就够了)。
文件权限:
读权限
,表示你可以使用cat
之类的命令来读取某个文件的内容;
写权限
,表示你可以编辑和修改某个文件的内容;
执行权限
,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件
,而一个目录要有写权限才允许在其中创建其它文件
,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
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。
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改。文件的权限有两种表示方式:
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 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 文件了:
$ chmod go-rw iphone11
g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。
Linux 的目录与 Windows 的目录的区别,或许对于一般操作上的感受来说没有多大不同,但从它们的实现机制来说是完全不同的。
1、一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘…)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。所以通常 Windows 在使用一段时间后,磁盘上面的文件目录会显得杂乱无章(少数善于整理的用户除外吧)。
2、 然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等。
FHS 定义了两层规范:
第一层是,/
下面的各个目录应该要放什么文件数据,例如/etc
应该放置设置文件,/bin
与/sbin
则应该放置可执行文件等等。
第二层则是针对/usr
及/var
这两个目录的子目录来定义。例如/var/log
放置系统日志文件,/usr/share
放置共享数据等等。
关于上面提到的 FHS,这里还有个很重要的内容你一定要明白,FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动(注意,不是不能,学习过程中,不要怕这些),将目录定义为四种交互作用的形态,如下表所示:
# 因为我们的环境的原因,每次新启动实验会清除系统恢复到初始状态,所以需要手动更新软件包索引,以便我们安装时能找到相应软件包的源。
sudo apt-get update
sudo apt-get install tree
使用 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,
#可以加上 -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 位)
你会发现使用这几个命令,默认的终端窗口大小,一屏显示不完文本的内容,得用鼠标拖动滚动条或者滑动滚轮才能继续往下翻页,要是可以直接使用键盘操作翻页就好了,那么你就可以使用下面要介绍的命令。
如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的,比如说 man 手册内部就是使用的 less 来显示内容。其中 more 命令比较简单,只能向一个方向滚动,而 less 为基于 more 和 vi (一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less 的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。
#使用 more 命令打开 passwd 文件:
more passwd
这两个命令,那些性子比较急的人应该会喜欢,因为它们一个是只查看文件的头几行(默认为 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 [进程号]
在 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
简单理解了变量的概念,就很容易理解环境变量了。环境变量的作用域比自定义变量的要大,如 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
,在最后加上你想添加的环境变量就好啦。
注意:为了与普通变量区分,通常我们习惯将环境变量名设为大写。
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
int main(void) { printf("hello world!\n"); return 0; } 保存后使用 gcc 生成可执行文件:
gcc -o hello_world hello_world.c #gcc 生成二进制文件默认具有可执行权限,不需要修改
3、在
/home/shiyanlou
家目录创建一个mybin
目录,并将上述hello_shell.sh
和hello_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`
上述命令中>>
表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>
是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件
。
1、变量修改
变量的修改有以下几种方式:
比如我们可以修改前面添加到 PATH 的环境变量,将添加的 mybin 目录从环境变量里删除。为了避免操作失误导致命令找不到,我们先将 PATH 赋值给一个新的自定义变量 mypath:
mypath=$PATH
echo $mypath
mypath=${mypath%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多个任意字符
mypath=${mypath%*/mybin}
2、变量删除
可以使用 unset 命令删除一个环境变量:
unset mypath
1、前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:
cd /home/shiyanlou
source .zshrc
2、source
命令还有一个别名就是 .
,上面的命令如果替换成 .
的方式就该是:
. ./.zshrc
3、在使用.
的时候,需要注意与表示当前路径的那个点区分开。
注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
与搜索相关的命令常用的有 whereis
,which
,find
和 locate
。
whereis
简单快速whereis who
whereis find
#这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。
whereis
只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。
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
#注意要添加 * 号前面的反斜杠转义,否则会无法找到。
which
小而精which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。
which man
which nginx
which ping
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
《黑客帝国》电影里满屏幕代码的“数字雨”,在 Linux 里面你也可以轻松实现这样的效果,你只需要一个命令 cmatrix 。
1、需要先安装,因为 Ubuntu 没有预装:
sudo apt-get update
sudo apt-get install cmatrix
2、装好之后先不要急着执行,为了看到更好的效果,我们需要先修改终端的主题配色,在终端上面菜单栏中找到[首选项]
修改,修改颜色预设为黑底绿字。
3、然后输入 cmatrix
开始运行。
按下 F11 可以全屏显示。
4、还可以改变代码的颜色:
cmatrix -C red
介绍
有一个非常重要的文件(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