zoukankan      html  css  js  c++  java
  • 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重定向符号

  • 相关阅读:
    MetaNamespaceKeyFunc
    golang dlv 调式成员函数
    golang 编译 添加debug gdb
    code-generator
    k8s 自定义informer
    kube-batch ——pod 和task
    kubernetes-handbook informer
    kube batch scheduler
    k8s-scheduler-extender-example
    volcano 快速开始
  • 原文地址:https://www.cnblogs.com/20209318zs/p/13798706.html
Copyright © 2011-2022 走看看