实验一 Linux系统简介

一、Linux 为何物

Linux 就是一个操作系统,Linux 也就是系统调用和内核那两层。

 

 

二、Linux 历史简介

 

操作系统始于二十世纪 50 年代,当时的操作系统能运行批处理程序。批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个文件或者打印机。

二十世纪六十年代初,交互式操作系统开始流行。它不仅仅可以交互,还能使多个用户从不同的终端同时操作主机。这样的操作系统被称作分时操作系统,它的出现对批处理操作系统是个极大的挑战。许多人尝试开发分时操作系统, 其中包括一些大学的研究项目和商业项目。开发了他们自己的一个操作系统—— UNIX。

UNIX 最初免费发布并因此在大学里受到欢迎。后来,UNIX 实现了 TCP/IP 协议栈,成为了早期工作站的操作系统的一个流行选择。

1990年,UNIX 在服务器市场尤其是大学校园成为主流操作系统,许多校园都有 UNIX 主机,当然还包括一些研究它的计算机系的学生。接触 UNIX ,他希望能在自己的电脑上运行一个类似的操作系统。可是 UNIX 的商业版本非常昂贵,于是他从 MINIX 开始入手,计划开发一个比 MINIX 性能更好的操作系统。很快他就开始了自己的开发工作。他第一次发行的版本很快吸引了一些黑客。尽管最初的 Linux 并没有多少用处,但由于一些黑客的加入使它很快就具有了许多吸引人的特性,甚至一些对操作系统开发不感兴趣的人也开始关注它。

Linux 本身只是操作系统的内核。内核是使其他程序能够运行的基础。它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本(.bat文件)。 Linus没有自己去开发这些应用程序,而是使用已有的*软件。这减少了搭建开发环境而所需花费的工作量。实际上,他经常改写内核,使得那些程序能更容易在 Linux 上运行。许多重要的软件,包括 C 编译器,都来自于*软件基金 GNU 项目。GNU 项目开始于 1984 年,目的是为了开发一个完全类似于 UNIX 的免费操作系统。为了表扬 GNU 对 Linux 的贡献,许多人把 Linux 称为GNU/Linux(GNU 有自己的内核)。

1992-1993 年,Linux 内核具备了挑战 UNIX 的所有本质特性,包括 TCP/IP 网络,图形界面系统(X window),Linux 同样也吸引了许多行业的关注。一些小的公司开发和发行Linux,有几十个 Linux 用户社区成立。1994 年,Linux 杂志也开始发行。

Linux 内核 1.0 在 1994 年三月发布,内核的发布要经历许多开发周期,直至到达一个稳定的版本。

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

1.免费与收费2.软件与支持3.安全性4.使用习惯5.可定制6.应用范畴

 pasting

五、如何学习 Linux

学习心态,注重基础,从头开始。 

实验二 基本概念及操作

 

一、Linux 桌面环境介绍

 

相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 Unix/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,这也意味着在 Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。

三、Linux终端

 

1.Terminal(终端)

通常在我们使用 Linux 时,我们并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成接受用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面几个比较常见的终端模拟器,例如 gnome-terminal,kconsole,xterm,rxvt,kvt,nxterm 和 eterm,目前我们的实验中的终端程序是 xfce 桌面环境自带的 xfce-terminal。不过要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。

Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,在物理机系统上你可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换,不过在我们的在线实验环境中可能无法切换,因为特殊功能按键会被你主机系统劫持。当你切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]+[Alt]+[F7]来完成。

 

 

 

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.命令行操作体验

如图,双击桌面上的Xface终端图标,打开终端,打开终端后会自动运行 Shell 程序,然后我们就可以输入命令让系统来执行了:

   

 

 

1).重要快捷键:

 

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

[Tab]

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

 

 

[Ctrl+c]

 

想想你有没有遇到这种情况,当你在 Linux 命令行中无意输入了一个不知道的命令,或者错误的使用了一个命令,导致在终端里出现了你无法预料的情况,比如,只有光标在闪烁无法继续输入命令,或者不停地在输出一大堆你不想要的结果。你想要立即停止并恢复到你可控的状态,那该怎么办呢。这时候你就可以使用Ctrl+c键来强行终止当前程序(你可以放心它并不会使终端退出)

 pasting

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

 

 

 

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

 

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

3).学会使用通配符

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

  

 

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

 

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

 

 

 

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的缩写获取帮助

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

一、Linux 用户管理

1.用户查询 

 who am i 或者

$ who mom likes

who 命令其它常用参数

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

 2.创建用户

$ sudo adduser lilei

   

 

 

现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:

 

$ su -l lilei

 

3.用户组


方法一:使用groups命令

$ groups shiyanlou

 

 

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

 

$ cat /etc/group | sort 

这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,

将其它用户加入 sudo 用户组

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

$ su -l lilei $ sudo ls

 

 

4.删除用户

 

删除用户是很简单的事:

$ sudo deluser lilei --remove-home 

 

 

三、linux文件权限

 

1、查看文件权限:用ls 命令来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下。

2Linux 里面一切皆文件

3、文件大小:以 inode 结点大小为单位来表示的文件大小,可以给 ls 加上 -lh 参数来更直观的查看文件的大小。

 

 

3.修改文件权限

如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,这里有两种方式:

  • 方式一:二进制数字表示

每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)就对应这一个 "rwx",也就是一个 \'7\' ,所以如果我要将文件“iphone6”的权限改为只有我自己可以用那么就这样:

为了演示,我先在文件里加点内容:

$ echo "echo \"hello shiyanlou\"" > iphone6 

然后修改权限:

$ chmod 700 iphone6 

现在,其他用户已经不能读这个“iphone6”文件了:

  • 方式二:加减赋值操作

完成上述相同的效果,你可以:

$ chmod go-rw iphone 

\'g\'\'o\'还有\'u\',分别表示group,others,user,\'+\',\'-\' 就分别表示增加和去掉相应的权限。

实验四、linux目录结构及文件基本操作

1、Linux 的目录与 Windows 的目录的区别: 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘...)及分区的来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。然而 UNIX/Linux是以目录为主的, Linux 是以树形目录结构的形式来构建整个系统的,可以理解为一个用户可操作系统的骨架。虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说 Linux 的磁盘是“挂在”(挂载在)目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。

2、FHS 标准

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

FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。

3、linux文件基本操作

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

使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性

使用 -p 参数,同时创建父目录(这在有时候安装软件,配置安装路径时非常有用):

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

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

$ cp -r father family

 

 

 

3.删除

 

删除文件

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

$ rm test 

有时候你会遇到想要删除一些为只读权限的文件,直接使用rm删除会显示一个提示,如下:

你如果想忽略这提示,直接删除文件,可以使用-f参数强制删除:

$ rm -f test 

删除目录

跟复制目录一样,要删除一个目录,也需要加上-r-R参数:

$ rm -r family 

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

移动文件

使用mv(move or rename files)命令,移动文件(剪切)。将文件"file1"移动到"Documents"目录mv 源目录文件 目的目录

$ mv file1 Documents 

重命名文件

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

$ mv file1 myfile 

批量重命名

要实现批量重命名,mv 命令就有点力不从心了,我们可以使用一个看起来更专业的命令rename来实现。不过它是要用 perl 正则表达式来作为参数,关于正则表达式我们要在后面才会介绍到,这里只做演示,你只要记得这个rename命令可以批量重命名就好了,以后再重新学习也不会有任何问题,毕竟你已经掌握了一个更常用的mv命令。

# 使用通配符批量创建 5 个文件 $ touch file{1..5}.txt  # 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件 $ rename \'s/\.txt/\.c/\' *.txt  # 批量将这 5 个文件,文件名改为大写 $ rename \'y/a-z/A-Z/\' *.c 

简单解释下上面的命令,rename是先使用第二个参数的通配符匹配所有后缀为.txt的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的.txt后缀替换为.c,这一点在我们后面学习了sed命令后,相信你会更好的理解。

5.查看文件

使用cat,tacnl命令查看文件

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

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

比如我们要查看之前从"/etc"目录下拷贝来的passwd文件:

$ cat passwd 

可以加上-n参数显示行号:

$ cat -n passwd

 

 

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

 

1、变量:所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

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

3、搜索文件

与搜索相关的命令常用的有如下几个whereis,which,find,locate。

whereis简单快速:这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。

locate快而全:通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次updatedb命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型.

which小而精:which本身是 Shell 内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令

find精而细:find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。

七、文件打包和解压缩

1、zip压缩打包程序

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

 

 

  • 使用zip打包文件夹:

 

$ zip -r -q -o shiyanlou.zip /home/shiyanlou $ du -h shiyanlou.zip $ file shiyanlou.zip

 

 

使用-e参数可以创建加密压缩包:

 

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

使用-O(英文字母,大写o)参数指定编码类型:unzip -O GBK 中文压缩文件.zip

 

 

3.rar打包压缩命令:

 

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

$ rm *.zip

$ rar a shiyanlou.rar .

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

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

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

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

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

去掉路径解压:$ mkdir tmp

$ unrar e shiyanlou.rar tmp/

4.tar打包工具

tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便。

创建一个 tar 包:$ tar -cf shiyanlou.tar ~

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

$ mkdir tardir

$ tar -xf shiyanlou.tar -C tardir

只查看不解包文件-t参数:$ tar -tf shiyanlou.tar

 

 

实验八、简单文件系统操作

1.查看磁盘和目录的容量:使用 df 命令查看磁盘的容量

使用 du 命令查看目录的容量,不要混淆

2.创建虚拟磁盘

dd 命令:用于转换和复制文件,不过它的复制不同于cp。之前提到过关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,只要在各自的驱动程序中实现了对应的功能,dd 也可以读取自和/或写入到这些文件。这样,dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在 ASCII 与 EBCDIC 编码间互换。

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

用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态。又因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。

何挂载真正的磁盘到目录树,mount命令的一般格式如下:

mount [options] [source] [directory]

 mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]

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

# 命令格式 sudo umount 已挂载设备名或者挂载点,如: $ sudo umount /mnt

 

 

使用 fdisk 为磁盘分区(关于分区的一些概念不清楚的用户请参看主引导记录

 

同样因为环境原因中没有物理磁盘,也无法创建虚拟磁盘的原因我们就无法实验练习使用该命令了,下面我将以我的物理主机为例讲解如何为磁盘分区。

# 查看硬盘分区表信息 $ sudo fdisk -l

 

 

使用 losetup 命令建立镜像与回环设备的关联

 

$ sudo losetup /dev/loop0 virtual.img # 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备  # 解除设备关联 $ sudo losetup -d /dev/loop0

 

 

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

 

1.顺序执行多条命令

$ sudo apt-get update;sudo apt-get install some-tool;some-tool

# 让它自己运行

2.有选择的执行命令

&&用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行

||是与&&相反的控制效果,当上一条命令执行结果为≠0($?≠0)时则执行它后面的命令

3、管道:是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

$ ls -al /etc | less:通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。

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

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

grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找, grep命令的一般形式为:grep [命令选项]... 用于匹配的表达式 [文件]...

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

6.sort 排序命令:将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。

默认为字典排序:$ cat /etc/passswd | sort

反转排序:$ cat /etc/passwd | sort -r

按特定字段排序:$ cat /etc/passwd | sort -t\':\' -k 3

6. uniq 去重命令:用于过滤或者输出重复行。

实验十、简单的文本处理

1.文本处理命令

1)tr 命令:用来删除一段文本信息中的某些文字。或者将其进行转换。tr [option]...SET1 [SET2]

常用的选项有:

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

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

2.col 命令:将Tab换成对等数量的空格建,或反转这个操作。col [option]

常用的选项有:

-x  将Tab转换为空格

-h  将空格转换为Tab(默认选项

3.join命令:将两个文件中包含相同内容的那一行合并在一起。join [option]... file1 file2

常用的选项有:

-t  指定分隔符,默认为空格

-i  忽略大小写的差异

-1  指明第一个文件要用哪个字段来对比,,默认对比第一个字段

-2  指明第二个文件要用哪个字段来对比,,默认对比第一个字段

4.paste命令:在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。paste [option] file...

常用的选项有:

-d  指定合并的分隔符,默认为Tab

-s  不合并到一行,每个文件为一行

实验十一、数据流重定向

1.数据流重定向

文件描述符 设备文件   说明

0   /dev/stdin 标准输入

1   /dev/stdout   标准输出

2   /dev/stderr   标准错误

文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。

将一个文件作为命令的输入,标准输出作为命令的输出: cat Documents/test.c\~

将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出:$ echo \'hi\' | cat

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

$ echo \'hello shiyanlou\' > redirect

$ cat redirect

2.标准错误重定向

3.使用tee命令

同时重定向到多个文件

除了将需要将输出重定向到文件之外也需要将信息打印在终端,那么你可以使用tee命令来实现:$ echo \'hello shiyanlou\' | tee hello

 

 

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

 

7.完全屏蔽命令的输出

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

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

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

8.使用 xargs 分割参数列表

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

十二、正则表达式

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

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

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

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

范围和优先级:()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。

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

在通过grep命令使用正则表达式之前,先介绍一下它的常用参数:

 

十三、Linux 下软件安装

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

在线安装

从磁盘安装deb软件包

从二进制软件包安装

从源代码编译安装

2. apt 包管理工具介绍

APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。

软件源镜像服务器

软件源

我们需要定期从服务器上下载一个软件包列表,使用 sudo apt-get update 命令来保持本地的软件包列表是最新的(有时你也需要手动执行这个操作,比如更换了软件源),而这个表里会有软件依赖信息的记录,对于软件依赖,我举个例子:我们安装 w3m 软件的时候,而这个软件需要 libgc1c2 这个软件包才能正常工作,这个时候 apt-get 在安装软件的时候会一并替我们安装了,以保证 w3m 能正常的工作。

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
6.卸载软件sudo apt-get remove w3m ,系统会有一个确认的操作。
或者,你可以执行
# 不保留配置文件的移除
$ sudo apt-get purge w3m
# 或者 sudo apt-get --purge remove
# 移除不再需要的被依赖的软件包
$ sudo apt-get autoremove
7.软件搜索
sudo apt-cache search softname1 softname2 softname3……
apt-cache 命令则是针对本地数据进行相关操作的工具,search 顾名思义在本地的数据库中寻找有关 softname1 softname2 …… 相关软件的信息。现在我们试试搜索一下之前我们安装的软件 w3m ,如图:
十四、使用 dpkg 从本地磁盘安装 deb 软件包
1.dpkg 介绍
dpkg 本身是一个底层的工具。上层的工具,像是 APT,被用于从远程获取软件包以及处理复杂的软件包关系。"dpkg"是"Debian Package"的简写。
dpkg常用参数介绍:
参数   说明
-i  安装指定deb包
-R  后面加上目录名,用于安装该目录下的所有deb安装包
-r  remove,移除某个已安装的软件包
-I  显示deb包文件的信息
-s  显示已安装软件的信息
-S  搜索已安装的软件包
-L  显示已安装软件包的目录信息
2.使用dpkg安装deb软件包
# 使用dpkg安装
$ sudo dpkg -i emacs24_24.3+1-4ubuntu1_amd64.deb
我们将如何解决这个错误了,这就要用到apt-get了,使用它的-f参数了,修复依赖关系的安装
$ sudo apt-get -f install
3.查看已安装软件包的安装目录
使用dpkg -L查看deb包目录信息:$ sudo dpkg -L emacs