20169212《Linux内核原理与分析》第一周作业

实验

使用touch创建文件:

man手册的内容很多,涉及了Linux使用过程中的方方面面,为了便于查找,是做了分册(分区段)处理的,在Research UNIX、BSD、OS X和Linux中,手册通常被分为8个区段:

要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:

man 1 ls

会显示第一区段中的ls命令man页面。

如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用,那么你可以使用--help参数,大部分命令都会带有这个参数,如:

输出图形字符的命令banner:
先使用如下命令安装

$ sudo apt-get update   // 更新最新的套件资讯
$ sudo apt-get install sysvbanner   //安装sysvbanner软件

'-w'参数指定打印宽度,因为我们的环境在屏幕中显示比较小,必须要加上宽度限制:

作业安装toilet:

sudo apt-get install toilet

用户及文件权限管理


输入的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),上面即可看出差别。第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty(表示控制终端)设备而言的。

who 命令其它常用参数的试验:

在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加用户。我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。shiyanlou 用户也属于 sudo 用户组。

下面我们新建一个用户:

如图所示,已经创建成功。
接下来我们切换登陆用户:

ls -l是显示当前目录下文件详细信息,su -l lilei切换登录用户。

用户组:

shiyanlou 用户也可以使用 sudo 命令,为什么这里没有显示在 sudo 用户组里呢?可以查看下 /etc/sudoers.d/shiyanlou 文件,我们在 /etc/sudoers.d目录下创建了这个文件,从而给 shiyanlou 用户赋予了 sudo 权限:

cat 命令用于读取指定文件的内容并打印到终端输出,| sort 表示将读取的文本进行一个字典排序再输出:

-e<范本样式> 指定字符串作为查找文件内容的范本样式

将其它用户加入sudo组:使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限。这里我用 shiyanlou 用户执行 sudo 命令将 djw添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限:


删除用户:

linux文件权限
查看文件权限

ls -l

变更文件所有者

每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx"
修改文件权限

加减赋值操作

'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。

添加一个用户loutest,使用sudo创建文件/opt/forloutest,设置成用户loutest可以读写

新建目录
使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在有时候安装软件,配置安装路径时非常有用):

如果直接使用cp命令,复制一个目录的话,会出现错误。要成功复制目录需要加上-r或者-R参数,表示递归复制

删除文件

删除目录

批量重命名

查看文件

head、tail查看文件

查看文件类型

变量
读取变量的值,使用echo命令和(符号()符号用于表示引用一个变量的值):

在 Shell 中设置一个变量temp=shiyanlou,然后再新创建一个子 Shell 查看temp变量的值:

whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。

如果想要获得更全面的搜索结果可以使用locate命令。

列出 home 目录中,当天(24 小时之内)有改动的文件:

$ find ~ -mtime 0

列出用户家目录下比Code文件夹新的文件:

$ find ~ -newer /home/shiyanlou/Code

zip打包
第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。使用du命令查看打包后文件的大小

设置压缩级别为9和1(9最大,1最小),重新打包,-x是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中:
du命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小。h, --human-readable;d, --max-depth

-e参数可以创建加密压缩包

$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou

Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改

$ zip -r -l -o shiyanlou.zip /home/shiyanlou

使用unzip命令解压缩zip文件

$ unzip shiyanlou.zip

安静模式,将文件解压到指定目录:

$ unzip -q shiyanlou.zip -d ziptest

如果你不想解压只想查看压缩包的内容你可以使用-l参数:

$ unzip -l shiyanlou.zip

tar打包工具

自动去掉路径开头的“/”避免解包到根目录;只是打包没有压缩
-c表示创建一个 tar 包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,比如不能写成tar -fc shiyanlou.tar,可以写成tar -f shiyanlou.tar -c ~。

解包一个文件(-x参数)到指定路径的已存在目录(-C参数):

 tar -xf shiyanlou.tar -C tardir

实验遇到的问题及解决方法

一、已解决问题

1.为什么用shiyanlou账户创建的文件的拥有者会是root?

我猜想因为在创建文件的时候加入了sudo命令,使得该操作是以最高权限进行操作的,而shiyanlou本身并不在root组,所以,我们查看到的拥有者是root而不是shiyanlou。后来又另外创建了额外的两个文件,此次不加入sudo命令,再看文件的属性,就发现拥有者是shiyanlou了,从而验证了之前的猜想。

2.为什么当前目录下的文件不能直接执行,加上./才能执行?

文档告诉我们,我们在 Shell 中输入一个命令,Shell是通过环境变量PATH来进行搜索的,熟悉 Windows 的用户可能知道 Windows 中的也是有这么一个 PATH 环境变量,这个PATH里面就保存了Shell中执行的命令的搜索路径。而PATH中保存的是一些目录路径,通常这一类目录下放的都是可执行文件,当我们在 Shell 中执行一个命令时,系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找,如果存在同名的命令,则执行先找到的那个。“./”代表的是当前目录,所以我们在执行当前目录下我们自己编写的脚本或是编译的可执行文件的时候,不加“./”的话shell就会去PATH环境变量保存的路径依次顺序查找,显然是查找不到的,所以系统会出现错误提示。
如果要让当前目录下的文件不需添加“./”即可运行,只需将“./”加入路径参数PATH中即可,代码如下所示:

export PATH=$PATH:./

(其中冒号作为路径的分隔符,跟Windows系统中 PATH 路径中的分号一样的效果)。但是基于安全性的考虑,系统是不会将“./”加入路径参数的。同样是对安全性的考虑,

export PATH=$PATH:./

的安全性将优于下面的代码很多(因为系统会按照PATH中设定的路径的先后顺序查找,将“./”放在后面,可以让系统先查找原先PATH路径目录中的可执行文件)

export PATH=./:$PATH

参考资料

3.rar打包压缩命令遇到的问题

在按照实验文档做实验的时候,输入

rm *.zip

的时候,出现如下提示
picture
当时就比较疑惑,后来仔细想了想,因为时间原因重新打开的实验环境,所以上一次实验创建的shiyanlou.zip文件已经不存在了,我这次再去删除这个文件,就提示找不到这个文件了。

4.du命令查看目录容量

之前学习的时候,照着文档做,写

du -h -d 0 *.zip ~ | sort

一直没有弄明白这句话具体的意思,只知道“du”是查看目录容量的命令。“-h”是以易读的形式呈现, “-d”是查看深度,然后后面那些代码就不知道什么意思。随着学习的深入和自己上网查询资料,才知道“-d”是查看深度

du -d 0 ~

是查看1级目录的信息

du -d 1 ~

是查看2级。 *.zip表示所有后缀名是 .zip的文件, ~表示主目录。所以,竖线之前的命令表示查看主目录下(1级)所有后缀名为.zip文件的大小
那么,竖线的作用又是什么呢?
经查询,得知那是linux下的管道符号,用法: command1 | command2 ;其功能是把第一个命令command1执行的结果作为command2的输入再执行command2. 所以整句完整的命令就是先找出主目录下(1级)所有后缀名为 .zip文件再排序输出,如图所示picture

关于管道符号的参考:linux shell中的竖线(|)——管道符号

二、未解决问题

在执行

find /etc/ -name interfaces
```的时候虽然返回了文件的位置,可是还弹出了一个权限不够的报错如图所示![](http://images2015.cnblogs.com/blog/1028919/201609/1028919-20160925221816499-848846089.jpg)

  
上网查询了一下,说有可能是当前登录的用户对该文件没有可读或者是可执行的权限造成的,所以去查看该文件的权限

ll /etc/network/interfaces


  发现当前拥有者是root,所属组也是root组,于是我更改了其文件权限以及拥有者,再执行刚刚的寻找命令,发现还是会报权限不够的错误。

  网上还有回答说请使用root用户,鉴于实验平台的原因,无法用root用户登录尝试,**所以此问题未解决!**

  通过此次的linux学习还发现了很多好玩的游戏,比如监视的眼睛等,让自己在Linux学习的历程上不再那么枯燥无聊。
原文地址:https://www.cnblogs.com/Jarvan210/p/5907275.html