鸟哥的Linux基础篇整理---3

来源:互联网 发布:网络开发平台 编辑:程序博客网 时间:2024/06/06 03:01
1、压缩相关整理。
      压缩技术:计算机一般都是用byte进行存储的,而很多时候某一个字符占不满一个byte,比如1在一个字节
表示的时候只会使用最后一位,然后就利用一些复杂的计算方式, 将这些没有使用到的空丢出来,以让文件占
用的空间变小。
     另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的,然后让大家共用重复的!
     任何压缩过后的文件无法被操作系统直接使用,所以需要解压缩。
     压缩文件的扩展名很多:*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,注意文件的具体属性(权限等)和这些后缀
其实没什么关系,这些后缀只是用来标示使用的何种技术进行的文件压缩。这样的话我们就知道应该用什么技
术进行解压缩。
     Linux 上常见的压缩指令就是 gzip, bzip2 以及最新的 xz ,至于 compress 已经退流行了。为了支持windows 常见的 zip,其实 Linux 也早就有 zip 指令了! gzip 是由 GNU 计划所开发出来的压缩指令,该指令已经取代了 compress 。后来 GNU 又开发出 bzip2 及 xz 这几个压缩比更好的压缩指令!不过,这些指令通常仅能针对一个文件来压缩与解压缩,如此一来, 每次压缩与解压缩都要一大堆文件,岂不烦人?此时,那个所谓的打包软件指令tar就显的很重要啦!tar 可以将很多文件打包成为一个文件。
      1)、gzip:目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件,后缀*.gz
            格式:命令  参数 文件名
  1. 常用参数:
  2. -d :解压压缩的时候使用
  3. -v :可以显示出原文件/压缩文件案的压缩比等信息;
  4. -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
  1. cnbjlx24729:~/Downloads$ gzip -v Java编程思想第四版完整中文高清版\(免费\).pdf
  2. Java编程思想第四版完整中文高清版(免费).pdf: 16.1% -- replaced with Java编程思想第四
  3. 版完整中文高清版(免费).pdf.gz
  4. cnbjlx24729:~/Downloads$ ls -l
  5. -rw-r--r-- 1 xp022430 domain_users 1947236 May 23 09:29 Java编程思想第四版完整中文
  6. 高清版(免费).pdf.gz
          可以看到压缩完毕以后原文件就不存在了,还有好像不能对目录使用!
          解压缩:
  1. cnbjlx24729:~/Downloads$ gzip -d Java编程思想第四版完整中文高清版\(免费\).pdf.gz
  2. cnbjlx24729:~/Downloads$ ls -l
  3. -rw-r--r-- 1 xp022430 domain_users 2320410 May 23 09:29 Java编程思想第四版完整中
  4. 文高清版(免费).pdf
       2)、bzip2、xz:压缩比更好,但只能对单独文件使用,所以需要先tar。
             bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的,基本用法和gzip相同,后缀*.bz2
  1. 常用参数:
  2. -d :解压缩的参数
  3. -z :压缩的参数 (默认值,可以不加)
  4. -v :可以显示出原文件/压缩文件案的压缩比等信息;
  5. -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
  1. xp022430@cnbjlx24729:~/Downloads$ bzip2 -vz Java编程思想第四版完整中文高清版\(免费\).pdf
  2. Java编程思想第四版完整中文高清版(免费).pdf: 1.196:1, 6.691 bits/byte, 16.36% saved, 23204
  3. 10 in, 1940764 out.
  4. xp022430@cnbjlx24729:~/Downloads$ ls -l
  5. -rw-r--r-- 1 xp022430 domain_users 1940764 May 23 09:29 Java编程思想第四版完整中文高清
  6. 版(免费).pdf.bz2
            xz这个软件的用法也跟 gzip/bzip2 几乎一模一样,压缩比更高,但是时间比较久。
  1. 常用参数
  2. -d :就是解压缩啊!
  3. -k :保留原本的文件不删除~
  4. -# :同样的,也有较佳的压缩比的意思!
         综合比较上面几个考虑到时间成本gzip较合适。且我测试的上面默认是不可以对目录进行压缩的如:
  1. xp022430@cnbjlx24729:~/Downloads$ xz LOgs/
  2. xz: LOgs/: Is a directory, skipping
         zip:兼容windows常见的压缩包
         compress:已弃用。
      3)、打包命令tar。
            tar:打包指令,可以将多个目录或文 件打包成一个大文件。打包完毕后以透过 gzip/bzip2/xz 的支持,将
该文件同时进行压缩,并且Windows的WinRAR 也支持 .tar.gz 档名的解压缩
  1. 常用参数:
  2. -c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)---压缩的时候的参数
  3. -t :察看打包文件的内容含有哪些档名,重点在察看档名就是了;---查看文件内容时候的参数
  4. -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开---解压缩式加入的参数
  5. 特别留意的是, -c, -t, -x 不可同时出现在一串指令列中,并且注意你执行的什么操作
  6. -z :透过 gzip的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
  7. -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
  8. -J :透过 xz的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
  9. 特别留意, -z, -j, -J 不可以同时出现在一串指令列中
  10. -v:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
  11. -f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
  12. -C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
          注意:tar 并不会主动的产生建立的档名,所以我们要根据参数选择好对应的文档后缀,如果zjJ参数都没
选的话,最好用后缀*.tar
  1. 例子:
  2. 缩:tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称
  3. 询:tar -ztv -f filename.tar.gz (就是查看打包了那些文件)
  4. 解压缩:tar -zxv -f filename.tar.gz -C 欲解压缩的目录
         一定要注意参数的选择:-z建议的后缀是*.tar.gz,-c:压缩的时候用;-x解压缩的时候;-t查看的时候。还有很
多的具体的用法如压缩某个目录但不包含某个文件,解压某个tar但不包含某个等等,到时候百度吧。

2、系统备份和还原的命令。
      系统备份:xfsdump
      系统还原:xfsrestore

3、Vim的一些不知道的知识点。
      在指令模式下:
             搜索:向光标之下寻找一个字符串名称为 word 的字符串。
                        例如:要在文件内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
                        向光标之上寻找一个字符串名称为 word 的字符串。
                        例如:要在文件内搜寻 vbird 这个字符串,就输入 ?vbird 即可! (常用)
                        配合如下两个键:
                                n 代表重复前一个搜寻的动作
                                N 与 n 刚好相反,为反向进行前一个搜寻动作
             跳行:直接输入 nG 如:10G移动到第10行,不用冒号(:)。
      两个重要的文件:
             1)、历史记录文件 :~/.viminfo当前用户的home目录下。
                   viminfo 会主动的将你曾经做过的行为登录下来,好让你下次可以轻松作业。
             2)、vim的配置选项文件。
                 整体vim 的设定值一般是放置在 /etc/vimrc这个文件(ubuntu在/etc/vim这),不过不建议你修改它 
             以修改 ~/.vimrc 这个文件会覆盖(预设不存在,请你自行手动建立)
              常用配置:
  1. 1)、调用命令临时设定:
  2. 设定与取消行号 :set nu/:set nonu
  3. hlsearch 就是 high light search(高亮度搜寻) :set hlsearch/:set nohlsearch
  4. 显示目前所有的环境参数设定值 :set all
  5. 是否依据程序相关语法显示不同颜色? :syntax on/:syntax off
  6. 可用以显示不同的颜色色调,预设是light :set bg=dark/:set bg=light
  7. 2)、配置文件可以永久设定
  8. 编辑配置文件:vim ~/.vimrc 。下面举几个例子:
  9. set hlsearch "高亮度反白
  10. set nu "可以在每一列的最前面显示行号啦!
  11. set bg=dark "显示不同的底色色调
  12. syntax on "进行语法检验,颜色显示。

4、Shell认识。Bourne Again SHell (简称 bash)
       shell是用户和Linux操作系统之间的接口,是一种具备特殊功能的程序。Linux中有多种shell,其中缺省使用
的是Bash。linux将 shell 独立于核心程序之外,使得它就如同一般的应用程序,可以在不影响操作系统本身的
情况下进行修改、更新版本或是添加新的功能。
      从操作系统的概念来说,对计算机下命令得透过命令(command)或是程序(program),程序有编译器(comp
iler)将程序转为二进制代码,可是命令呢?其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算
机可以了解的机械码,然后执行它。所以每个操作系统都有自己的shell。
     shell的基本工作流程:
            shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本         身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs(反正都是shell脚
      本语言写的))。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列
      表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。
      如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。正是shell进程提供
     了命令行提示符。对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。 一旦出现了shell提示符,
      就可以键入命令名称及命令所需要的参数
            注意:上面说到的应用程序是指,指令写成的应用程序。
     素有系统可用的shells在/etc/shells下面如下:
  1. root@Joey:/home/joey/Desktop# cat /etc/shells
  2. # /etc/shells: valid login shells
  3. /bin/sh
  4. /bin/dash
  5. /bin/bash
  6. /bin/rbash
         Shell的功能---history:
                bash 的功能里头,能记忆使用过的指令。通过上下按键即可调出来。存放在 ~/.bash_history 。注意
        记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在内存中,当你成功的
         注销系统后,该指令记忆才会记录到 .bash_history 当中。
               历史记录的命令:history,配合grep简直不要太好用!
  1. 常用参数:
  2. n :数字,意思是要列出最近的 n 笔命令行表.
  3. -c :将目前的 shell 中的所有 history 内容全部消除
  4. -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
  5. 则预设写入 ~/.bash_history
  6. -r :将 histfiles 的内容读到目前这个 shell history 记忆中;
  7. -w :将目前的 history 记忆内容写入 histfiles 中!   
               history配合如下命令实现快捷输入
  1. !number:执行第几笔指令的意思;
  2. !command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;
  3. !!:就是执行上一个指令(相当于按↑按键后,按 Enter)
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
  2. 2179 alias h='history | grep'
  3. 2180 h
  4. 2181 h "read"
  5. 2182 h read
  6. 2183 history --help
  7. 2184 type history
  8. 2185 history 3
  9. 2186 read -p "please input Hello :" -t 5
  10. 2187 2159
  11. 2188 history -10
  12. 2189 history 10
  13. 2190 2159
  14. 2191 history
  15. 2192 history -20
  16. 2193 history 15
  17. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !2186
  18. read -p "please input Hello :" -t 5
  19. please input Hello :aksjkad
  20. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !!
  21. read -p "please input Hello :" -t 5
  22. please input Hello :sdasd
  23. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
  24. 2181 h "read"
  25. 2182 h read
  26. 2183 history --help
  27. 2184 type history
  28. 2185 history 3
  29. 2186 read -p "please input Hello :" -t 5
  30. 2187 2159
  31. 2188 history -10
  32. 2189 history 10
  33. 2190 2159
  34. 2191 history
  35. 2192 history -20
  36. 2193 history 15
  37. 2194 read -p "please input Hello :" -t 5
  38. 2195 history 15
  39. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !type
  40. type history
  41. history is a shell builtin
                同一账号同时多次登入的 history 写入问题:就是好几个账户同时登陆,然后写入,因为等到注销时
         才会更新记录文件,其它的被后来的最后一个 bash 所覆盖更新了
         Shell的功能---命令与文件补全功能(Tab)
               就是按Tab键会自动补全。
         Shell的功能---命令别名设定功能: (alias)
                在命令行输入alias,就可以看出那些命令有别名了
  1. xp022430@cnbjlx24729:~$ alias
  2. alias egrep='egrep --color=auto'
  3. alias fgrep='fgrep --color=auto'
  4. alias grep='grep --color=auto'
  5. alias l='ls -CF'
  6. alias la='ls -A'
  7. alias ll='ls -alF'
  8. alias ls='ls --color=auto'
                设置别名:(注意用引号括起来)
  1. xp022430@cnbjlx24729:~$ alias lm="ls -la"
  2. xp022430@cnbjlx24729:~$ alias
  3. ...
  4. alias lm='ls -la'
              unalias lm 移除别名.
                    需要注意的是,通过这样设置的别名,只是暂时在当前的shell端口起作用,一旦关闭就不起作用
              了,想要持久生效就需要你在相应的配置文件中修改,下面说到环境配置时一块。
          Shell的功能---程序化脚本: (shell scripts)
                 可以将你平时管理系统常需要下达的连续指令写成一个文件,到时候可以一键执行方便很多。
          Shell的功能---通配符: (Wildcard)
                  除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与指令下达,就是类似*代表所有
          这一类的如下图:

            man bash :shell的说明文档,十分的详细。
            还有一个知识点如何知道当前命令是否属于bash的内建命令那?
  1. xp022430@cnbjlx24729:~$ type ls
  2. ls is aliased to `ls --color=auto'
  3. xp022430@cnbjlx24729:~$ type cd
  4. cd is a shell builtin
  5. 也可以查出,不是内建的时候的路径,
  6. xp022430@cnbjlx24729:~$ type -a ls
  7. ls is aliased to `ls --color=auto'
  8. ls is /bin/ls

5、输入过长命令的方法。
        命令太长想要再启一行进行输入的时候, \+enter 。(直接enter就直接执行了嘛!其实就是转义)
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ ad\
  2. > b devices
  3. List of devices attached
          就是相当于输入了adb devices.

6、变量。
        变量:就是让某一个特定字符串代表不固定的内容。
         echo 这个指令来取用变量, 但是,变量在被取用时,前面必须要加上钱字号$才行,举例来说,要知道 PATH 的
为了区别与自定义变量的不同,环境变量通常以大写字符来表示。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo $PATH
  2. /home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk
  3. /latest/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr
  4. /sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
        下面这种格式也可以。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${HOME}
  2. /home/CORPUSERS/xp022430
         设定变量:直接变量=值,注意是有格式要求的
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ myname=zhaoyuan
  2. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
  3. zhaoyuan
         取消变量的设定:unset 变量名.
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ unset myname
  2. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
  3. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$
          注意Linux的bash中变量不存在的时候显示为空的但是有的shell可能报错。
         格式注意:
  1. 1). 变量与变量内容以一个等号=来连结,如下所示:
  2. myname=VBird
  3. 2). 等号两边不能直接接空格符,如下所示为错误:
  4. myname = VBirdmyname=VBird Tsai
  5. 3). 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
  6. 2myname=VBird
  7. 4). 变量内容若有空格符可使用双引号"或单引号'将变量内容结合起来,但
  8. 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
  9. var="lang is $LANG"echo $var可得lang is zh_TW.UTF-8
  10. 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
  11. var='lang is $LANG'echo $var可得lang is $LANG
  12. 5). 可用跳脱字符 \ 将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符,如:
  13. myname=VBird\ Tsai
  14. 6). 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号`指令`或 $(指令)。
  15. 例如想要取得核心版本的设定:(反引号里面的内容会优先执行)
  16. version=$(uname -r)再echo $version可得3.10.0-229.el7.x86_64
  17. 7). 若该变量为扩增变量内容时,则可用 "$变量名称" ${变量} 累加内容,如下所示:
  18. PATH="$PATH":/home/binPATH=${PATH}:/home/bin
  19. 8). 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:
  20. export PATH
  21. 9). 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
  22. 10). 取消变量的方法为使用 unset :
  23. unset 变量名称例如取消 myname 的设定:
  24. unset myname
           查看当前的所有的环境变量 env 是 environment的简写。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ env
  2. XDG_VTNR=7
  3. XDG_SESSION_ID=c2
  4. XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/xp022430
  5. SELINUX_INIT=YES
  6. CLUTTER_IM_MODULE=xim
  7. SESSION=ubuntu
  8. GPG_AGENT_INFO=/run/user/2060587593/keyring-fvTg27/gpg:0:1
  9. TERM=xterm
  10. VTE_VERSION=3409
  11. XDG_MENU_PREFIX=gnome-
  12. ......
          常见的环境变量:
  1. HOME
  2. 代表用户的家目录。还记得我们可以使用 cd ~ 去到自己的家目录吗?或者利用 cd 就可以直接回到用户家
  3. 目录了。那就是取用这个变量啦~ 有很多程序都可能会取用到这个变量的值!
  4. SHELL
  5. 告知我们,目前这个环境使用的 SHELL 是哪支程序? Linux 预设使用 /bin/bash 的啦!
  6. PATH
  7. 就是执行文件搜寻的路径啦~目录与目录中间以冒号(:)分隔, 由于文件的搜寻是依序由 PATH 的变量内的
  8. 目录来查询,所以,目录的顺序也是重要的喔。
  9. RANDOM
  10. 这个玩意儿就是『随机随机数』的变量啦!目前大多数的 distributions 都会有随机数生成器,那就是
  11. /dev/random 这个文件。 我们可以透过这个随机数文件相关的变量 ($RANDOM) 来随机取得随机数值喔。
  12. BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间,所以,你只要 echo $RANDOM 时,
  13. 系统就会主动的随机取出一个介于 0~32767 的数值。
         set 命令可以查看所有的变量,包括环境变量和普通的变量。
         子程序:我们在原本的 bash 底下执行另一个 bash ,结果操作的环境接口会跑到第二个 bash 去(就是子程
序), 那原本的 bash 就会在暂停的情况 (睡着了,就是 sleep)。子程序仅会继承父程序的环境变量, 子程序不会继
承父程序的自定义变量啦所以你在原本 bash 的自定义变量在进入了子程序后就会消失不见,一直到你离开子程
序并回到原本的父程序后,这个变量才会又出现。
          export 变量名称 让自定义变量变成环境变量
           read指令:读取来自键盘输入的变量
  1. 选项与参数:
  2. -p :后面可以接提示字符!
  3. -t :后面可以接等待的秒数!多少秒后自动跳转!
          下面你输入完read以后都会等着你输入文字!按下回车输出,也就是继续执行。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read
  2. Hello Linux! Hello Android!
          前面会自动加上提示字符。
  1. xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read -p "please input Hello :"
  2. please input Hello :hello
          declare声明变量的类型。
  1. 选项与参数:
  2. -a :将后面名为 variable 的变量定义成为数组 (array) 类型
  3. -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
  4. -x :用法与 export 一样,就是将后面的 variable 变成环境变量;
  5. -r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset

7、Shell的小补充。
      可以分为两种Shell。
       login shell:取得 bash时需要完整的登入流程的,就称为 login shell。就是说输入账号密码了!
       non-login shell:取得 bash 接口的方法不需要重复登入的举动,就称为non-login shell 。就是说没有输入密
                                 码,复制过来的等!它们两个读取bash配置文件的地方不相同。
        login shell读取:
               1)、 /etc/profile:这是系统整体的设定,你最好不要修改这个文件;,bash 的 login shell 情况下所读取的整
                        体环境配置文件其实只有 /etc/profile,但是/etc/profile 还会呼叫出其他的配置文件
                2)、~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写
                       a. ~/.bash_profile
                       b. ~/.bash_login
                       c. ~/.profile
                 其实 bash 的 login shell 设定只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序.
       一旦读到一个就不会读另外的了!
                    图:

               source :读入环境配置文件的指令如:source ~/.bashrc
        non-login shell读取:
           non-login shell 时,该 bash 配置文件仅会读取 ~/.bashrc 而已.比如你想永久修改alias就在这个文件中加入.
打开文件看和编辑就行。

8、单引号和双引号的一个小区别:
      ' ' 单引号,不具有变量置换的功能 ($ 变为纯文本)
      " " 具有变量置换的功能! ($ 可保留相关功能)
 
9、数据流重导向。
      数据流重导向 (redirect) 就是将某个指令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方,例如文
件或者是装置 (例如打印机之类的).
       符号: 简单的记忆方法,对输出肯定是很熟悉 >,那么输入就是和它相反 < ,那么错误的输出就是2>.
            1). 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
            2). 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; (默认1>或1>>)
            3). 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
标准输出:
  1. xp022430@cnbjlx24729:~$ ls -l > ~/Desktop/standout.txt
  2. xp022430@cnbjlx24729:~$ ls -l >~/Desktop/standout.txt
  3. xp022430@cnbjlx24729:~$ ls -l>~/Desktop/standout.txt
       虽然上面三个都可以,但是为了直观,重导向的符号的两边最好都加上空格,需要注意的是文件不存在的
时候会自动新建,重复执行的时候会覆盖上一次的执行结果。
         如果想要继续往内容中加入需要使用 >> 这个重导向符号:cnbjlx24729:~$ ls -l >> ~/Desktop/standout.txt
这种覆盖和不覆盖的特性同样适用于标准错误输出。
        当你用 >> 来输出错误信息到文件的时候此时就不会成功,屏幕上依然有错误信息,但是正确的信息已经
到文件中了。
  1. 不重导向的时候:
  2. xp022430@cnbjlx24729:~$ find /home -name .bashrc
  3. find: `/home/clientadm': Permission denied
  4. find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
  5. /home/CORPUSERS/xp022430/.bashrc
  6. 重导向的时候:
  7. xp022430@cnbjlx24729:~$ find /home -name .bashrc >> correct.txt
  8. find: `/home/clientadm': Permission denied
  9. find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
         此时就需要用2>来把错误信息输出到另一个文件中。
  1. cnbjlx24729:~$ find /home -name .bashrc >> ~/Desktop/correct.txt 2>> ~/Desktop/error
  2. cnbjlx24729:~$
         当想把信息输出到同一个文件的时候注意格式:
         以下这种格式会导致信息混乱:
  1. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> ~/Desktop/all.
         第一种正确方式,注意:2>&1 应该连在一块。
  1. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> &1
  2. bash: syntax error near unexpected token `&'
  3. cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2>&1
        第二种正确的方式:
  1. cnbjlx24729:~$ find /home -name .bashrc &> ~/Desktop/all.tx
         一个特殊的文件:/dev/null。可以吃掉任何导向这个装置的信息.不显示也不进行存储。
标准输入: >和>>将原本需要由键盘输入的数据,改由文件内容来取代。
           << 这个连续两个小于的符号了代表的是结束的输入字符的意思!举例来讲:我要用 cat 直接将输入的讯息
输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束发现直接用文件名做开头不识别。必须:用cat先读取
文件然后把结果输入到某个文件当中。
  1. cat > catfile < ~/.bashrc
  2. cat > catfile << "eof" :就代表你在输入的时候加入输入eof就结束了!
  3. 2>&1 1>&2 :就是把错误输出变成正确的和把正确输出变成错误的。

10、多条命令同时执行。
       1)、在指令与指令中间利用分号 (;) 来隔开,这样一来,分号前的指令执行完后就会立刻接着执行后面的指令
             了。
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l;find . -name roate.txt
  2. ...
  3. -rw-r--r-- 1 xp022430 domain_users 1 May 27 09:26 20170527
  4. -rw-r--r-- 1 xp022430 domain_users 141 Jun 2 09:50 all.txt
  5. -rw-r--r-- 1 xp022430 domain_users 4382 Apr 25 11:15 C函数初认
  6. -rwx------ 1 xp022430 domain_users 371 May 8 09:48 Flash_Gordon_4.desktop
  7. ...
  8. ./roate.txt
         2)、当前一个指令是否成功的执行与后一个指令是否要执行有关,那就得配合&&或||来执行了。
  1. 格式:
  2. cmd1 && cmd2
  3. 1). cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2
  4. 2). cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
  5. cmd1 || cmd2
  6. 1). cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。
  7. 2). cmd1 执行完毕且为错误 ($?≠0),则开始执行 cmd2
        下面这个蛮有趣:
          ls /tmp/vbirding || echo "not exist" && echo "exist",这样当不存在的时候就会显示:
         not exist和exist
        分析如果 /tmp/vbirding 不存在时,他会进行如下动作:
                a. 若 ls /tmp/vbirding 不存在,因此回传一个非为 0 的数值;
                b. 接下来经过 || 的判断,发现前一个指令回传非为 0 的数值,因此,程序开始执行 echo "not exist" ,而
                    echo "not exist" 程序肯定可以执行成功,因此会回传一个 0 值给后面的指令;
                c. 经过 && 的判断,咦!是 0 啊!所以就开始执行 echo "exist" 。
        3)、还有一种执行多个命令的就是写脚本了!

11、管道命令相关。
        管线命令|仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息,对于stdandard error 
并没有直接处理的能力。每个管线后面接的第一个数据必定是指令,并且这个命令需要有可以接受stdin的数据
的能力。
  1. xp022430@cnbjlx24729:~/Desktop$ ls -l | find . -name roate.txt
  2. ./roate.txt
  3. xp022430@cnbjlx24729:~/Desktop$ ls -l|find . -name roate.txt
  4. ./roate.txt
  5. xp022430@cnbjlx24729:~/Desktop$ ls -l| find . -name roate.txt
  6. ./roate.txt
  7. xp022430@cnbjlx24729:~/Desktop$ ls -l |find . -name roate.txt
  8. ./roate.txt
        可以看到带不带空格都可以,但是建议还是两边都加上空格。
        1)、cut命令:主要的用途在于将同一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时
                               候。
  1. 选项与参数:
  2. -d :后面接分隔字符。与 -f 一起使用;
  3. -f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
  4. -c :以字符 (characters) 的单位取出固定字符区间;
  1. cnbjlx24729:~/Desktop$ echo ${PATH}
  2. /home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/latest/to
  3. ols:/home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/late
  4. st/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/b
  5. in:/sbin:/bin:/usr/games:/usr/local/games
  6. cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3
  7. /home/CORPUSERS/xp022430/bin
  8. xp022430@cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3,5
  9. /home/CORPUSERS/xp022430/bin:/usr/local/bin
          2)、grep命令:分析一行讯息, 若当中有我们所需要的信息则进行提取。
          3)、split分区命令: split [-bl] file PREFIX
                它可以帮你将一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了
  1. 选项与参数:
  2. -b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
  3. -l :以行数来进行分区。
  4. PREFIX :代表前导符的意思,可作为分区文件的前导文字。
  1. cnbjlx24729:~/Desktop$ split -b 600k NfcNci.apk nfcnci
  2. cnbjlx24729:~/Desktop$ ls -l
  3. ...
  4. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
  5. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
  6. -rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
  7. -rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
  1. 当你想要合成一个文件的时候
  2. xp022430@cnbjlx24729:~/Desktop$ cat nfcnci* >> NfcNfcall.apk
  3. xp022430@cnbjlx24729:~/Desktop$ ls -l
  4. ...
  5. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
  6. -rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
  7. -rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
  8. -rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
  9. -rw-r--r-- 1 xp022430 domain_users 1319835 Jun 2 11:14 NfcNfcall.apk

12、闲杂
       1)、$? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功
        2)、你输入一串指令之后,发现前面写的一长串数据是错的,你想要删除游标所在处到最前面的指令串内容,
                应该如何处理?
         答:按下 [crtl]+u 组合键即可!
        3)、如何得知目前的所有变量与环境变量的设定值?
               环境变量用 env 或 export 而所有变量用 set 即可显示
         4)、试说明 ', ", 与 ` 这些符号在变量定义中的用途?
                " 可以具有变量的上下文属性,' 则仅有一般字符,至于 ` 之内则是可先被执行的指令。