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

Linux 系统简介(实验一)

Linux 本身只是操作系统的内核。内核是使其它程序能够运行的基础。它实现了多任务硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本。

Linux 免费且开源,比 Windows 平台要更加安全,兼具图形界面操作和命令行操作。

UNIX 进化史

UNIX 进化史

Linux学习路径

Linux学习路径

基本概念及操作(实验二)

终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登录就是通过不同的 /dev/tty 设备完成的。

Shell 是指“提供给使用者使用界面”的软件(命令解析器),普通意义上就是可以接受用户输入命令的程序,它隐藏了操作系统底层的细节。UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。

Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME)。

快捷键

  • [Tab]:使用Tab键来进行命令补全
  • [Ctrl+c]:强行终止当前程序
  • [Ctrl+d]: 键盘输入结束或退出终端
  • [Ctrl+s]: 暂停当前程序,暂停后按下任意键恢复运行
  • [Ctrl+z]: 将当前程序放到后台运行,恢复到前台为命令fg
  • [Ctrl+a]: 将光标移至输入行头,相当于Home键
  • [Ctrl+e]: 将光标移至输入行末,相当于End键
  • [Ctrl+k]: 删除从光标所在位置到行末
  • [Alt+Backspace]: 向前删除一个单词
  • [Shift+PgUp]: 将终端显示向上滚动
  • [Shift+PgDn]: 将终端显示向下滚动



用户及文件权限管理(实验三)

Linux用户管理

查看用户

who命令其它常用参数

参数 说明
-a 打印能打印的全部
-d 打印死掉的进程
-m 同am i,mom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级

创建用户

root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力。一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里要用到 sudo 命令。

不过使用sudo有两个前提,一是知道当前登录用户的密码,二是当前用户在 sudo 用户组。

用户组

  • 使用 groups 命令
groups zhaoshu
  • 查看 /etc/group 文件
cat /etc/group | sort

cat 命令用于读取指定文件的内容并打印到终端输出;

sort 表示将读取的文本进行一个字典排序再输出。

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

  • 将其它用户加入 sudo 用户组

adduser 和 useradd 的区别是什么?
答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。

  • 删除用户和用户组
sudo deluser zs --remove-home
groupdel zs

Linux文件权限

在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

文件权限格式

文件权限

修改文件权限

  • 二进制数字表示
chmod 600 huawei
ls -alh huawei
  • 加减赋值操作
chmod go-rw huawei //-代表去掉相应的权限
chmod go+rw huawei //+代表增加相应的权限
//g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户)

Linux 目录结构及文件基本操作(实验四)

FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。

第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。

FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:

cd .. :进入上一级目录

cd ~ :进入home目录

pwd :获取当前路径

文件基本操作

新建

  • touch 命令创建空白文件

  • mkdir 命令创建空目录

复制

  • cp 命令(copy)复制一个文件到指定目录
    cp test father/son/grandson
    
  • cp 命令复制目录需要加上 -r 或 -R 参数,表示递归复制

删除

  • rm 命令删除文件,使用 -f 参数强制删除
  • rm命令删除目录需要加上 -r 或 -R 参数

移动和重命名

  • mv 命令移动文件:mv 源目录文件 目的目录
  • mv 命令文件重命名:mv 旧的文件名 新的文件名
  • rename命令批量重命名

查看

  • cat,tac 和 nl 命令查看文件
  • more 和 less 命令分页查看文件
  • head 和 tail 命令查看文件:只查看文件的头几行和尾几行
  • file 命令查看文件的类型

编辑

使用vim编辑器

i 进入插入模式

:wq 保存并退出

:q 退出

:q! 强制退出

作业

环境变量与文件查找(实验五)

环境变量

命令 说明
set 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
Linux 变量可分为两类:

1.永久的:需要修改配置文件,变量永久生效;

2.临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。

/etc/bashrc和/etc/profile分别存放shell 变量和环境变量

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

unset 命令删除环境变量 unset mypath
source 命令来让环境变量立即生效

文件查找

cmatrix数字雨

作业

文件打包与解压缩(实验六)

zip

  • 打包 :zip something.zip something (目录请加 -r 参数)
  • 解包:unzip something.zip
  • 指定路径:-d 参数

tar

  • 打包:tar -cf something.tar something
  • 解包:tar -xf something.tar
  • 指定路径:-C 参数

作业

文件系统操作与磁盘管理(实验七)

  • df 命令查看磁盘的容量:df -h
  • du 命令查看目录的容量: du -h
  • dd 命令转换和复制文件: dd if=/dev/stdin of=/dev/stdout bs=10 count=1
  • dd 命令创建虚拟镜像文件: dd if=/dev/zero of=virtual.img bs=1M count=256
  • mkfs 命令格式化磁盘: sudo mkfs.ext4 virtual.img
  • mount 命令挂载磁盘到目录树: mount -o loop -t ext4 virtual.img /mnt
  • umount 命令卸载已挂载磁盘: sudo umount /mnt
  • fdisk 为磁盘分区: sudo fdisk virtual.img
  • losetup 命令建立镜像与回环设备的关联: sudo losetup /dev/loop0 virtual.img

作业

Linux下的帮助命令(实验八)

  • help:用于显示 shell 内建命令的简要帮助信息
  • man:没有内建与外部命令的区分,显示系统手册页中的内容,这些内容大多数都是对命令的解释信息,还有一些相关的描述
  • info:来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息

Linux任务计划crontab(实验九)

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。

#添加计划任务
crontab -e 

#查看已添加任务
crontab -l 

#删除任务
crontab -r

#确定cron是否成功的在后台启动
ps aux | grep cron
或
pgrep cron 

#查看执行任务命令后再日志中的信息反馈
sudo tail -f /var/log/syslog


命令执行顺序控制与管道(实验十)

顺序执行可以使用 ; 隔开多条命令

有选择的执行命令

  • && 当上一条命令执行结果返回 0 则执行后面的,否则不执行

  • || 当上一条命令执行结果为 ≠0时则执行它后面的命令

#结合 && 和 || 实现一些操作
which cowsay>/dev/null && echo "exist" || echo "not exist"

有选择的执行命令

cut命令

打印字段

# 前五个(包含第五个)
cut /etc/passwd -c -5
# 前五个之后的(包含第五个)
cut /etc/passwd -c 5-
# 第五个
cut /etc/passwd -c 5
# 2 到 5 之间的(包含第五个)
cut /etc/passwd -c 2-5

grep命令

命令格式:grep [命令选项]... 用于匹配的表达式 [文件]...

-r 参数表示递归搜索子目录中的文件

-n 表示打印匹配项行号

-I 表示忽略二进制文件

wc计数命令

# 行数
wc -l /etc/passwd
# 单词数
wc -w /etc/passwd
# 字节数
wc -c /etc/passwd
# 字符数
wc -m /etc/passwd
# 最长行字节数
wc -L /etc/passwd
#统计 /etc 下面所有目录数
ls -dl /etc/*/ | wc -l

sort排序命令

#默认为字典排序
cat /etc/passwd | sort
#反转排序
cat /etc/passwd | sort -r
#特定字段排序,-t参数用于指定字段的分隔符;-k 字段号用于指定对哪一个字段进行排序
cat /etc/passwd | sort -t':' -k 3

简单的文本处理(实验十一)

  • tr 命令可以用来删除一段文本信息中的某些文字。
  • col 命令可以将Tab换成对等数量的空格键,或反转这个操作
  • join 命令将两个文件中包含相同内容的那一行合并在一起
  • paste命令在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开

数据流重定向(实验十二)

管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接

tee 命令可以同时重定向到多个文件,并将信息打印在终端

echo 'hello shiyanlou' | tee hello

exec 命令实现永久重定向

exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到退出当前子shell,或取消exec的重定向
ls
exit
cat somefile

正则表达式基础(实验十三)

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。

  • + 表示前面的字符必须出现至少一次(1 次或多次),例如 goo+gle 可以匹配 gooogle,goooogle 等;
  • ? 表示前面的字符最多出现一次(0 次或 1 次),例如,colou?r,可以匹配 color 或者 colour;
  • * 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),例如,0*42 可以匹配 42、042、0042、00042 等。

Linux下软件安装(实验十四)

# 更新软件源
sudo apt-get update

# 升级没有依赖问题的软件包
sudo apt-get upgrade

# 升级并解决依赖关系
sudo apt-get dist-upgrade

# 不保留配置文件的移除
sudo apt-get purge w3m
# 或者
sudo apt-get --purge remove w3m

# 移除不再需要的被依赖的软件包
sudo apt-get autoremove

#搜索仓库中的软件
sudo apt-cache search softname1 softname2 softname3……

作业

Linux日志系统(实验十七)

常见的日志

  • 系统日志主要是存放系统内置程序或系统内核之类的日志信息如 alternatives.log 、btmp 等等
  • 应用日志主要是我们装的第三方应用所产生的日志如 tomcat7 、apache2 等等

遇到的问题和解决方案

1、vim如何同时编辑多个文件?

在底行模式下输入
:ls查看文件列表
:bp切换上一个文件
:bn切换下一个文件

2、学习数据流重定向部分时发现样例代码有些使用">"有些使用">>",但并未说明之间的区别

浏览其它博客,查看重定向符号说明

  • >或1> 左边的数据覆盖到右边的文件。
  • >>或1>> 左边的数据追加到右边的文件。
  • <或0< 右边的数据覆盖到左边的文件。
  • <<或0<< 右边的数据追加到左边的文件。
  • 2> 将错误信息覆盖到右边的文件。
  • 2>> 将错误信息追加到右边的文件。
  • << EOF是在文件中追加信息

学习参考:

Markdown教程

《Linux基础入门》

Linux重定向符号

原文地址:https://www.cnblogs.com/20209318zs/p/13798706.html