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

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)、 试说明 ', ", 与 ` 这些符号在变量定义中的用途?
                " 可以具有变量的上下文属性,' 则仅有一般字符,至于 ` 之内则是可先被执行的指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值