• 20155303狄惟佳预备作业三Linux学习笔记


    20155303狄惟佳预备作业三Linux学习笔记

    初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对“人人为我,我为人人”软件世界的追求。Ubuntu产生于一个软件逐渐脱离硬件成为独立产业的时代,很多软件逐渐只提供二进制代码而不提供源代码。出于工作需要,Stallman决心创建一套完全自由的操作系统,从而创造自由的软件世界。经过全世界有志之士的共同努力,Linux应运而生,并不断被修改完善。开源,便是Ubuntu备受青睐的原因。

    初识Ubuntu

    Ubuntu系统通常会在每年4月和10月各发布一个新的版本。进入下载页面,选择16.04版本下载安装即可。安装好的界面如图:image

    • 答疑解惑:Linux中的最高权限

    之前听说过Linux的root用户,权力非常大,让我想起了Windows系统里的administrator,出于对两者区别的好奇,我上网学习了相关的知识。

    • administrator

    administrator看似是Windows系统下权力最高者,实则不然。Windows系统本身会进行自我保护,即使是管理者administrator的权利也不会大过系统本身的权力。尝试将Windows系统C:WINDOWS下的regedit.exe删除(我抱着半信半疑的态度尝试时真的心惊胆战!),但刷新几次之后又复原了。所以,Windows系统下的权力最高者是SYSTEM本身。

    • root

    在Ubuntu下(或者其他Linux系统)权力最高者,毋庸置疑是root!root在系统中拥有真正至高无上的权力,甚至可以运行rm -rf删除系统中所有文件(危险动作,自觉放弃了尝试...)。而Windows下是不可能在系统运行时格式化系统盘的。

    • 两者为什么不同

    administrator与root有这些不同,我认为归根到底是两个操作系统的理念不同。Linux作为一个面向广大程序设计者的操作系统,其优势在于每个人都可以获得这个系统全部的源代码,并根据自己的需求进行修改。这种开放的原则使得系统本身为人类所创造,并可以为人类所任意修改。我想这也是开源精神一种体现吧。

    命令行的使用

    使用Ctrl+Alt+t打开终端,看到如图所示的窗口image

    这种图形界面下的命令行窗口,叫做伪终端。操作系统和用户在这个窗口里使用命令进行交流。通过查阅资料了解到,之所以称为伪终端,是因为它只是负责提供一个输入命令的交互界面,真正处理命令的是Shell。

    在Ubuntu系统中,默认的Shell是bash,比如第一行出现的“shiyanlou:~/ $”就是bash的语言。其中,“:”后面,“$"前面是当前所在目录,“~”代表用户的家目录,也就是“/home/<用户名>”这个位置。“$”则是命令提示符,在“$"后面输入命令即可。如果使用root登录终端,提示符为"#",但Ubuntu系统默认禁用root用户,所以一般看不到#提示符。

    Shell使用初探

    一、目录结构

    ①当前目录与家目录

    运行ls命令可查看当前目录下的所有文件。用户每次打开终端时,默认进入家目录里。命令行下可以使用~代表当前用户的家目录。

    ②进入指定目录

    使用$ cd <路径>命令进入任意一个目录中,只要有权限即可。

    ③绝对路径与相对路径

    绝对路径从“/”这个最根本的位置开始叙述,直接但有时比较费时。cd同时相对路径,即从所在位置开始进行描述。使用时还要参考具体情况。如果不清楚所在目录,可以输入pwd命令查询。

    二、重要的Tab命令补全功能

    遇到字母多的命令时,Tab键就显得方便很多。比如要运行ifconfig命令,只要输入ifc后按下Tab键就能自动补全。

    通过查询资料了解到,在按下Tab键的时候,bash遍历PATH变量所设置的所有目录,检查了其中所有的有执行权限的文件(“Linux中一切皆文件”,命令也是个可执行的文件),最终找到ifconfig文件。

    当然,如果只写了if,按下Tab键,由于有四个命令均以if开头,所以需要按两次Tab键,列出所有以if开头的命令,根据需要输入即可。image

    三、通配符

    DOS系统的通配符是“ * ”和“?”两个符号。而Linux下的Shell有所不同。以bash为例,星号(*,Asterisk)——代表任何长度的任何字符。
    问号(?,Question mark)——代表任何单个字符。
    方括号([],Square brackets)——定义一定范围的字符。
    使用以上三种通配符可以在命令行的使用中提高效率。


    以上大致了解了命令行的使用,而学习才刚刚开始。对于一名Linux新手来说,熟练掌握更多的命令才是最重要的。

    通过近期在实验楼的学习,初步掌握了一些常用命令的使用,总结如下:

    • 常用快捷键
    常用快捷键 功能说明
    CTRL+ALT+T 打开终端
    CTRL+SHIFT+T 新建标签页
    ALT+数字N 终端中切换到第N个标签页
    Tab 终端中命令补全
    上下键盘 切换命令历史
    CTRL+C 中断程序运行
    • 用户及文件权限管理
    命 令 用 途
    who am i 查看当前用户
    su 切换到用户user(需要输入目标用户的密码)
    su - 切换到用户user
    sudo adduser 新建sudo组用户user
    su -l 切换登录用户
    exit 或快捷键 Ctrl+d 退出当前用户
    groups 查看该用户所属用户组
    cat 读取指定文件的内容并打印到终端输出
    cat /etc/group l grep -E 过滤用户组信息
    sudo usermod -G sudo 将其他用户添加到sudo组
    sudo deluser --remove-home 删除用户
    ls -l 列出并显示当前目录下的文件及详细信息
    cat 读取某个文件的内容
    ls -A 显示除了 '.'(当前目录),'..' 上一级目录之外的所有包含隐藏文件
    ls -dl <目录名> 查看某一个目录的完整属性
    ls -AsSh 显示所有文件大小
    touch 新建文件
    ll 查看文件所有者信息
    cp 复制文件
    echo "内容" > 文件名 在文件中添加内容
    chmod 三位数字 文件名 修改权限(三位数字为拥有者,所属用户组,其他用户的rwx顺序,有该权限为1)

    注意:Linux 下密码输入是不显示任何内容的。

    • Linux 目录结构及文件基本操作
    命令 用途
    tree / 查看文件间关系
    sudo apt-get update;sudo apt-get install 软件名 下载安装软件
    ls -a 查看隐藏文件
    cd 切换目录
    cd .. 进入上一级目录
    cd ~ 进入用户“home”目录
    pwd 获取当前路径
    .. 相对路径中当前目录的上一级目录
    mkdir 创建一个空目录
    mkdir -p father/son/grandson 同时创建一个多级目录
    cp 复制一个文件或目录到指定目录
    cp -r或cp -R 复制目录(递归复制)
    rm 删除文件
    rm -f 忽略提示强制删除
    rm -r或rm -R 删除目录
    mv 源目录文件 目的目录 移动文件(剪切)
    cat,tac和nl 查看文件(cat正序,tac倒序,nl添加行号并打印)
    cat -n 查看文件并显示行号
    more 分页查看文件(使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出)
    tail 文件路径 只查看的头几行(默认为10行,不足10行则显示全部)和尾几行
    tail -n 页数 文件路径 只查看该行
    file 查看文件的类型
    • 环境变量与文件查找
    命令 用途
    declare 创建指定类型的变量
    = 给左边的变量赋值
    echo $ 读取变量的值($符号用于表示引用一个变量的值,不要忘记)
    set 显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
    env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
    export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
    sort 排序
    echo $PATH 查看PATH环境变量的内容
    vim hello_shell.sh 创建一个 Shell 脚本文件
    ./hello_shell.sh 执行脚本
    vim hello_world.c 创建一个 C 语言"hello world"程序
    gcc -o hello_world hello_world.c 使用 gcc 生成可执行文件
    PATH=$PATH:/home/shiyanlou/或echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc 添加自定义路径到“PATH”环境变量(注意这里一定要使用绝对路径)
    unset 删除一个环境变量
    source 让环境变量立即生效
    . 同上,注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
    whereis,which,find,locate 均与搜索相关。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s) ,which确定是否安装了某个指定的软件,只从PATH环境变量指定的路径中去搜索命令,find,locate指定目录下的不同文件类型

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

    • 文件打包与压缩
    header 1 header 2
    zip 压缩打包文件夹
    zip -r 递归打包包含子目录的全部内容
    zip -q 安静模式打包,即不向屏幕输出信息
    zip -o 输出文件,需在其后紧跟打包输出文件名
    du 查看打包后文件的大小
    zip -r -9 -q -o shiyanlou_ 9.zip /home/shiyanlou -x ~/.zip zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou -x ~/.zip 设置压缩级别为9和1(9最大,1最小),重新打包(注意:这里只能使用绝对路径,否则不起作用。)
    du -h -d 0 *.zip 查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小
    zip -r -e -o 创建加密压缩包
    unzip 解压到当前目录
    unzip -q 使用安静模式,将文件解压到指定目录
    unzip -l 不解压只查看压缩包的内容
    unzip -O GBK 中文压缩文件.zip(英文字母,大写o) 指定编码类型
    rar 创建rar 压缩包
    unrar 解压 rar 压缩包
    rar d 从指定压缩包文件中删除某个文件
    rar l 查看不解压文件
    unrar x 全路径解压
    unrar e 去掉路径解压
    tar -cf 创建一个 tar 包
    tar -xf shiyanlou.tar -C tardir 解包一个文件(-x参数)到指定路径的已存在目录(-C参数)
    tar -tf 只查看不解包文件(-t参数)
    tar -cphf 保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数)
    tar -czf 使用gzip来压缩文件
    tar -xzf 压缩*.tar.gz文件
    tar -xJf 压缩*.tar.xz文件
    tar -xjf 压缩*tar.bz2文件

    注意:rar 的命令参数没有-,如果加上会报错。

    • 文件系统操作与磁盘管理
    命令 用途
    df 以blocks的大小显示磁盘的容量
    df -h 以人类语言显示磁盘容量
    du 以 blocks 的大小展示目录的容量
    du -h 以人类语言展示目录的容量
    du -h -d 指定查看目录的深度
    dd of=test bs=10 count=1或dd if=/dev/stdin of=test bs=10 count=1 从标准输入读入用户输入到一个文件
    dd if=/dev/stdin of=/dev/stdout bs=10 count=1 从标准输入读入用户输入到标准输出
    bs 指定虚拟磁盘块大小
    dd if=/dev/stdin of=test bs=10 count=1 conv=ucase 将输出的英文字符转换为大写再写入文件
    dd if=/dev/zero of=virtual.img bs=1M count=256 设备创建一个容量为 256M 的空文件
    sudo mkfs.ext4 virtual.img 将虚拟磁盘镜像格式化为ext4文件系统
    sudo mount 查看主机已经挂载的文件系统
    mount [options] [source] [directory] 挂载真正的磁盘到目录树
    mount -o loop -t ext4 virtual.img /mnt 挂载我们创建的虚拟磁盘镜像到/mnt目录
    sudo umount /mnt 卸载已挂载磁盘
    sudo fdisk -l 查看硬盘分区表信息
    sudo fdisk virtual.img 进入磁盘分区模式
    sudo losetup /dev/loop0 virtual.img 建立镜像与回环设备的关联
    sudo losetup -d /dev/loop0 解除设备关联
    sudo kpart kpartx -av /dev/loop0 用kpartx工具建立虚拟设备的映射
    sudo kpart kpartx -dv /dev/loop0 取消映射
    sudo mkfs.ext4 -q /dev/mapper/loop0p1 建立映射后,将其全部格式化为ext4
    mkdir -p /media/virtualdisk_{1 . . 3} 在/media目录下新建四个空白目录用于挂载虚拟磁盘
    sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1(以此类推) 挂载磁盘分区
    sudo umount /dev/mapper/loop0p1(以此类推) 卸载磁盘分区
    • Linux下的帮助命令
    命令 用途
    bash 进入 bash 中,在 bash 中内置有help命令
    help ls 显示内建命令的帮助信息
    ls --help 显示外部命令的帮助信息
    man ls 显示系统手册页中的内容
    info ls 更完整的显示出 GNU 信息

    实验楼第3~8节的命令总结如上,但这些还远远不够。在之后的学习中我会继续补充完善,并多加练习。

    学习过程中的一些疑惑以及解决

    • Linux的分区与挂载

    在学习过程中频繁遇到分区与挂载这两个专业术语。鉴于Windows与Linux的区别,我想Linux的分区一定有特殊之处,于是查阅了相关资料进行学习。

    与Windows的C盘D盘等等不同的是,Linux系统中有独特的目录结构。最基本的是一个根目录“/”,根目录下还有很多目录,比如“/etc”用来存放配置文件,“/bin”用来存放二进制程序,“/boot”用来存放启动文件,“/lib”用来存放库文件,“/home”用来存放用户的各种文件等等。这些便是Linux的分区。image

    用户可以任意一个目录里的东西存在某个分区里,如果不指定,则这个目录里的东西存在上一级目录所在分区里,以此类推,所以一定要指定“/”目录存放在哪个分区。给某一个制定分区的过程,即“挂载”。

    • Vim编辑器的使用

    实验楼课程第四节提到Vim编辑器的使用。在学习Linux的同时,我进行了Vim文本编辑器的学习。

    在几种常用文本编辑器中,功能最强大的要数Vim和Emacs了。学习Vim的使用,可以为今后写程序以及写脚本做充足准备。

    Vim有3种工作模式,即:指令模式、输入模式、行末模式。

    • 指令模式:Vim运行默认进入指令模式。在这种模式下,可以通过各种快捷键、组合键进行操作,对文本进行编辑,比如复制、粘贴、删除、查找等操作。
    • 输入模式:即向文件里输入字符的模式。按i键或者Insert键进入输入模式。进入后,页面左下角有“插入”字样,即跟使用gedit之类的编辑器一样了。按Esc键可以回到指令模式。
    • 行末模式:在该模式下可以在界面最下面一行输入命令并执行,从而实现各种操作,例如打开文件、保存文件、查找替换、退出等操作。行末模式执行完最后一条指令后自动回到指令模式。

    三种模式下均有常用快捷键或常用命令,目前正在进行学习。之后会对于快捷键以及命令的使用做系统的总结。

    写在最后:对于寒假的一点点感触

    转眼寒假过半,放假前我觉得难以完成的种种任务,正在被我一项一项finished,比如学习Linux,比如每天扇贝打卡,比如健身锻炼,比如读书。

    刚开始学习Linux感觉很吃力,虽然大部分时候打开终端输入命令都能得到想要的结果,但搞不清楚Linux的本质,总是觉得学习只是浮在水面。于是我在学习实验楼课程的同时,在网上查阅各种资料,跟视频图书等等学习,终于摸清了Linux的一点点门道。熟练掌握各种命令的使用,成为了接下来学习Linux的重中之重。

    在我看来,学习Linux的过程反过来促进了我英语的学习(真是奇妙),虽然安装Ubuntu选择的语言是中文,但动不动就出现一篇英文提示让我实在很头大,而且所有的命令都是英文单词或是英文单词的缩写,所以我想,具有一定的词汇量对于Linux的学习也会有很大帮助吧。

    养成一个良好的习惯,或是掌握一门新技术,都不是轻而易举的事。最后我想说给自己,克服懒惰吧。万里长征才刚刚开始。

  • 相关阅读:
    mongo admin 客户端管理工具安装
    kong API gateway
    安装 docker管理 工具 页面 portainer
    elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题
    cqrs案例
    你还不知道这四点Mysql调优的话,那就赶快学起来
    python中的类型提示(type hint)
    大厂面试最常被问的Redis问题合集
    nginx gzip json [2]
    nginx gzip json 配置「1」
  • 原文地址:https://www.cnblogs.com/Vivian517/p/6352129.html
Copyright © 2020-2023  润新知