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
格式:命令 参数 文件名
常用参数:
-d :解压压缩的时候使用
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
cnbjlx24729:~/Downloads$ gzip -v Java编程思想第四版完整中文高清版\(免费\).pdf
Java编程思想第四版完整中文高清版(免费).pdf: 16.1% -- replaced with Java编程思想第四
版完整中文高清版(免费).pdf.gz
cnbjlx24729:~/Downloads$ ls -l
-rw-r--r-- 1 xp022430 domain_users 1947236 May 23 09:29 Java编程思想第四版完整中文
高清版(免费).pdf.gz
可以看到压缩完毕以后原文件就不存在了,还有好像不能对目录使用!
解压缩:
cnbjlx24729:~/Downloads$ gzip -d Java编程思想第四版完整中文高清版\(免费\).pdf.gz
cnbjlx24729:~/Downloads$ ls -l
-rw-r--r-- 1 xp022430 domain_users 2320410 May 23 09:29 Java编程思想第四版完整中
文高清版(免费).pdf
2)、bzip2、xz:压缩比更好,但只能对单独文件使用,所以需要先tar。
bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的,基本用法和gzip相同,后缀*.bz2
常用参数:
-d :解压缩的参数
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
xp022430@cnbjlx24729:~/Downloads$ bzip2 -vz Java编程思想第四版完整中文高清版\(免费\).pdf
Java编程思想第四版完整中文高清版(免费).pdf: 1.196:1, 6.691 bits/byte, 16.36% saved, 23204
10 in, 1940764 out.
xp022430@cnbjlx24729:~/Downloads$ ls -l
-rw-r--r-- 1 xp022430 domain_users 1940764 May 23 09:29 Java编程思想第四版完整中文高清
版(免费).pdf.bz2
xz这个软件的用法也跟 gzip/bzip2 几乎一模一样,压缩比更高,但是时间比较久。
常用参数
-d :就是解压缩啊!
-k :保留原本的文件不删除~
-# :同样的,也有较佳的压缩比的意思!
综合比较上面几个考虑到时间成本gzip较合适。且我测试的上面默认是不可以对目录进行压缩的如:
xp022430@cnbjlx24729:~/Downloads$ xz LOgs/
xz: LOgs/: Is a directory, skipping
zip:兼容windows常见的压缩包
compress:已弃用。
3)、打包命令tar。
tar:打包指令,可以将多个目录或文 件打包成一个大文件。
打包完毕后以透过 gzip/bzip2/xz 的支持,将
该文件同时进行压缩,并且Windows的WinRAR 也支持 .tar.gz 档名的解压缩
常用参数:
-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)---压缩的时候的参数
-t :察看打包文件的内容含有哪些档名,重点在察看档名就是了;---查看文件内容时候的参数
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开---解压缩式加入的参数
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中,并且注意你执行的什么操作
-z :透过 gzip的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
注意:tar 并不会主动的产生建立的档名,所以我们要根据参数选择好对应的文档后缀,如果zjJ参数都没
选的话,最好用后缀*.tar
例子:
压 缩:tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称
查 询:tar -ztv -f filename.tar.gz (就是查看打包了那些文件)
解压缩: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)、调用命令临时设定:
设定与取消行号 :set nu/:set nonu
hlsearch 就是 high light search(高亮度搜寻) :set hlsearch/:set nohlsearch
显示目前所有的环境参数设定值 :set all
是否依据程序相关语法显示不同颜色? :syntax on/:syntax off
可用以显示不同的颜色色调,预设是light :set bg=dark/:set bg=light
2)、配置文件可以永久设定
编辑配置文件:vim ~/.vimrc 。下面举几个例子:
set hlsearch "高亮度反白
set nu "可以在每一列的最前面显示行号啦!
set bg=dark "显示不同的底色色调
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下面如下:
root@Joey:/home/joey/Desktop# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
Shell的功能---history:
bash 的功能里头,能记忆使用过的指令。通过上下按键即可调出来。存放在 ~/.bash_history 。
注意
记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在内存中,当你成
功的
注销系统后,该指令记忆才会记录到 .bash_history 当中。
历史记录的命令:history,配合grep简直不要太好用!
常用参数:
n :数字,意思是要列出最近的 n 笔命令行表.
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
则预设写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
history配合如下命令实现快捷输入
!number:执行第几笔指令的意思;
!command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;
!!:就是执行上一个指令(相当于按↑按键后,按 Enter)
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
2179 alias h='history | grep'
2180 h
2181 h "read"
2182 h read
2183 history --help
2184 type history
2185 history 3
2186 read -p "please input Hello :" -t 5
2187 2159
2188 history -10
2189 history 10
2190 2159
2191 history
2192 history -20
2193 history 15
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !2186
read -p "please input Hello :" -t 5
please input Hello :aksjkad
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !!
read -p "please input Hello :" -t 5
please input Hello :sdasd
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ history 15
2181 h "read"
2182 h read
2183 history --help
2184 type history
2185 history 3
2186 read -p "please input Hello :" -t 5
2187 2159
2188 history -10
2189 history 10
2190 2159
2191 history
2192 history -20
2193 history 15
2194 read -p "please input Hello :" -t 5
2195 history 15
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2/packages/apps/Nfc$ !type
type history
history is a shell builtin
同一账号同时多次登入的 history 写入问题:
就是好几个账户同时登陆,然后写入,因为等到注销时
才会更新记录文件,其它的被后来的最后一个 bash 所覆盖更新了
Shell的功能---命令与文件补全功能(Tab)
就是按Tab键会自动补全。
Shell的功能---命令别名设定功能: (alias)
在命令行输入alias,就可以看出那些命令有别名了
xp022430@cnbjlx24729:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
设置别名:(注意用引号括起来)
xp022430@cnbjlx24729:~$ alias lm="ls -la"
xp022430@cnbjlx24729:~$ alias
...
alias lm='ls -la'
unalias lm 移除别名.
需要注意的是,通过这样设置的别名,只是暂时在当前的shell端口起作用,一旦关闭就不起作用
了,
想要持久生效就需要你在相应的配置文件中修改,下面说到环境配置时一块。
Shell的功能---程序化脚本: (shell scripts)
可以将你平时管理系统常需要下达的连续指令写成一个文件,到时候可以一键执行方便很多。
Shell的功能---通配符: (Wildcard)
除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与指令下达,就是类似*代表所有
这一类的如下图:
man bash :shell的说明文档,十分的详细。
还有一个知识点如何知道当前命令是否属于bash的内建命令那?
xp022430@cnbjlx24729:~$ type ls
ls is aliased to `ls --color=auto'
xp022430@cnbjlx24729:~$ type cd
cd is a shell builtin
也可以查出,不是内建的时候的路径,
xp022430@cnbjlx24729:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
5、输入过长命令的方法。
命令太长想要再启一行进行输入的时候, \+enter 。(直接enter就直接执行了嘛!其实就是转义)
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ ad\
> b devices
List of devices attached
就是相当于输入了adb devices.
6、变量。
变量:就是让某一个特定字符串代表不固定的内容。
echo 这个指令来取用变量, 但是,变量在被取用时,前面必须要加上钱字号$才行,举例来说,要知道 PATH 的
内
容
为了区别与自定义变量的不同,环境变量通常以大写字符来表示。
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo $PATH
/home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk
/latest/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr
/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
下面这种格式也可以。
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${HOME}
/home/CORPUSERS/xp022430
设定变量:直接变量=值,注意是有格式要求的
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ myname=zhaoyuan
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
zhaoyuan
取消变量的设定:unset 变量名.
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ unset myname
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ echo ${myname}
- xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$
注意Linux的bash中变量不存在的时候显示为空的但是有的shell可能报错。
格式注意:
1). 变量与变量内容以一个等号=来连结,如下所示:
myname=VBird
2). 等号两边不能直接接空格符,如下所示为错误:
myname = VBird或myname=VBird Tsai
3). 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
2myname=VBird
4). 变量内容若有空格符可使用双引号"或单引号'将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
var="lang is $LANG"则echo $var可得lang is zh_TW.UTF-8
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
var='lang is $LANG'则echo $var可得lang is $LANG
5). 可用跳脱字符 \ 将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符,如:
myname=VBird\ Tsai
6). 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号`指令`或 $(指令)。
例如想要取得核心版本的设定:(反引号里面的内容会优先执行)
version=$(uname -r)再echo $version可得3.10.0-229.el7.x86_64
7). 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
PATH="$PATH":/home/bin或PATH=${PATH}:/home/bin
8). 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:
export PATH
9). 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10). 取消变量的方法为使用 unset :
unset 变量名称例如取消 myname 的设定:
unset myname
查看当前的所有的环境变量 env 是 environment的简写。
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ env
XDG_VTNR=7
XDG_SESSION_ID=c2
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/xp022430
SELINUX_INIT=YES
CLUTTER_IM_MODULE=xim
SESSION=ubuntu
GPG_AGENT_INFO=/run/user/2060587593/keyring-fvTg27/gpg:0:1
TERM=xterm
VTE_VERSION=3409
XDG_MENU_PREFIX=gnome-
......
常见的环境变量:
HOME
代表用户的家目录。还记得我们可以使用 cd ~ 去到自己的家目录吗?或者利用 cd 就可以直接回到用户家
目录了。那就是取用这个变量啦~ 有很多程序都可能会取用到这个变量的值!
SHELL
告知我们,目前这个环境使用的 SHELL 是哪支程序? Linux 预设使用 /bin/bash 的啦!
PATH
就是执行文件搜寻的路径啦~目录与目录中间以冒号(:)分隔, 由于文件的搜寻是依序由 PATH 的变量内的
目录来查询,所以,目录的顺序也是重要的喔。
RANDOM
这个玩意儿就是『随机随机数』的变量啦!目前大多数的 distributions 都会有随机数生成器,那就是
/dev/random 这个文件。 我们可以透过这个随机数文件相关的变量 ($RANDOM) 来随机取得随机数值喔。
在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间,所以,你只要 echo $RANDOM 时,
系统就会主动的随机取出一个介于 0~32767 的数值。
set 命令可以查看所有的变量,包括环境变量和普通的变量。
子程序:
我们在原本的 bash 底下执行另一个 bash ,结果操作的环境接口会跑到第二个 bash 去
(就是子程
序), 那原本的 bash 就会在暂停的情况 (睡着了,就是 sleep)。
子程序仅会继承父程序的环境变量, 子程序不会继
承父程序的自定义变量啦所以你在原本 bash 的自定义变量在进入了子程序后就会消失不见,
一直到你离开子程
序并回到原本的父程序后,这个变量才会又出现。
export 变量名称 让自定义变量变成环境变量
read指令:读取来自键盘输入的变量
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的秒数!多少秒后自动跳转!
下面你输入完read以后都会等着你输入文字!按下回车输出,也就是继续执行。
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read
Hello Linux! Hello Android!
前面会自动加上提示字符。
xp022430@cnbjlx24729:~/source/projects/pre-o-yoshino2$ read -p "please input Hello :"
please input Hello :hello
declare声明变量的类型。
选项与参数:
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-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>> ;
标准输出:
xp022430@cnbjlx24729:~$ ls -l > ~/Desktop/standout.txt
xp022430@cnbjlx24729:~$ ls -l >~/Desktop/standout.txt
xp022430@cnbjlx24729:~$ ls -l>~/Desktop/standout.txt
虽然上面三个都可以,但是为了直观,重导向的符号的两边最好都加上空格,需要注意的是文件不存在的
时候
会自动新建,重复执行的时候会覆盖上一次的执行结果。
如果想要继续往内容中加入需要使用 >> 这个重导向符号:cnbjlx24729:~$ ls -l >> ~/Desktop/standout.txt
这种覆盖和不覆盖的特性同样适用于标准错误输出。
当你用 >> 来输出错误信息到文件的时候此时就不会成功,屏幕上依然有错误信息,但是正确的信息已经
到文件中了。
不重导向的时候:
xp022430@cnbjlx24729:~$ find /home -name .bashrc
find: `/home/clientadm': Permission denied
find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
/home/CORPUSERS/xp022430/.bashrc
重导向的时候:
xp022430@cnbjlx24729:~$ find /home -name .bashrc >> correct.txt
find: `/home/clientadm': Permission denied
find: `/home/CORPUSERS/xp022430/.cache/dconf': Permission denied
此时就需要用2>来把错误信息输出到另一个文件中。
cnbjlx24729:~$ find /home -name .bashrc >> ~/Desktop/correct.txt 2>> ~/Desktop/error
cnbjlx24729:~$
当想把信息输出到同一个文件的时候注意格式:
以下这种格式会导致信息混乱:
cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> ~/Desktop/all.
第一种正确方式,注意:2>&1 应该连在一块。
cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2> &1
bash: syntax error near unexpected token `&'
cnbjlx24729:~$ find /home -name .bashrc > ~/Desktop/all.txt 2>&1
第二种正确的方式:
cnbjlx24729:~$ find /home -name .bashrc &> ~/Desktop/all.tx
一个特殊的文件:/dev/null。可以吃掉任何导向这个装置的信息.不显示也不进行存储。
标准输入: >和>>
将原本需要由键盘输入的数据,改由文件内容来取代。
<< 这个连续两个小于的符号了代表的是结束的输入字符的意思!举例来讲:我要用 cat 直接将输入的讯息
输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束
发现直接用文件名做开头不识别。必须:用cat先读取
文件然后把结果输入到某个文件当中。
cat > catfile < ~/.bashrc
cat > catfile << "eof" :就代表你在输入的时候加入输入eof就结束了!
2>&1 1>&2 :就是把错误输出变成正确的和把正确输出变成错误的。
10、多条命令同时执行。
1)、在指令与指令中间利用分号 (;) 来隔开,这样一来,分号前的指令执行完后就会立刻接着执行后面的指令
了。
xp022430@cnbjlx24729:~/Desktop$ ls -l;find . -name roate.txt
...
-rw-r--r-- 1 xp022430 domain_users 1 May 27 09:26 20170527
-rw-r--r-- 1 xp022430 domain_users 141 Jun 2 09:50 all.txt
-rw-r--r-- 1 xp022430 domain_users 4382 Apr 25 11:15 C函数初认
-rwx------ 1 xp022430 domain_users 371 May 8 09:48 Flash_Gordon_4.desktop
...
./roate.txt
2)、
当前一个指令是否成功的执行与后一个指令是否要执行有关,那就得配合&&或||来执行了。
格式:
cmd1 && cmd2
1). 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。
2). 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
cmd1 || cmd2
1). 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。
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的数据
的能力。
xp022430@cnbjlx24729:~/Desktop$ ls -l | find . -name roate.txt
./roate.txt
xp022430@cnbjlx24729:~/Desktop$ ls -l|find . -name roate.txt
./roate.txt
xp022430@cnbjlx24729:~/Desktop$ ls -l| find . -name roate.txt
./roate.txt
xp022430@cnbjlx24729:~/Desktop$ ls -l |find . -name roate.txt
./roate.txt
可以看到带不带空格都可以,但是建议还是两边都加上空格。
1)、cut命令:主要的用途在于将同一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时
候。
选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;
cnbjlx24729:~/Desktop$ echo ${PATH}
/home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/latest/to
ols:/home/CORPUSERS/xp022430/.semctools/sdk/f78d252ac3d664f64f3a88ac3e634466/sdk/late
st/tools:/home/CORPUSERS/xp022430/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/b
in:/sbin:/bin:/usr/games:/usr/local/games
cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3
/home/CORPUSERS/xp022430/bin
xp022430@cnbjlx24729:~/Desktop$ echo ${PATH} | cut -d ":" -f 3,5
/home/CORPUSERS/xp022430/bin:/usr/local/bin
2)、grep命令:分析一行讯息, 若当中有我们所需要的信息则进行提取。
3)、
split分区命令: split [-bl] file PREFIX
它可以帮你将一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了
选项与参数:
-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分区。
PREFIX :代表前导符的意思,可作为分区文件的前导文字。
cnbjlx24729:~/Desktop$ split -b 600k NfcNci.apk nfcnci
cnbjlx24729:~/Desktop$ ls -l
...
-rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
-rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
-rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
-rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
当你想要合成一个文件的时候
xp022430@cnbjlx24729:~/Desktop$ cat nfcnci* >> NfcNfcall.apk
xp022430@cnbjlx24729:~/Desktop$ ls -l
...
-rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciaa
-rw-r--r-- 1 xp022430 domain_users 614400 Jun 2 11:09 nfcnciab
-rw-r--r-- 1 xp022430 domain_users 91035 Jun 2 11:09 nfcnciac
-rw-r--r-- 1 xp022430 domain_users 1319835 May 27 14:28 NfcNci.apk
-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)、
试说明 ', ", 与 ` 这些符号在变量定义中的用途?
" 可以具有变量的上下文属性,' 则仅有一般字符,至于 ` 之内则是可先被执行的指令。