• Linux基础入门



    学习时间:11个小时

    一、 学习目标

    1. 能够独立安装Linux操作系统  

    2. 能够熟练使用Linux系统的基本命令  

    3. 熟练使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等

    4. 熟练应用“搜索”进行举一反三的学习

    二、 学习资源

    1. 课程资料:https://www.shiyanlou.com/courses/413   实验一,课程邀请码:W7FQKW4Y

    2. Linux 基础入门:https://www.shiyanlou.com/courses/1(重点,第一次课考核内容全部从这里面出)

    3.  Linux命令:en   cn

    三、 学习方法

    1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

    2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/

    3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习

    4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第一周学习总结”

    四、 学习任务

    1. 重点学习 cheat/find/locate/grep/man/whereis/which/apt-get

       查找帮助文档、各种示例多多练习,这几个命令会贯穿我们整个学习的学习,掌握这几个命令就可以很好学习其他命令了。

    2. 这学期需要掌握的命令有ac,apt-get,bzip2,cat,chgrp,chmod,chown,clear,compress,cp,dd,df,diff,du,dump,evn,find,finger,free,grep,gzip,head,kill,less,ln,locate,l,gout,ls,man,mkdir,more,mount,mt,mv,netstat,nslookup,od,passwd,patch,ps,pstop,pwd,rm,shell,sort,ssh,stty,tail,tar,telnet,touch,tree,uname,unzip,vi,vim,whereis,which,who,write等

    五、 学习过程

    1. 了解Linux与windows的基本区别与学习Linux的目的

    (1)Linux的开发更加自由

    (2)使用Linux可以只用键盘操作,新手需要学习

    (3)Linux可以进行更好的关于网络与服务器方面的开发

    2. Linux的基本概念和操作

    (1)实验环境的熟悉(实验楼中的系统用户名和密码均为shiyanlou)

    (2)终端(Terminal),Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,在物理机系统上你可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换。当你切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]+[Alt]+[F7]来完成。

    中间程序(Shell),提供给使用者使用界面的软件(命令解析器)。

    (3)命令行操作

    1)    重要快捷键:

    使用Tab键来进行命令补全,补全目录,补全命令参数都是没问题的;

    用Ctrl+c键来强行终止当前程序(它并不会使终端退出);

    你可以使用键盘上的方向上键,恢复你之前输入过的命令。

     

    图1:输入tial

     

    图2:输入find /

     

    按键

    作用

    Ctrl+d

    键盘输入结束或退出终端

    Ctrl+s

    暂定当前程序,暂停后按下任意键恢复运行

    Ctrl+z

    将当前程序放到后台运行,恢复到前台为命令fg

    Ctrl+a

    将光标移至输入行头,相当于Home键

    Ctrl+e

    将光标移至输入行末,相当于End键

    Ctrl+k

    删除从光标所在位置到行末

    Alt+Backspace

    向前删除一个单词

    Shift+PgUp

    将终端显示向上滚动

    Shift+PgDn

    将终端显示向下滚动

    图3:常用指令

    2)    通配符:主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。

     

    图4:创建text文件与查找

     

    图5:创建多个txt文件与查找

    字符

    含义

    *

    匹配 0 或多个字符

    ?

    匹配任意一个字符

    [list]

    匹配 list 中的任意单一字符

    [!list]

    匹配 除list 中的任意单一字符以外的字符

    [c1-c2]

    匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]

    {string1,string2,...}

    匹配 sring1 或 string2 (或更多)其一字符串

    {c2..c2}

    匹配 c1-c2 中全部字符 如{1..10}

    图6:Shell 常用通配符

    3)    帮助指令

    可以使用man 命令,它是Manual page的缩写。

     

    图7:查看man指令

     

    图8:查看相应区段的指令介绍

     

    图9:指令“ls --help”

    3. 用户及文件的操作权限

    (1)查看用户指令:who am i (who mom likes);

     

    图10:查看用户

    指令:whoami(去掉空格),只打印用户名

     

    图11:只显示用户名

    参数

    说明

    -a

    打印能打印的全部

    -d

    打印死掉的进程

    -m

    同am i,mom likes

    -q

    打印当前登录用户数及用户名

    -u

    打印当前登录用户登录信息

    -r

    打印运行等级

    图12:who 命令其它常用参数

    (2)创建用户:这里用到 sudo 这个命令,使用这个命令有两个大前提,一是知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。

    “$ sudo adduser lilei”指令创建新账户,输入密码界面上看不见,其他信息敲下回车键就表示默认。

     

    图13:创建新账户并查看

    (3)在 Linux 里面如何知道自己属于哪些用户组

    1)        使用groups命令:其中冒号之前表示用户,后面表示该用户所属的用户组。

    2)        查看/etc/group文件,cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息。/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:

    group_name:password:GID:user_list

    你看到上面的 password 字段为一个 'x' 并不是说密码就是它,只是表示密码不可见而已。

     

    图14:groups指令

     

    图15:查看/etc/group/文件

    (4)将用户加入群组,使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

     

    图16:显示用户不在群组中

     

    图17:root用户lilei

    (5)删除用户:指令“$ sudo deluser lilei --remove-home”

     

    图18:删除用户

    (6)查看文件权限:(Linux 里面一切皆文件),一个           目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息所有者权限。

     

    图19:同时使用 '-A' 和 '-l' 参数

     

    图20:显示文件大小

    (7)变更文件所有权

     

    图21:变更文件夹的位置

    (8)修改文件权限

         1)二进制表示

     

    2)加减赋值操,指令“$ chmod go-rw iphone”,'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。

    4. Linux目录结构及文件基本操作

    1)    FHS标准,这种文件组织形式定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。指令“tree /”:

     

    2)    目录路径,使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(**注意,还记得我们上一节介绍过的,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录,~ 通常表示当前用户的"home"目录。使用 pwd命令可以获取当前所在路径(绝对路径)。

     

    3)    绝对路径,简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。

    相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如:usr/local/bin 。

     

    4)    Linux文件的基本操作

    1)    新建空白文件,使用 touch 命令创建空白文件,主要是来更改已有文件的时间戳的(比如,最近访问时间,最近修改时间),但其在不加任何参数的情况下,只指定一个文件名,则可以创建一个为指定文件名的空白文件(不会覆盖已有同名文件),当然你也可以同时指定该文件的时间戳。

     

    2)    新建目录,使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性,使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录。

     

    5)    复制文件,使用cp(copy)命令复制一个文件或目录到指定目录。

    复制目录,成功复制目录需要加上-r或者-R参数,表示递归复制。

     

    6)    删除文件,使用rm(remove files or directories)命令;删除目录,跟复制目录一样,要删除一个目录,也需要加上-r或-R参数。

    7)    移动文件,使用mv(move or rename files)命令,移动文件(剪切)。

    8)    重命名,“mv 旧的文件名 新的文件名”

    多个重命名:

    # 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件

     $ rename 's/.txt/.c/' *.txt

    # 批量将这 5 个文件,文件名改为大写

    $ rename 'y/a-z/A-Z/' *.c

    9)    查看文件,cat,tac这两个命令都是用来打印文件内容到标准输出(终端),其中cat为正序显示,tac倒序显示;

    使用more和less命令分页查看文件;

    使用head和tail命令查看文件;

    (只看一行, 加上-n参数,后面紧跟行数)

    10)  查看文件类型,file命令查看文件类型

     

    11)  编辑文件,直接使用 Linux 内部的 vim 学习教程,输入如下命令即可开始。

    5. 环境变量与文件查找

    (1)变量,使用declare命令创建一个变量名;

    使用=号赋值运算符为变量 tmp 赋值为 shiyanlou;

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

     

    (2)三种环境变量:

    当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效;

    Shell 本身内建的变量;

    从自定义变量导出的环境变量。

    命令

    说明

    set

    显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量

    env

    显示与当前用户相关的环境变量,还可以让命令在指定环境中运行

    export

    显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量

    (3)命令的查找路径与顺序

    查看PATH环境变量的内容,使用指令“$ echo $PATH”

    6. 文件的打包和压缩

    (1)使用zip指令压缩文件,命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小。(使用-e参数可以使用加密压缩包)

    (2)使用unzip指令解压文件,如果指定目录不存在,将会自动创建。如果不想解压只想查看压缩包的内容可以使用-l参数。

    (3)rar,打开压缩包指令。

     

    安装rar和unrar工具

    从指定文件或目录创建压缩包或添加文件到压缩包:

     

    unrar和rar的使用:

    • 从指定压缩包文件中删除某个文件:$ rar d shiyanlou.rar .zshrc

    查看不解压文件:$ rar l shiyanlou.rar

    全路径解压:$ unrar x shiyanlou.rar

    去掉路径解压:$ mkdir tmp       $ unrar e shiyanlou.rar tmp/

    (4)tar打包工具,解包一个文件(-x参数)到指定路径的已存在目录(-C参数),只查看不解包文件-t参数,

    7. 文件系统操作与磁盘管理

    (1)df指令,查看磁盘容量

     

    du指令查看目录的容量,-d参数指定查看目录的深度

     

    (2)创建虚拟磁盘

    1)    dd指令,dd命令用于转换和复制文件,不过它的复制不同于cp。dd的的命令行选项格式为

    选项=值。

     

    用dd命令从/dev/zero设备创建一个容量为 256M 的空文件

     

    2)    使用mkfs命令格式化磁盘

     

    (3)使用mount指令将磁盘挂载到目录树上,mount命令的一般格式如下:

    mount [options] [source] [directory]

    使用 umount 命令卸载已挂载磁盘:

    $ sudo umount /mnt

    (4)使用 fdisk 为磁盘分区,使用 losetup 命令建立镜像与回环设备的关联

     

    8. 命令执行顺序控制与管道

    (1)cut 命令,打印每一行的某一字段

    (2)grep 命令,在文本中或 stdin 中查找匹配字符串,一般表达形式为:

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

    (3)wc 命令用于统计并输出一个文件中行、单词和字节的数目

    (4)sort指令排序,-t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序,如果要按照数字排序就要加上-n参数。

    (5)uniq命令可以用于过滤或者输出重复行,使用history命令查看最近执行过的命令。

    9. 简单的文件处理

    简单的指令:

    1)    tr 命令可以用来删除一段文本信息中的某些文字。或者将其进行转换。

    2)    col 命令可以将Tab换成对等数量的空格建,或反转这个操作。

    3)    join指令,将两个文件中包含相同内容的那一行合并在一起。

    4)    paste这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。

    10. 数据流重定向

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

    (2)标准错误的重定向(注意:在输出重定向文件描述符前加上&,否则shell会当做重定向到一个文件名为1的文件中)

    (3)Tee指令,输出同时重定向到多个文件。

    (4)使用指令exec可命令实现“永久”重定向

     

    (5)同样使用exec命令可以创建新的文件描述符

    (6)可以利用设个/dev/null屏蔽命令的输出,向上面这样的操作将使你得不到任何输出结果。

    (7)xargs命令用于将/etc/passwd文件按:分割取第一个字段排序后,使用echo命令生成一个列表。

    11. 正则表达式基础

    (1)正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

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

    1)    选择:|竖直分隔符表示选择;

    2)    数量限定

    +表示前面的字符必须出现至少一次(1次或多次);

    ?表示前面的字符最多出现一次(0次或1次);

    *星号代表前面的字符可以不出现,也可以出现一次或者多次;

    3)    范围和优先级,()圆括号可以用来定义模式字符串的范围和优先级,

    字符

    描述

    将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“n”。“ ”匹配一个换行符。序列“\”匹配“”而“(”则匹配“(”。

    ^

    匹配输入字符串的开始位置。

    $

    匹配输入字符串的结束位置。

    {n}

    n是一个非负整数。匹配确定的n。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

    {n,}

    n是一个非负整数。至少匹配n。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

    {n,m}

    m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

    *

    匹配前面的子表达式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}。

    +

    匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

    ?

    匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。

    ?

    当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

    .

    匹配除“ ”之外的任何单个字符。要匹配包括“ ”在内的任何字符,请使用像“(.| )”的模式。

    (pattern)

    匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“(”或“)”。

    x|y

    匹配xy。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。

    [xyz]

    字符集合(character class)。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符。

    [^xyz]

    排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

    [a-z]

    字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

    [^a-z]

    排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

    (3)优先级:

     

    (4)grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件,

     

    (5)grep指令

    数量:

     

    选择:

     

    选择的符号说明:

     

    排除字符:

     

    (6)zo{1}只匹配zo,zo{1,}匹配zo开头的所有单词

    选择,grep – E 匹配相同的,Ev不相同的

     

    (.号有特殊含义,所以需要转义。)

    (7)sed命令,常用格式 

    sed [参数]... [执行命令] [输入文件]...

    常用参数:

     

    12. Linux下软件的安装

    (1)apt-get使用各用于处理apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等

     

    一些常用参数:

     

    (2)软件升级

     

    (3)软件卸载:

     

    (4)软件搜索:

    apt-cache search 软件名

    (5)在网络上简单以deb形式打包的软件包,就需要使用dpkg命令来安装,一些常用参数:

     

     

    (6)查看已安装的软件包的目录,使用dpkg -L查看deb包目录信息

    (7)二进制包安装,从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可。

    六、 课后作业

    2.

     

    作业图1

     

    作业图2

     

    作业图3:下载toilet资料包之后

    3.

    创建用户:指令(sudo adduser),敲下回车使用默认值

     

    Root用户:

     

    4.

     

     

    5.

     

    6.

    7.

    8.

    (1)现在实验楼的环境中打开浏览器,然后输入对应的网址,下载图片

    (2)之后下载对应程序,输入程序名字后再后面加入图片的目录即可。

     9.

    下载文件,运行即可(方向键左右移动,空格射击)

    10.

    DEMO:

    FIRE:

    12.

    七、  心得体会

     1.了解了Linux与windows的区别,认识了Linux的优缺点,了解了基本操作,为以后更方便的使用Linux打下基础。

     2.这次了解了磁盘分区,见识到了Linux的便利。并尝试在Linux中打开浏览器,下载图片。

     3.学习了Linux中的软件安装,对以后自己在虚拟机中的使用打下基础

  • 相关阅读:
    leetcode59
    leetcode95
    leetcode96
    leetcode787
    leetcode150
    leetcode165
    leetcode739
    快速搭建:Djangorest-framework的restful项目
    编写部署用到的部分shell脚本收集
    pandas:dataframe删除某些不为non的行
  • 原文地址:https://www.cnblogs.com/shadow135211/p/4824555.html
Copyright © 2020-2023  润新知