20135231 —— Linux 基础入门学习

时间:2022-03-03 09:59:06

20135231 何佳

学习计时:共12小时

读书:5

代码:2

作业:2

博客:3

一、学习目标

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

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

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

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

二、Linux 系统简介

1、实验介绍

本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识。Linux 就是一个操作系统。

20135231 —— Linux 基础入门学习

Linux 也就是系统调用和内核那两层。Linux 本身只是操作系统的内核。内核是使其他程序能够运行的基础。

它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。

2、Linux 与 Windows 到底有哪些不同

1).免费与收费

  • 最新正版 Windows8.1 官方售价 ¥888;
  • Linux 免费或少许费用。

2).软件与支持

  • Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务;
  • Linux 平台:大都为开源*软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和*软件社区提供支持。

3).安全性

  • Windows 平台:三天两头打补丁安装系统安全更新,还是会中病毒木马;
  • Linux 平台:要说 Linux 没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比 Windows 平台要更加安全,使用 Linux 你也不用装某杀毒,某毒霸。

4).使用习惯

  • Windows:普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单;
  • Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导(这正是我们要做的事情),一旦熟练之后效率极高。

5).可定制性

  • Windows:这些年之前算是全封闭的,系统可定制性很差;
  • Linux:你想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。

3、linux应用范畴

支撑百度,谷歌,上淘宝,聊 QQ等等这些软件和服务的,是后台成千上万的 Linux 服务器主机,它们时时刻刻都在进行着忙碌的数据处理和运算,可以说世界上大部分软件和服务都是运行在 Linux 之上的。

4、Windows 没有的

  • 稳定的系统
  • 安全性和漏洞的快速修补
  • 多用户
  • 用户和用户组的规划
  • 相对较少的系统资源占用
  • 可定制裁剪,移植到嵌入式平台(如安卓设备)
  • 可选择的多种图形用户界面(如 GNOME,KDE)

5、Linux 没有的

  • 没有特定的支持厂商
  • 游戏娱乐支持度不足
  • 专业软件支持度不足

6、如何学习 Linux

1)学习心态

  • 明确目的:你是要用 Linux 来干什么,搭建服务器,做程序开发,还是日常办公,还是娱乐游戏;
  • 面对现实:Linux 大都在命令行下操作,能否接受不用或少用图形界面;
  • 是学习 Linux 操作系统本身还是某一个Linux发行版(Ubuntu,CentOS,Fedora,OpenSUSE,Debian,Mint 等等),如果你对发行版的概念或者它们之间的关系不明确的话可以参看Linux 发行版

2)注重基础,从头开始

大致的学习路径如下:

20135231 —— Linux 基础入门学习

三、基本概念及操作

一、本节实验介绍

1、实验楼环境介绍

2、常用 Shell 命令及快捷键

3、Linux 使用小技巧

二、Linux 桌面环境介绍

  相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 Unix/Linux 发行版上看到的图形界面实际都只是

运行在 Linux 系统之上的一套软件,类似 Windows95 之前的Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux

上的这套软件以前是XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为X11或

X实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形用

户界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache。如果只有服务器也是不能实现一个完整的桌面环境的,当然还

需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境KDEGNOMEXFCELXDE

其中就有你看到的,实验楼目前使用的 XFCE 桌面环境,部分老用户可能可以回想起,实验楼之前使用的环境是 LXDE。这也意味着在

Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。

20135231 —— Linux 基础入门学习

三、Linux终端

1.Terminal(终端)

  通常在我们使用 Linux 时,我们并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实

现让我们在一个窗口中完成接受用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面几个比较

常见的终端模拟器,例如 gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm,目前我们的实验中的终端程序是

xfce 桌面环境自带的 xfce-terminal。不过要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。

2.Shell

  通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而大都是这个 Shell(壳),有壳就有核,这

里的核就是指的 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令

行)和后来的 cmd.exe。普通意义上的 Shell 就是可以接受用户输入命令的程序。它之所以被称作 Shell 是因为它隐藏了操作系统底

层的细节。同样的 Unix/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。

  Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于 Windows 下的命令行,

虽然也提供了很简单的控制语句。在Windows 操作系统下,可能有些用户从来都不会直接的使用 Shell,然而在 UNIX 系列操作系统

下,Shell 仍然是控制系统启动、X11 启动和很多其他实用工具的脚本解释程序。

  在 UNIX/Linux 中比较流行的常见的 Shell 有 bash,zsh,ksh,csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境

是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是zsh 和 xfce。

3.命令行操作体验

20135231 —— Linux 基础入门学习

1)重要快捷键:

真正学习命令行之前,你先要掌握几个十分有用,必需掌握的小技巧:

[Tab]

使用Tab键来进行命令补全,Tab键一般键盘是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时你可以只输入它的开头的一部分然后按下Tab键就可以得到提示或者帮助完成:

20135231 —— Linux 基础入门学习

补全目录,补全命令参数都是没问题的:

20135231 —— Linux 基础入门学习

[Ctrl+c]

Ctrl+c键可用来强行终止当前程序。

输入以下命令:

$ tail

会发现你接下来的输入都没有任何反应了,只是将你输入的东西显示出来,可以使用Ctrl+c,来中断程序。

又或者输入:

$ find

20135231 —— Linux 基础入门学习

其他一些常用快捷键

按键

作用

Ctrl+d

键盘输入结束或退出终端

Ctrl+s

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

Ctrl+z

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

Ctrl+a

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

Ctrl+e

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

Ctrl+k

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

Alt+Backspace

向前删除一个单词

Shift+PgUp

将终端显示向上滚动

Shift+PgDn

将终端显示向下滚动

20135231 —— Linux 基础入门学习

2)学会利用历史输入命令

很简单,你可以使用键盘上的方向键,恢复你之前输入过的命令,你一试便知。

3)学会使用通配符

通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配(比如文件名,参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。

终端里面输入的通配符是由 Shell 处理的,不是由所涉及到命令语句处理的,它只会出现在命令的“参数值”里(它不用在 命令名称里, 命令不记得,那就用Tab补全)。当 Shell 在“参数值”中遇到了通配符时,Shell 会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上就是一种 Shell 实现的路径扩展功能。在 通配符被处理后, Shell 会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

先使用 touch 命令创建 2 个文件,后缀都为 txt:

$ touch adsfasd.txt wergjlkas.txt

可以给文件随意命名,假如过了很长时间,你已经忘了这两个文件的文件名,现在你想在你大堆其他文件中找到这两个文本文件,就可以使用通配符:

$ ls *.txt

20135231 —— Linux 基础入门学习

在创建文件的时候,如果需要一次性创建多个文件,比如:“love_1_linux.txtlove_2_linux.txt... love_10_linux.txt”。在 Linux 中十分方便:

  $ touch love_{1..10}_linux.txt

20135231 —— Linux 基础入门学习

Shell 常用通配符:

字符

含义

*

匹配 0 或多个字符

?

匹配任意一个字符

[list]

匹配 list 中的任意单一字符

[!list]

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

[c1-c2]

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

{string1,string2,...}

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

{c2..c2}

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

4).学会在命令行中获取帮助

在 Linux 环境中,如果你遇到困难,可以使用man 命令,它是Manual page的缩写。

Manual pages 是在 UNIX 或类 UNIX 操作系统在线软件文档的一种普遍的形式。 内容包括计算机程序(包括库和系统调用),正式的标准和惯例,甚至是抽象的概念。用户可以通过执行 man 命令调用手册页。

使用如下方式来获得某个命令的说明和使用方式的详细介绍:

$ man <command_name>

想查看 man 命令本身的使用方式,可以输入:

man man

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

区段

说明

1

一般命令

2

系统调用

3

库函数,涵盖了C标准函数库

4

特殊文件(通常是/dev中的设备)和驱动程序

5

文件格式和约定

6

游戏和屏保

7

杂项

8

系统管理命令和守护进程

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

$ man 3 printf

所有的手册页遵循一个常见的布局,其为通过简单的 ASCII 文本展示而优化,而这种情况下可能没有任何形式的高亮或字体控制。一般包括以下部分内容:

NAME(名称)

该命令或函数的名称,接着是一行简介。

SYNOPSIS(概要)

对于命令,正式的描述它如何运行,以及需要什么样的命令行参数。对于函数,介绍函数所需的参数,以及哪个头文件包含该函数的定义。

DESCRIPTION(说明)

命令或函数功能的文本描述。

EXAMPLES(示例)

常用的一些示例。

SEE ALSO(参见)

相关命令或函数的列表。

  也可能存在其他部分内容,但这些部分没有得到跨手册页的标准化。常见的例子包括:OPTIONS(选项),EXIT STATUS(退出状态),ENVIRONMENT(环境),BUGS(程序漏洞),FILES(文件),AUTHOR(作者),REPORTING BUGS(已知漏洞),HISTORY(历史)和COPYRIGHT(版权)。

  通常 man 手册中的内容很多,可能不太容易找到你想要的结果,可以在 man 中使用搜索,<你要搜索的关键字>,查找到后可以使用n键切换到下一个关键字所在处,shift+n为上一个关键字所在处。使用Space(空格键)翻页,Enter(回车键)向下滚动一行,或者使用j,k(vim编辑器的移动键)进行向前向后滚动一行。按下h键为显示使用帮助(因为man使用less作为阅读器,实为less工具的帮助),按下q退出。

四、作业

先使用如下命令安装:

$ sudo apt-get update;sudo apt-get install sysvbanner

然后:

$ banner shiyanlou

或者你觉得这字体不好看,那么你还可以使用默认已经安装的一个命令printerbanner:

  $ printerbanner -w 50 A

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

五、遇到的问题及解决

1.问题:第二个实验楼要求tab键功能那里要求打【ls --h】那中的“点点”总是出错。

解决:经过不停的尝试终于发现是减号的“-”

四、用户及文件权限管理

一、实验介绍

1、Linux 中创建、删除用户,及用户组等操作。

2、Linux 中的文件权限设置。

二、Linux 用户管理

  通过第一节课程的学习,可以知道,Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看、修改彼此的文件。

  下面就来学习一下 Linux 下的账户管理的基础知识。

1.查看用户

请打开终端,输入命令:

$ who am i

或者

$ who mom likes

20135231 —— Linux 基础入门学习

  输入的第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty设备而言的,还记得上一节讲终端时的那七个使用 [Ctrl]+[Alt]+[F1]~[F7] 进行切换的/dev/tty 设备么,这是“真终端”,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i ,看第二列是不是就变成 pts/1 了,第三列则表示当前伪终端的启动时间。

who 命令其它常用参数

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

2.创建用户

在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。

  root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,用 Windows 的方法理解也就是将自己的非法帐户添加到 Administrators 用户组。更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。

  我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。shiyanlou 用户的密码就是 “shiyanlou” ,它同时也属于 sudo 用户组(稍后会介绍如何查看和添加用户组)。现在我们新建一个叫 lilei 的用户:

$ sudo adduser lilei

20135231 —— Linux 基础入门学习
现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:

20135231 —— Linux 基础入门学习

退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrl+d

3.用户组

在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差不多,你的兄弟姐妹(不同的用户)属于同一个家(用户组),你们可以共同拥有这个家(共享资源),爸妈对待你们都一样(共享权限),你偶尔写写日记,其他人未经允许不能查看(私有资源和权限)。当然一个用户是可以属于多个用户组的,正如你既属于家庭,又属于学校或公司。

在 Linux 里面知道自己属于哪些用户组有以下方法:

方法一:使用groups命令

$ groups shiyanlou

其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 shiyanlou 用户同时属于 shiyanlou 和 sudo 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思,或者说是老总)。默认情况下在sudo用户组里的可以使用sudo命令获得root权限。

方法二:查看/etc/group文件

$ cat /etc/group | sort

这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息:

20135231 —— Linux 基础入门学习

没找到,没关系,你可以使用命令过滤掉一些你不想看到的结果:

  $ cat /etc/group | grep -E "shiyanlou|sudo"

20135231 —— Linux 基础入门学习

etc/group 文件格式说明

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

group_name:password:GID:user_list

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

将其它用户加入 sudo 用户组

默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入sudo用户组从而获取 root 权限。

$ su -l lilei
$ sudo ls

会提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用户组中,至于 sudoers 文件(/etc/sudoers)你现在最好不要动它,操作不慎会导致比较麻烦的后果。

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

这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限

$ su shiyanlou
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei

然后你再切换会 lilei 用户,现在就可以使用 sudo 获取 root 权限了。

4.删除用户

  $ sudo deluser lilei --remove-home

20135231 —— Linux 基础入门学习

三、Linux 文件权限

1.查看文件权限

我们之前已经很多次用到 ls 命令了,如你所见,我们用它来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下,它能做的当然不止这么多,现在我们就要用它来查看文件权限。

使用较长格式列出文件:

  $ ls -l

20135231 —— Linux 基础入门学习

shiyanlou:所属用户组

4096:文件大小

9月 20 13:05 :最后的修改时间

Desktop:文件名

20135231 —— Linux 基础入门学习

*文件类型:

/dev 目录下有各种设备文件,大都跟具体的硬件设备相关。

*文件权限:

cat <file name> 命令:读取某个文件的内容,读权限

*文件大小:

给 ls 加上 -lh 参数来更直观的查看文件的大小。

以'.' 开头的文件为隐藏文件。

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

四、作业

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

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

五、Linux 目录结构及文件基本操作

一、实验介绍

1、Linux 的文件组织目录结构。

2、相对路径和绝对路径。

3、对文件的移动、复制、重命名、编辑等操作。

二、Linux 目录结构

1、Linux 的目录与 Windows 的目录的区别:

  体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区的来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。所以通常 Windows 在使用一段时间后,磁盘上面的文件目录会显得杂乱无章(少数善于整理的用户除外吧)。然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继承了这一优良特性。 Linux 是以树形目录结构的形式来构建整个系统的,可以理解为一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。举例来说,可以利用网络文件系统(Network File System,NFS)服务器载入某特定目录等。

2、FHS 标准

  FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

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

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

20135231 —— Linux 基础入门学习

  FHS 是根据以往无数 Linux 用户和开发者的经验总结出来的,并且会维持更新,FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动),将目录定义为四种交互作用的形态,如下表所示:

20135231 —— Linux 基础入门学习

2.目录路径

cd 命令可以切换目录

. 表示当前目录

.. 表示上一级目录

ls -a 命令查看隐藏文件

- 表示上一次所在目录

~ 通常表示当前用户的"home"目录

pwd 命令可以获取当前所在路径

20135231 —— Linux 基础入门学习

分别以绝对路径和相对路径的方式进入/usr/local/bin 目录:

20135231 —— Linux 基础入门学习

二、Linux 文件的基本操作

1.新建

新建空白文件

创建名为 test 的空白文件,因为在其他目录没有权限,所以需要先 cd ~ 切换回用户的/home/shiyanlou 目录:

20135231 —— Linux 基础入门学习

2.复制

复制文件

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

复制目录:使用cp命令,需要加上-r或者-R参数,表示递归复制。

20135231 —— Linux 基础入门学习

3.删除

删除文件

使用rm(remove files or directories)命令,删除一个文件或目录:

$ rm test

20135231 —— Linux 基础入门学习

4.移动文件与文件重命名

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

批量重命名:rename命令(先使用第二个参数的通配符匹配所有后缀为.txt的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的.txt后缀替换为.c)

20135231 —— Linux 基础入门学习

重命名文件

将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名

5.查看文件

使用cat,tacnl命令查看文件

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

  标准输入输出:当我们执行一个 shell 命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),默认对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应被重定向到终端的屏幕,以便我们能直接看到输出内容。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

20135231 —— Linux 基础入门学习

6.查看文件类型

file命令可以查看文件的类型

20135231 —— Linux 基础入门学习

7.编辑文件

直接使用 Linux 内部的 vim 学习教程,输入如下命令即可开始:$ vimtutor

20135231 —— Linux 基础入门学习

三、作业

20135231 —— Linux 基础入门学习

六、环境变量与文件查找

一、实验介绍

本节实验介绍环境变量的作用与用法,及几种搜索文件的方法。学会这些技巧高效地使用 Linux。

二、环境变量

1.变量

  要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。

  变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值,初学者经常会忘记输入):

20135231 —— Linux 基础入门学习

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

2.环境变量

  环境变量就是作用域比自定义变量要大,如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。

20135231 —— Linux 基础入门学习

命令

说明

set

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

env

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

export

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

20135231 —— Linux 基础入门学习

3.修改和删除已有变量

变量修改

变量的修改有以下几种方式:

变量设置方式

说明

${变量名#匹配字串}

从头向后开始匹配,删除符合匹配字串的最短数据

${变量名##匹配字串}

从头向后开始匹配,删除符合匹配字串的最长数据

${变量名%匹配字串}

从尾向前开始匹配,删除符合匹配字串的最短数据

${变量名%%匹配字串}

从尾向前开始匹配,删除符合匹配字串的最长数据

${变量名/旧的字串/新的字串}

将符合旧字串的第一个字串替换为新的字串

${变量名//旧的字串/新的字串}

将符合旧字串的全部字串替换为新的字串

使用unset命令删除一个环境变量

三、作业

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

七、文件打包与压缩

一、实验介绍

Linux 上常用的 压缩/解压 工具,介绍了 zip,rar,tar 的使用。

二、文件打包和解压缩

文件后缀名 说明
*.zip zip程序打包压缩的文件
*.rar rar程序压缩的文件
*.7z 7zip程序压缩的文件
*.tar tar程序打包,未压缩的文件
*.gz gzip程序(GNU zip)压缩的文件
*.xz xz程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.tar.gz tar打包,gzip程序压缩的文件
*.tar.xz tar打包,xz程序压缩的文件
*tar.bz2 tar打包,bzip2程序压缩的文件
*.tar.7z tar打包,7z程序压缩的文件

 

1.zip压缩打包程序

  • 使用zip打包文件夹:
$ zip -r -q -o shiyanlou.zip /home/shiyanlou
$ du -h shiyanlou.zip
$ file shiyanlou.zip

20135231 —— Linux 基础入门学习

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

20135231 —— Linux 基础入门学习

2.使用unzip命令解压缩zip文件

shiyanlou.zip解压到当前目录:

$ unzip shiyanlou.zip

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

$ unzip -q shiyanlou.zip -d ziptest

20135231 —— Linux 基础入门学习

3.rar打包压缩命令

使用rar和unrar工具分别创建和解压 rar 压缩包。

使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。

20135231 —— Linux 基础入门学习

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

20135231 —— Linux 基础入门学习

  • 从指定压缩包文件中删除某个文件:

20135231 —— Linux 基础入门学习

  • 查看不解压文件:

20135231 —— Linux 基础入门学习

全路径解压:

20135231 —— Linux 基础入门学习

4.tar打包工具(tar命令一些基本的使用方式)  

  • 创建一个 tar 包:

20135231 —— Linux 基础入门学习

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

20135231 —— Linux 基础入门学习

  • 只查看不解包文件-t参数:

20135231 —— Linux 基础入门学习

  • 保留文件属性和跟随链接(符号链接或软链接),有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)和备份链接指向的源文件而不是链接本身(-h参数):

20135231 —— Linux 基础入门学习

压缩文件格式

参数

*.tar.gz

-z

*.tar.xz

-J

*tar.bz2

-j

三、作业

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

八、文件系统操作与磁盘管理

 一、简单文件系统操作

1.查看磁盘和目录的容量

使用 df 命令查看磁盘的容量

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

二、简单的磁盘管理

1.创建虚拟磁盘

dd命令用于转换和复制文件,还可以实现数据转换

20135231 —— Linux 基础入门学习

2.使用 dd 命令创建虚拟镜像文件:

20135231 —— Linux 基础入门学习

3.使用 mkfs 命令格式化磁盘

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

4.使用 mount 命令挂载磁盘到目录树

20135231 —— Linux 基础入门学习

三、作业

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

、命令执行顺序控制与管道

一、命令执行顺序的控制

1.顺序执行多条命令

20135231 —— Linux 基础入门学习

2.有选择的执行命令

20135231 —— Linux 基础入门学习

二、管道

1.cut 命令,打印每一行的某一字段:

20135231 —— Linux 基础入门学习

2.cut 命令,打印每一行的某一字段

20135231 —— Linux 基础入门学习

3.grep 命令,在文本中或 stdin 中查找匹配字符串

20135231 —— Linux 基础入门学习

-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。

20135231 —— Linux 基础入门学习

4. wc 命令,简单小巧的计数工具

wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出/etc/passwd文件的统计信息:

20135231 —— Linux 基础入门学习

5.sort 排序命令

这个命令前面我们也是用过多次,功能很简单就是将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。

默认为字典排序:

$ cat /etc/passswd | sort

反转排序:

$ cat /etc/passwd | sort -r

按特定字段排序:

$ cat /etc/passwd | sort -t':' -k 3

20135231 —— Linux 基础入门学习

6. uniq 去重命令

uniq命令可以用于过滤或者输出重复行。

  • 过滤重复行

20135231 —— Linux 基础入门学习

  • 输出重复行

# 输出重复过的行(重复的只输出一个)及重复次数

$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc

# 输出所有重复的行

$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -D

十、简单的文本处理

 文本处理命令

1.tr 命令

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

使用方式:

tr [option]...SET1 [SET2]

常用的选项有:

选项

说明

-d

删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配

-s

去除set1指定的在输入文本中连续并重复的字符

20135231 —— Linux 基础入门学习

2.col 命令

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

使用方式:

col [option]

常用的选项有:

选项 说明
-x Tab转换为空格
-h 将空格转换为Tab(默认选项)

操作举例:

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

3.join命令

使用方式:

join [option]... file1 file2

常用的选项有:

选项 说明
-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1 指明第一个文件要用哪个字段来对比,,默认对比第一个字段
-2 指明第二个文件要用哪个字段来对比,,默认对比第一个字段

操作举例:

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

4.paste命令

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

使用方式:

paste [option] file...

常用的选项有:

选项 说明
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行

操作举例:

20135231 —— Linux 基础入门学习

四、作业

20135231 —— Linux 基础入门学习

十一、数据流重定向

1.简单的重定向

  用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。

将cat的连续输出重定向到一个文件。

20135231 —— Linux 基础入门学习

文件描述符 设备文件 说明
0 /dev/stdin 标准输入
1 /dev/stdout 标准输出
2 /dev/stderr 标准错误

  文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。

1)将一个文件作为命令的输入,标准输出作为命令的输出

  $ cat Documents/test.c\~

2)将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出

$ echo 'hi' | cat

3)将echo命令的输出从默认的标准输出重定向到一个普通文件

$ echo 'hello shiyanlou' > redirect
$ cat redirect

2.标准错误重定向

标准输出和标准错误都被指向伪终端的屏幕显示。

20135231 —— Linux 基础入门学习

3.使用tee命令同时重定向到多个文件

$ echo 'hello shiyanlou' | tee hello

20135231 —— Linux 基础入门学习

4.永久重定向

exec命令的作用是使用指定的命令替换当前的Shell,及使用一个进程替换当前进程,或者指定新的重定向。

20135231 —— Linux 基础入门学习

5.创建输出文件描述符

默认在 Shell 中可以有9个打开的文件描述符

$ cd /dev/fd/;ls -Al

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

$ zsh
$ exec 3>somefile
# 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不应该有空格,如果有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit

20135231 —— Linux 基础入门学习

6.关闭文件描述符

如上面我们打开的3号文件描述符,可以使用如下操作将它关闭:

$ exec 3>&-
$ cd /dev/fd;ls -Al;cd -

20135231 —— Linux 基础入门学习

7.完全屏蔽命令的输出

  在 Linux 中有一个被成为“黑洞”的设备文件,所以导入它的数据都将被“吞噬”。

  在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。

  可以利用设个/dev/null屏蔽命令的输出:

$ cat Documents/test.c\~ nefile 1>/dev/null 2>&1

向上面这样的操作将会得不到任何输出结果。

20135231 —— Linux 基础入门学习

8.使用 xargs 分割参数列表

  xargs 是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

20135231 —— Linux 基础入门学习

四、作业

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

十二、正则表达式基础

一、实验介绍

虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grepsedawk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式)。正则表达式本身的内容很多,要把它说明清楚需要单独一门课程来实现,不过我们这一节中涉及到的相关内容通常也能够满足很多情况下的需求了。

二、基本语法:

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

选择

|竖直分隔符表示选择,例如"boy|girl"可以匹配"boy"或者"girl"

数量限定

数量限定除了我们举例用的*,还有+加号,?问号,.点号,如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:

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

范围和优先级

()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(这里体验了范围,?将圆括号内容作为一个整体匹配)。

语法(部分)

正则表达式有多种不同的风格,下面列举一些常用的作为 PCRE 子集的适用于perlpython编程语言及grepegrep的正则表达式匹配规则:(由于markdown表格解析的问题,下面的竖直分隔符用全角字符代替,实际使用时请换回半角字符)

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“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”。
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
(pattern) 匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“\(”或“\)”。
x|y 匹配x或y。例如,“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”范围内的任意字符。

优先级

优先级为从上到下从左到右,依次降低:

运算符 说明
\ 转义符
(), (?:), (?=), [] 括号和中括号
*、+、?、{n}、{n,}、{n,m} 限定符
^、$、\任何元字符 定位点和序列
 选择

二、grep模式匹配命令

上面空谈了那么多正则表达式的内容也并没有提及具体该如何使用它,实在枯燥,如果说正则表达式是一门武功话,那它也只能算得上一些口诀招式罢了,要把它真正练起来还得需要一些兵器在手才行,这里我们要介绍的grep命令以及后面要讲的sed,awk这些就该算作是这样的兵器了。

1.基本操作

grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。grep支持三种正则表达式引擎,分别用三个参数指定:

参数 说明
-E POSIX扩展正则表达式,ERE
-G POSIX基本正则表达式,BRE
-P Perl正则表达式,PCRE

2.grep命令的常用参数:

参数 说明
-b 将二进制文件作为文本来进行匹配
-c 统计以模式匹配的数目
-i 忽略大小写
-n 显示匹配文本所在行的行号
-v 反选,输出不匹配行的内容
-r 递归匹配查找
-A n n为正整数,表示after的意思,除了列出匹配行之外,还列出后面的n行
-B n n为正整数,表示before的意思,除了列出匹配行之外,还列出前面的n行
--color=auto 将输出中的匹配项设置为自动颜色显示

注:在大多数发行版中是默认设置了grep的颜色的,可以通过参数指定或修改GREP_COLOR环境变量。

2.使用正则表达式

使用基本正则表达式,BRE

  • 位置

查找/etc/group文件中以"shiyanlou"为开头的行

$ grep 'shiyanlou' /etc/group $ grep '^shiyanlou' /etc/group

20135231 —— Linux 基础入门学习

  • 数量
# 将匹配以'z'开头以'o'结尾的所有字符串
$ echo 'zero\nzo\nzoo' | grep 'z.*o'
# 将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
$ echo 'zero\nzo\nzoo' | grep 'z.o'
# 将匹配以'z'开头,以任意多个'o'结尾的字符串
$ echo 'zero\nzo\nzoo' | grep 'zo*'

20135231 —— Linux 基础入门学习

  • 选择

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

特殊符号及说明:

特殊符号 说明
[:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字节,亦即 a-z
[:print:] 代表任何可以被列印出来的字节
[:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字节,亦即 A-Z
[:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节
20135231 —— Linux 基础入门学习
20135231 —— Linux 基础入门学习

三、sed 流编辑器

sed工具用于过滤和转换文本的流编辑器。

sed 命令基本格式:

sed [参数]... [执行命令] [输入文件]...
# 形如:
$ sed -i '1s/sad/happy/' test # 表示将test文件中第一行的"sad"替换为"happy"
参数 说明
-n 安静模式,只打印受影响的行,默认打印输入数据的全部内容
-e 用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-f filename 指定执行filename文件中的命令
-r 使用扩展正则表达式,默认为标准正则表达式
-i 将直接修改输入文件内容,而不是打印到标准输出设备

sed执行命令格式:

[n1][,n2]command
[n1][~step]command
# 其中一些命令可以在后面加上作用范围,形如:
$ sed -i 's/sad/happy/g' test # g表示全局范围
$ sed -i 's/sad/happy/4' test # 4表示指定行中的第四个匹配字符串

其中n1,n2表示输入内容的行号,它们之间为,逗号则表示从n1到n2行,如果为波浪号则表示从n1开始以step为步进的所有行;command为执行动作,下面为一些常用动作指令:

命令 说明
s 行内替换
c 整行替换
a 插入到指定行的后面
i 插入到指定行的前面
p 打印指定行,通常与-n参数配合使用
d 删除指定行

sed操作举例

我们先找一个用于练习的文本文件:

$ cp /etc/passwd ~

打印指定行

# 打印2-5行
$ nl passwd | sed -n '2,5p'
# 打印奇数行
$ nl passwd | sed -n '1~2p'

行内替换

# 将输入文本中"shiyanlou" 全局替换为"hehe",并只打印替换的那一行,注意这里不能省略最后的"p"命令
$ sed -n 's/shiyanlou/hehe/gp' passwd
  
注意: 行内替换可以结合正则表达式使用。

行间替换

$ nl passwd | grep "shiyanlou"
# 删除第21行
$ sed -n '21c\www.shiyanlou.com' passwd

四、awk文本处理语言

AWK是一种优良的文本处理工具。

pattern通常是是表示用于匹配输入的文本的“关系式”或“正则表达式”,action则是表示匹配后将执行的动作。

awk处理文本的方式,是将文本分割成一些“字段”,然后再对这些字段进行处理,默认情况下,awk以空格作为一个字段的分割符。

-F参数用于预先指定前面提到的字段分隔符(还有其他指定字段的方式) ,-v用于预先为awk程序指定变量,-f参数用于指定awk命令要执行的程序文件,或者在不加-f参数的情况下直接将程序语句放在这里,最后为awk需要处理的文本输入,且可以同时输入多个文本文件。

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

6.awk常用的内置变量

变量名 说明
FILENAME 当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串
$0 当前记录的内容
$N N表示字段号,最大值为NF变量的值
FS 字段分隔符,由正则表达式表示,默认为" "空格
RS 输入记录分隔符,默认为"\n",即一行为一个记录
NF 当前记录字段数
NR 已经读入的记录数
FNR 当前输入文件的记录数,请注意它与NR的区别
OFS 输出字段分隔符,默认为" "空格
ORS 输出记录分隔符,默认为"\n"

十二、 Linux下软件安装

一、Linux 上的软件安装

通常 Linux 上的软件安装主要有三种方式:

  • 在线安装
  • 从磁盘安装deb软件包
  • 从二进制软件包安装
  • 从源代码编译安装

二、在线安装

安装:

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

2. apt 包管理工具介绍

APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包。

3.apt-get

apt-get使用各用于处理apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等,下面列出一些apt-get包含的常用的一些工具:

工具 说明
install 其后加上软件包名,用于安装一个软件包
update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表
upgrade 升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次update
dist-upgrade 解决依赖关系并升级(存在一定危险性)
remove 移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件
autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包
purge 与remove相同,但会完全移除软件包,包含其配置文件
clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/
autoclean 移除已安装的软件的旧版本软件包

下面是一些apt-get常用的参数:

参数 说明
-y 自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用
-s 模拟安装
-q 静默安装方式,指定多个q或者-q=#,#表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用
-f 修复损坏的依赖关系
-d 只下载不安装
--reinstall 重新安装已经安装但可能存在问题的软件包
--install-suggests 同时安装APT给出的建议安装的软件包

4.安装软件包

  $sudo apt-get --reinstall install w3m

5.软件升级

# 更新软件源
$ sudo apt-get update
# 升级没有依赖问题的软件包
$ sudo apt-get upgrade
# 升级并解决依赖关系
$ sudo apt-get dist-upgrade

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

6.卸载软件

20135231 —— Linux 基础入门学习

三、使用 dpkg 从本地磁盘安装 deb 软件包

1.dpkg 介绍 

  dpkg 是 Debian 软件包管理器的基础,它被伊恩·默多克创建于 1993 年。dpkg 与 RPM 十分相似,同样被用于安装、卸载和供给和 .deb 软件包相关的信息。

  dpkg 本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。

dpkg常用参数介绍:

参数 说明
-i 安装指定deb包
-R 后面加上目录名,用于安装该目录下的所有deb安装包
-r remove,移除某个已安装的软件包
-I 显示deb包文件的信息
-s 显示已安装软件的信息
-S 搜索已安装的软件包
-L 显示已安装软件包的目录信息

四、作业

20135231 —— Linux 基础入门学习

20135231 —— Linux 基础入门学习

十四、感想

  本次实验内容十分的多,在短时间内并且是自学的情况下记忆比较困难,希望在以后的上课以及练习中能够熟能生巧。在实验楼的自学过程中由于大多数的步骤给出了十分直观的步骤图片,所以上手比较容易,但是脱离教程后操作还是会有困难。最后就是自己电脑上的虚拟机出了问题无法使用,问了好多同学依旧无法解决,所以只能使用实验楼,但是实验楼对网络的要求太高,时不时地断线或者卡住造成了大量时间的浪费,所以本次内容花费了意想不到的长时间。