Linux 基础入门(新版)”实验报告一~十二

实验报告

日期: 2015年9月15日javascript

1、实验的目的与要求css

      熟练地使用 Linux,本实验介绍 Linux 基本操做,shell 环境下的经常使用命令。java

2、主要内容linux

1.Linux 基础入门& 2.基本概念及操做

      认真看过这篇linux系统简介文章,对于这样一个免费、高效的操做系统有了一个初步的认识。但愿能在本学期对于linux操做系统有很好的认识和操做,使用。 同时,对于新认识的一些历史中开发和修复各个操做系统的前辈表示深深地敬佩。nginx

 

 

2.sql

基本概念及操做

主要过程:shell

       (1)实验楼环境介绍

       (2)经常使用 Shell 命令及快捷键

              

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

                                     Shell 经常使用通配符:数据库

字符 含义
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[!list] 匹配 除list 中的任意单一字符之外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
{c2..c2} 匹配 c1-c2 中所有字符 如{1..10}

       (3)Linux 使用小技巧

man 手册区段 说明
1 通常命令
2 系统调用
3 库函数,涵盖了C标准函数库
4 特殊文件(一般是/dev中的设备)和驱动程序
5 文件格式和约定
6 游戏和屏保
7 杂项
8 系统管理命令和守护进程

       (4)使用如下代码输出图形字符

  • $ sudo apt-get update;sudo apt-get install sysvbanner toilet figlet
  • $ banner feels good
  • $ toilet feels good
  • $ figlet feels good

3.用户及文件权限管理

(1)查看用户apache

        who [options] [files]vim

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

(2)建立用户

sudo adduser 【name】

指令:adduser = add user

         add :添加

         user:用户

(3)用户组

方法一:使用groups命令

例子:groups shiyanlou

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

例子:cat /etc/group | sort

注:如须要命令过滤则 cat /etc/group | grep -E "shiyanlou|sudo"

etc/group 文件格式说明

(4)将其它用户加入 sudo 用户组

例子:sudo usermod -G sudo lilei

指令: usermod = user mod

          user : 用户

           mod : 模型

(5)删除用户

例子:sudo deluser lilei --remove-home

指令: deluser = del user、 remove

         del user :删除用户

         remove:删除

(6)查看文件权限

  • 显示全部文件大小,并以普通人类能看懂的方式呈现:$ ls -AsSh
  • 查看某一个目录的完整属性,而不是显示目录里面的文件属性:$ ls -dl <目录名>

(7)修改文件权限:

  • 方式一:二进制数字表示
  • 加减赋值操做。

做业:

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

(1)Linux 目录结构

Linux 是以树形目录结构的形式来构建整个系统的,能够理解为一个用户可操做系统的骨架。虽然本质上不管是目录结构仍是操做系统内核都是存储在磁盘上的,但从逻辑上来讲 Linux 的磁盘是“挂在”(挂载在)目录上的,每个目录不只能使用本地磁盘分区的文件系统,也可使用网络上的文件系统。 

1.FHS 标准(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)

FHS 定义了系统中每一个区域的用途、所须要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。

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

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

2.目录路径

路径

使用 cd 命令能够切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录, - 表示上一次所在目录,~ 一般表示当前用户的"home"目录。使用 pwd 命令能够获取当前所在路径(绝对路径)。

(注意,以 . 开头的文件都是隐藏文件,因此这两个目录必然也是隐藏的,你可使用 ls -a 命令查看隐藏文件)

绝对路径:以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin

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

提示:在进行目录切换的过程当中请多使用 Tab 键自动补全,可避免输入错误,连续按两次Tab能够显示所有候选结果

(二)Linux 文件的基本操做

1.新建空白文件

使用 touch 命令建立空白文件,关于 touch 命令,其主要是来更改已有文件的时间戳的,但其在不加任何参数的状况下,只指定一个文件名,则能够建立一个为指定文件名的空白文件。

例子:touch test

新建目录

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

使用 -p 参数,同时建立父目录(若是不存在该父目录),以下咱们同时建立一个多级目录(这在有时候安装软件,配置安装路径时很是有用):mkdir -p father/son/grandson

2.复制文件

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

如:cp test father/son/grandson

复制目录

若是直接使用cp命令,复制一个目录的话,会出现以下错误:

图片描述

要成功复制目录须要加上-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)命令,移动文件(剪切)。

格式:mv 源目录文件 目的目录

如:mv file1 Documents

重命名文件

格式:mv 旧的文件名 新的文件名

如:mv file1 myfile

5.查看文件

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

6.查看文件类型

如:file /bin/ls

7.编辑文件

Linux和Windows都用vim+gcc

5.环境变量与文件查找

(1)变量定义

#定义变量 declare $变量名 #或者直接赋值也自动定义变量,注意变量以前不带"$" 变量名=值 #打印变量的值,"$"表明引用变量的值 echo $变量名 

在全部的 UNIX 和类 UNIX 系统中,每一个进程都有其各自的环境变量设置,且默认状况下,当一个进程被建立时,处理建立过程当中明确指定的话,它将继承其父进程的绝大部分环境设置。

一般咱们会涉及到的环境变量有三种:

  • 当前 Shell 进程私有用户自定义变量,如上面咱们建立的 temp 变量,只在当前 Shell 中有效。
  • Shell 自己内建的变量。
  • 从自定义变量导出的环境变量。
  • 输出环境变量set| 显示当前 Shell 全部环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
  • env| 显示与当前用户相关的环境变量,还可让命令在指定环境中运行
  • export| 显示从 Shell 中导出成环境变量的变量,也能经过它将自定义变量导出为环境变量
#将普通变量输出为环境变量,能被子进程继承 export 变量名 
#比较文件的命令 vimdiff 1.txt 2.txt 3.txt .... 

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

PATH环境变量设置命令搜索路径

#输出当前命令搜索路径的设置 echo $PATH #./程序名 表示执行当前目录下的指定程序 

PATH中临时添加自定义路径,用冒号链接路径

PATH=$PATH:/home/shiyanlou/Code 

若是永久添加须要修改配置文件 zsh是.zshrc bash是.bashrc 本次修改用户目录下的文件

$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc 

(3)变量修改

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

变量设置方式 说明
{变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
{变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
{变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
{变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
{变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
{变量名//旧的字串/新的字串} 将符合旧字串的所有字串替换为新的字串

(4)变量删除

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

unset temp 

(5)让环境变量当即生效

source .zshrc 

或者

 . ./.zshrc 

注意第二种方式必须指定完整的绝对或相对路径

(6)搜索文件

与搜索相关的命令经常使用的有以下几个whereis,which,find,locate

  • whereis搜索很快,由于它并无从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。
  • locate,经过"/var/lib/mlocate/mlocate.db"数据库查找,系统会使用定时任务天天自动执行updatedb命令更新一次该数据库,有时须要手动执行一次updatedb命令将新的文件数据添加进数据库,它能够用来查找指定目录下的不一样文件类型,能够递归子目录进行查找,如查找 /etc 下全部以 sh 开头的文件:
$ locate /etc/sh $ locate /home/shiyanlou/Code/\*.txt 

经测试好像locate 后面要跟绝对路径,另外""必须用\来转义

-c 是仅统计数目 -i 是不区分大小写

 which它只从PATH环境变量指定的路径中去搜索命令

which man
#查找系统中全部文件名中含D且在第三位的.txt文件 find / -name \?\?D\*.txt #显示结果含有权限不够的信息,能够以下屏蔽 find / -name \?\?D\*.txt 2>/dev/null #还能够加sudo执行 #另外,文件名加引号,能够直接用?或*,不用转义 
#查找大小在10k-20k之间的*.txt find / -name '*.txt' -size +10k -size -20k
#查找空目录和空文件
find . -empty #查找实验楼组的文件 find . -group shiyanlou #在/tmp目录中查找大于100000000字节而且在48小时内修改的某个文件 find /tmp -size +10000000c -and -mtime +2 #在/tmp目录中查找全部不属于panda的文件 find /tmp ! -user panda #查找属于shiyanlou用户的文件并显示文件信息 find . -user shiyanlou -ls #删除找到的*.txt find . -name '*.txt' -exec rm {} \; #以上 \; 是为了转义;字符

6.文件打包与解压缩

(1)经常使用压缩包文件格式

  • *.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程序压缩的文件

(2)zip压缩打包命令

  1. 压缩打包:
    zip -r -【(1~9)压缩级别,1为快速打包,包体积大,9耗时长,体积小】-q -o 压缩包名 目录路径
    -r:地鬼打包子目录所有内容
    -q:安静模式
    -o:输出文件,其后紧跟打包输出文件名
  2. 查看打包后文件大小 du -h 文件名du -h -d 0 *.zip ~ | sort分别查看多个.zip
    -h --human readable
    -d --max-depth
  3. 建立加密zip包 zip -r -e -o 压缩包名 路径
  4. windows采用CR+LF换行,LINUX采用LF换行,为了使在LINUx压缩的包在windows上兼容,压缩时采用:
    zip -r -l -o 压缩包名 路径
    -l将LF转换为CR+LF

(3)解压zip包

  1. 使用unzip命令:unzip XX.zip
  2. 将文件解压到指定目录: unzip -q xx.zip
    -d 目录名
  3. 不解压仅仅查看: unzip -l xx.zip
  4. windows中文采用GBK编码,LINUX相爱用UTF-8,解决解压的兼容问题,解压是指定采用编码类型:
    unzip -O GBK 中文压缩文件.zip

(4)rar打包压缩命令

  1. rar压缩命令: rar命令没有参数-
    参数a:rar a xx.rar 添加一个目录~到xx.rar
    参数d:rar d xx.rar 文件名 从xx.rar删除文件
    l:rar l xx.rar 查看不解压
  2. unrar解压命令 x:unrar x xx.rar 全路径解压
    e:unrar e xx.rar 目录 解压到指定目录

(5)tar打包工具

-c:建立一个tar包文件
-f:指定建立的文件名
-v:非安静模式
tar -cf shiyanlou.tar ~
-x:解压一个tar
-C:解压到指定路径的已存在目录
tar -xf xx.tar -C 目录
-t:只查看不解包
tar -tf xx.rar
-p:保存文件属性
-h保存设备链接指向的源文件
tar -cphf xx.tar 要压缩目录
-z:.tar.gz
-J:tar.xz
-j:tar.bz2

(6)做业

install libaa-bin

install aafire

aafire

7.Linux 目录结构及文件基本操做

(1)目录

$ cd .. #进入上一级目录 $ cd ~ #进入home目录 $ pwd #查看当前目录 $ cd /usr/local/bin #绝对目录 $ cd ../../usr/local/bin #相对目录 

(2)新建

$ touch test #新建一个test空白文件 $ mkdir mydir #新建一个mydir空目录 $ mkdir -p father/son/grandson #使用-p同时建立一个多级目录 

(3)复制

$ cp test father/son/grandson #将test文件复制到/home/shiyanlou/father/son/grandson目录中 $ mkdir family $ cp -r father family #将father目录里的全部包含子目录,复制到family 

(4)删除

$ rm test #删除test文件 $ rm -f test #强制删除test文件 $ rm -r family #删除family目录 

(5)移动文件

mv 源目录文件 目的目录文件

$ mkdir Documents $ touch file1 $ mv file1 Documents #将file1移动到Documents目录 

重命名 mv 旧的文件名 新文件名

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

(6)查看文件

使用cat(正序) 、tac(倒序) 、nl命令查看文件,

$ cp /etc/passwd .                       #从etc目录下拷贝passwd文件
$ cat -n passwd                           #打印passwd内容,-n显示行号

$ head /etc/passwd                    #head显示头十行
$ tail /etc/passwd                       #tail 显示尾十行
$ head -n 1 /etc/passwd             #只显示第一行
$ tail -n 1 etc/passwd                 #只显示最后一行

(7)查看文件类型

$ file /bin/ls

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

(1)命令执行顺序的控制

a.顺序执行多条命令

顺序执行多个任务用 ; 号

-例如$ touch test;echo "hehe" >> test;cat test

b.有选择的执行命令

  • 从$?环境变量获取上一次命令的返回结果$ echo $?
  • $ [order1] && [oder2] #当[order1]的返回值==0,执行[order2]
  • $ [order1] || [orser2] #当[order1]的返回值!=0,执行[order2]

(2)管道

a.试用

例如将'$ ls -al /etc'的输出输出到less中查看

  • '$ ls -al /etc | less'

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

打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录:

  • $ cut /etc/passwd -d ':' -f 1,6

    打印/etc/passwd文件中每一行的前N个字符:

    # 前五个(包含第五个) $ cut /etc/passwd -c -5# 前五个以后的(包含第五个) $ cut /etc/passwd -c 5-# 第五个 $ cut /etc/passwd -c 5# 2到5之间的(包含第五个) $ cut /etc/passwd -c 2-5

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

grep命令的通常形式为:

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

例子

  • 1:搜索/home/shiyanlou目录下全部包含"shiyanlou"的全部文本文件,并显示出如今文本中的行号:grep -rnI "shiyanlou" ~-r 参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。
  • 2: 查看环境变量中以"yanlou"结尾的字符串export | grep ".*yanlou$"其中$就表示一行的末尾。

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

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

  • $ wc /etc/passwd
  • 分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数:# 行数 $ wc -l /etc/passwd# 单词数 $ wc -w /etc/passwd# 字节数 $ wc -c /etc/passwd# 字符数 $ wc -m /etc/passwd# 最长行字节数 $ wc -L /etc/passwd

e.sort 排序命令

-将输入按照必定方式排序,而后再输出
  • 默认为字典排序:$ cat /etc/passswd | sort
  • 反转排序:$ cat /etc/passwd | sort -r
  • 按特定字段排序:$ cat /etc/passwd | sort -t':' -k 3上面的-t参数用于指定字段的分隔符,这里是以":"做为分隔符;-k 字段号用于指定对哪个字段进行排序

f. uniq 去重命令

history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq #由于uniq命令只能去连续重复的行,不是全文去重因此加上sort效果更佳

 

9.简单的文本处理

(1)文本处理命令

a.tr 命令

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

    使用方式:

    tr [option]...SET1 [SET2]

    经常使用的选项有:

  • 选项 说明
    -d 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配
    -s 去除set1指定的在输入文本中连续并重复的字符

    操做举例:

  • 删除 "hello shiyanlou" 中全部的'o','l','h'echo 'hello shiyanlou' | tr -d 'olh'
  • 将"hello" 中的ll,去重为一个lecho 'hello' | tr -s 'l'
  • 将输入文本,所有转换为大写或小写输出 `$ cat /etc/passwd | tr '[:lower:]' '[:upper:]

    '[:lower:]' '[:upper:]'你也能够简单的写做'[a-z]' '[A-Z]',固然反过来将大写变小写也是能够的`

b.col 命令

  • col 命令能够将Tab换成对等数量的空格建,或反转这个操做。

    使用方式:

    col [option]

    经常使用的选项有:

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

    操做举例:

  • 查看 /etc/protocols 中的不可见字符,能够看到不少 ^I ,这其实就是 Tab 转义成可见字符的符号$ cat -A /etc/protocols
  • 使用 col -x 将 /etc/protocols 中的 Tab 转换为空格,而后再使用 cat 查看,你发现 ^I 不见了$ cat /etc/protocols | col -x | cat -A

c.join命令

  • 将两个文件中包含相同内容的那一行合并在一块儿

    使用方式:

    join [option]... file1 file2

    经常使用的选项有:

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

d.paste命令

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

使用方式:

paste [option] file...

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

操做举例:

echo hello > file1echo shiyanlou > file2echo www.shiyanlou.com > file3$ paste -d ':' file1 file2 file3$ paste -s file1 file2 file3

e.做业

一、#从dos 到unix文本格式转换$ cat -A [dos] | tr -d '^M' | cat -A [dos]-

二、sudo apt-get install ninvaders

 

十、数据流重定向

(1).简单的重定向

Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为

  • stdin(标准输入,对应于你在终端的输入)

  • stdout(标准输出,对应于终端的输出)

  • stderr(标准错误输出,对应于终端的输出)

    PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接

(2).标准错误重定向

-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。

隐藏某些错误或者警告

# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

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

-除了将须要将输出重定向到文件以外也须要将信息打印在终端echo 'hello shiyanlou' | tee hello

(5).永久重定向

-使用exec命令实现“永久”重定向# 先开启一个子 Shell$ zsh# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件exec 1>somefile# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)$ lsexit$ cat somefile

(6).建立输出文件描述符

-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符

使用exec命令能够建立新的文件描述符:

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

(7).关闭文件描述符

-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:exec 3>&-cd /dev/fd;ls -Al;cd -

(8).彻底屏蔽命令的输出

-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。

咱们能够利用设个/dev/null屏蔽命令的输出:

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

(9).使用 xargs 分割参数列表

-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(10).做业

$ sudo apt-get install caca-utils$ cacaview <pic_file>$ cacademo$ cacafire

 

11.数据流重定向

(1)简单的重定向

Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为

  • stdin(标准输入,对应于你在终端的输入)

  • stdout(标准输出,对应于终端的输出)

  • stderr(标准错误输出,对应于终端的输出)

    PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接

(2)标准错误重定向

-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。

隐藏某些错误或者警告

# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

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

-除了将须要将输出重定向到文件以外也须要将信息打印在终端echo 'hello shiyanlou' | tee hello

(4)永久重定向

-使用exec命令实现“永久”重定向(效果见附图)# 先开启一个子 Shell$ zsh# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件exec 1>somefile# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)$ lsexit$ cat somefile

(5)建立输出文件描述符

-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符

使用exec命令能够建立新的文件描述符:

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

(6)关闭文件描述符

-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:exec 3>&-cd /dev/fd;ls -Al;cd -

(7)彻底屏蔽命令的输出

-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。

咱们能够利用设个/dev/null屏蔽命令的输出:

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

(8)使用 xargs 分割参数列表

-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(9)做业

$ sudo apt-get install caca-utils$ cacaview <pic_file>$ cacademo$ cacafire

12.数据流重定向

(1)简单的重定向

Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为

  • stdin(标准输入,对应于你在终端的输入)

  • stdout(标准输出,对应于终端的输出)

  • stderr(标准错误输出,对应于终端的输出)

    PS管道默认是链接前一个命令的输出到下一个命令的输入,而重定向一般是须要一个文件来创建两个命令的链接

(2)标准错误重定向

-标准输出和标准错误都被指向伪终端的屏幕显示,因此咱们常常看到的一个命令的输出一般是同时包含了标准输出和标准错误的结果的。

隐藏某些错误或者警告

# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面$ cat Documents/test.c\~ hello.c >somefile 2>&1# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件$ cat Documents/test.c\~ hello.c &>somefilehell

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

-除了将须要将输出重定向到文件以外也须要将信息打印在终端$ echo 'hello shiyanlou' | tee hello

(4)永久重定向

-使用exec命令实现“永久”重定向(效果见附图)# 先开启一个子 Shell$ zsh# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件$ exec 1>somefile# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么作)$ ls$ exit$ cat somefile

(5)建立输出文件描述符

-默认在 Shell 中能够有9个打开的文件描述符,上面咱们使用了也是它默认提供的0,1,2号文件描述符

使用exec命令能够建立新的文件描述符:

$ zsh$ exec 3>somefile# 先进入目录,再查看,不然你可能不能获得正确的结果,而后再回到上一次的目录

$ cd /dev/fd/;ls -Al;cd -# 注意下面的命令>与&之间不该该有空格,若是有空格则会出错

$ echo "this is test" >&3$ cat somefile$ exit

(6)关闭文件描述符

-如上面咱们打开的3号文件描述符,可使用以下操做将它关闭:$ exec 3>&-$ cd /dev/fd;ls -Al;cd -

(7)彻底屏蔽命令的输出

-在 Linux 中有一个被成为“黑洞”的设备文件,因此导入它的数据都将被“吞噬”。/dev/null,或称空设备,是一个特殊的设备文件,它一般被用于丢弃不须要的输出流,或做为用于输入流的空文件,这些操做一般由重定向完成。读取它则会当即获得一个EOF。

咱们能够利用设个/dev/null屏蔽命令的输出:

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

(8)使用 xargs 分割参数列表

-xargs 是一条 UNIX 和类 UNIX 操做系统的经常使用命令。它的做用是将参数列表转换成小块分段传递给其余命令,以免参数列表过长的问题。 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。$ cut -d: -f1 < /etc/passwd | sort | xargs echo

(9)做业

$ sudo apt-get install caca-utils

$ cacaview <pic_file>

$ cacademo$ cacafire

3、调试

把Linux 下软件安装放在这一部分,做为操做实践的部分。

4、心得体会

虽然是最后时间作的很仓促的实验,但仍是感受收获了不少。学会了shell的一些操做指令,了解了linux系统的文件以及一些不一样于的windows的特性。更多的学习内容还要继续,加油努力吧!!!

5、附件

相关文章
相关标签/搜索