免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 979 | 回复: 0
打印 上一主题 下一主题

鸟哥的Linux私房菜学习笔记三 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-30 11:35 |只看该作者 |倒序浏览
认识 BASH Shell
~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在暂内存中,当您成功的注销系统后,该指令记忆才会记录到 .bash_history 当中!
命令别名(alias)设定功能:alias lm='ls -al'
Bash shell 的内建命令: type
[root@linux ~]# type [-tpa] name
参数:
           :不加任何参数时,则 type 会显示出那个 name 是外部指令还是 bash 内建的指令!
-t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
      file    :表示为外部指令;
      alias   :表示该指令为命令别名所设定的名称;
      builtin :表示该指令为 bash 内建的指令功能;
-p  :如果后面接的 name 为指令时,会显示完整文件名(外部指令)或显示为内建指令;
-a  :会将由 PATH 变量定义的路径中,将所有含有 name 的指令都列出来,包含 alias
变量的取用与设定:echo, 变量设定规则, unset
[root@linux ~]# echo $PATH                 // 变量在被取用时,前面必须要加上$
变量设定规则:
1. 变量与变量内容以等号『=』来连结;
2. 等号两边不能直接接空格符;
3. 变量名称只能是英文字母与数字,但是数字不能是开头字符;
4. 若有空格符可以使用双引号『  " 』  或单引号『  ' 』来将变量内容结合起来,      但须要特别留意, 双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;
5. 必要时需要以跳脱字符『 \ 』来将特殊符号 ( 如 Enter, $, \, 空格符, ' 等 ) 变成一般符号;
6. 在一串指令中,还需要藉由其它的指令提供的信息,可以使用 quote 『 ` command` 』;在 ` 之内的指令将会被先执行,而其执行出来的结果将做为外部的输入信息
(特别特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!)
7. 若该变量为扩增变量内容时,  则需以双引号及 $变量名称 如:『 "$PATH":/home』继续累加内容;
8. 若该变量需要在其它子程序执行,  则需要以 export 来使变量变成环境变量, 如『   export PATH』;
9.  通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断 ( 纯粹依照使用者兴趣与嗜好 ) ;
10. 取消变量的方法为:『unset 变量名称』。
一些环境变量的说明: env,export,set
env:列出目前的 shell 环境下的所有环境变量与其内容
[root@linux ~]# env
HOSTNAME=linux.dmtsai.tw
set:这个指令除了会将环境变量列出来之外,其它我们的自订变量,与所有的变量,都会被列出来
[root@linux ~]# set
BASH=/bin/bash           
export:自订变量转成环境变量:  export 变数
变量键盘读取、数组与宣告: read, array, declare
read:读取来自键盘输入的变量
[root@linux ~]# read [-pt] variable
参数:
-p  :后面可以接提示字符!
-t  :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
declare / typeset:宣告变量的属性
[root@linux ~]# declare [-aixr] variable
参数:
-a  :将后面的 variable 定义成为数组 (array)
-i  :将后面接的 variable 定义成为整数数字 (integer)
-x  :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r  :将一个 variable 的变量设定成为 readonly ,该变量不可被更改内容,也不能 unset
与档案系统及程序的限制关系: ulimit
[root@linux ~]# ulimit [-SHacdflmnpstuv] [配额]
参数:
-H  :hard limit ,严格的设定,必定不能超过设定的值;
-S  :soft limit ,警告的设定,可以超过这个设定值,但是会有警告讯息,并且,还是无法超过 hard limit 的喔!也就是说,假设我的 soft limit为 80 , hard limit 为 100 ,那么我的某个资源可以用到 90 ,可以超过 80 ,还是无法超过 100 ,而且在 80~90 之间,会有警告讯息的意思。
-a  :列出所有的限制额度;
-c  :可建立的最大核心档案容量 (core files)
-d  :程序数据可使用的最大容量
-f  :此 shell 可以建立的最大档案容量 (一般可能设定为 2GB)单位为 Kbytes
-l  :可用于锁定 (lock) 的内存量
-p  :可用以管线处理 (pipe) 的数量
-t  :可使用的最大 CPU 时间 (单位为秒)
-u  :单一使用者可以使用的最大程序(process)数量。
命令别名设定: alias, unalias
历史命令:history
[root@linux ~]# history [n]
[root@linux ~]# history [-c]
[root@linux ~]# history [-raw] histfiles
参数:
n   :数字,意思是『要列出最近的 n 笔命令列表』的意思!
-c  :将目前的 shell 中的所有 history 内容全部消除
-a  :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles , 则预设写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w  :将目前的 history 记忆内容写入 histfiles 中!
[root@linux ~]# !number
[root@linux ~]# !command
[root@linux ~]# !!
参数:
number  :执行第几笔指令的意思;
command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;
!!      :就是执行上一个指令(相当于按↑按键后,按 Enter)
系统设定值:
/etc/sysconfig/i18n
/etc/profile:这个档案设定了几个重要的变量,例如:『PATH、USER、MAIL、 HOSTNAME、HISTSIZE、umask』
/etc/bashrc:这个档案在规划 umask 的功能,也同时规划出提示字符的内容 (就是里头那个 PS1 啦!)
/etc/profile.d/*.sh:/etc/profile.d 是一个目录,里面针对 bash 及 C-shell 规范了一些数据。
/etc/man.config:规范了使用 man 的时候, man page 的路径到哪里去寻找!
个人设定值:
~/.bash_profile,
~/.bashrc:人化设定值都会写在这里,例如命令别名、路径.  这个档案在您每次执行 shell script 的时候都会被重新使用一遍。 而 ~/.bash_profile 则只有在登入的时候会被读取一次.
~/.bash_history:预设的情况下, 历史命令就记录在这里.这个档案能够记录几笔数据,则与 HISTSIZE 这个变数有关
~/.bash_logout:这个档案则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思
在我们登入 bash的时候,他是这样读取的:
  1. 先读取 /etc/profile ,再根据 /etc/profile 的内容去读取其它额外的设定档, 例如/etc/profile.d 与 /etc/inputrc 等等设定档;
  2. 根据不同的使用者, 到使用者家目录去读取 ~/.bash_profile 或 ~/.bash_login 或 ~/.profile等设定档;
  3. 根据不同使用者,到他家目录去读取 ~/.bashrc 。
[root@linux ~]# source file
范例:
[root@linux ~]# source ~/.bashrc
[root@linux ~]#  .  ~/.bashrc
利用 source 或小数点 (.) 都可以将设定档的内容读进来目前的 shell 环境中
stty/set 也可以帮助设定终端机的输入按键代表意义
[root@linux ~]# stty [-a]
参数:
-a :将目前所有的 stty 参数列出来
几个重要的代表意义是:
• eof : End of file 的意思,代表『结束输入』。
• erase : 向后删除字符,
• intr : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;
• kill : 删除在目前指令列上的所有文字;
• quit : 送出一个 quit 的讯号给目前正在 run 的程序;
• start : 在某个程序停止后,重新启动他的 output
• stop : 停止目前屏幕的输出;
• susp : 送出一个 terminal stop 的讯号给正在 run 的程序。
[root@linux ~]# set [-uvCHhmBx]
参数:
-u  :预设不启用。若启用后,当使用未设定变量时,会显示错误讯息;
-v  :预设不启用。若启用后,在讯息被输出前,会先显示讯息的原始内容;
-x  :预设不启用。若启用后,在指令被执行前,会显示指令内容(前面有 ++ 符号)
-h  :预设启用。与历史命令有关(下节介绍);
-H  :预设启用。与历史命令有关(下节介绍);
-m  :预设启用。与工作管理有关(未来介绍);
-B  :预设启用。与刮号 [] 的作用有关;
-C  :预设不启用。若使用 >            等,则若档案存在时,该档案不会被覆盖。
万用字符与特殊符号:
符号                        内容
*        万用字符,代表 0 个或多个字符(或数字)
?        万用字符,代表『一定有』一个字母
#        批注,这个最常被使用在 script 当中,视为说明!
\        跳脱符号,将『特殊字符或万用字符』还原成一般字符
|        分隔两个管线命令的界定;
;        连续性命令的界定(注意!与管线命令并不相同)
~        使用者的家目录
$        亦即是变量之前需要加的变量取代值
&        将指令变成背景下工作
!        逻辑运算意义上的『非』 not 的意思!
/        路径分隔的符号
>, >>    输出导向,分别是『取代』与『累加』
'        单引号,不具有变量置换的功能
"        具有变量置换的功能!
``       两个『 ` 』中间为可以先执行的指令!
()       在中间为子 shell 的起始与结束
[]       在中间为字符的组合
{}       在中间为命令区块的组合!
组合按键          执行结果
Ctrl + C 终止目前的命令
Ctrl + D 输入结束(EOF),例如邮件结束的时候;
Ctrl + M 就是 Enter 啦!
Ctrl + S 暂停屏幕的输出
Ctrl + Q 恢复屏幕的输出
Ctrl + U 在提示字符下,将整列命令删除
Ctrl + Z 『暂停』目前的命令
数据流重导向redirect:
                                  >
                                 1>
command     2>        装置或档案
                                2>>
                                
命令执行的判断依据: ; , &&, ||
管线命令 (pipe):『 | 』
这个管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是 standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力
撷取命令: cut, grep
cut:将一段讯息的某一段给他『切』出来~ 处理的讯息是以『行』为单位
[root@linux ~]# cut -d'分隔字符' -f fields
[root@linux ~]# cut -c 字符区间
参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;
grep 则是分析一行讯息, 若当中有我们所需要的信息,就将该行拿出来
[root@linux ~]# grep [-acinv] '搜寻字符串' filename参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
排序命令: sort, wc, uniq
[root@linux ~]# sort [-fbMnrtuk] [file or stdin]
参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(预设是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,预设是 tab 键;
-k  :以那个区间 (field) 来进行排序的意思,
example:[root@linux ~]# cat /etc/passwd | sort
        [root@linux ~]# cat /etc/passwd | sort -t ':' -k 3
[root@linux ~]# wc [-lwm]
参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;
example:[root@linux ~]# cat /etc/man.config | wc
双向重导向: tee
[root@linux ~]# tee [-a] file
参数:
-a  :以累加 (append) 的方式,将数据加入 file 当中!
范例:
[root@linux ~]# last | tee last.list | cut -d " " -f1
# 这个范例可以让我们将 last 的输出存一份到 last.list 档案中;
字符转换命令: tr, col, join, paste, expand
•  tr
tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!
[root@linux ~]# tr [-ds] SET1 ...
参数:
-d  :删除讯息当中的 SET1 这个字符串;
-s  :取代掉重复的字符!
•  col
[root@linux ~]# col [-x]
参数:
-x  :将 tab 键转换成对等的空格键
•  join
join 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个档案之间的数据
[root@linux ~]# join [-ti12] file1 file2
参数:
-t  :join 预设以空格符分隔数据,并且比对『第一个字段』的数据,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i  :忽略大小写的差异;
-1  :这个是数字的 1 ,代表『第一个档案要用那个字段来分析』的意思;
-2  :代表『第二个档案要用那个字段来分析』的意思。
• paste
paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』而已!
[root@linux ~]# paste [-d] file1 file2
参数:
-d  :后面可以接分隔字符。预设是以 [tab] 来分隔的!
-   :如果 file 部分写成 - ,表示来自 standard input 的资料的意思。
•  expand
这玩意儿就是在将 [tab] 按键转成空格键啦~可以这样玩:
[root@linux ~]# expand [-t] file
参数:
-t  :后面可以接数字,一般来说,一个 tab 按键可以用 8 个空格键取代。我们也可以自行定义一个 [tab] 按键代表多少个字符呢!
分割命令: split
将一个大档案,依据档案大小或行数来分割,就可以将大档案分割成为小档案了
[root@linux ~]# split [-bl] file PREFIX
参数:
-b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l  :以行数来进行分割。
参数代换: xargs
[root@linux ~]# xargs [-0epn] command
参数:
-0  :如果输入的 stdin 含有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e  :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。看范例三。当 xargs 后面没有接任何的指令时,预设是以 echo 来进行输出喔!
关于减号 - 的用途
某些指令需要用到文件名称 (例如 tar) 来进行处理时, stdin 与 stdout 可以利用减号 "-" 来替代,  该stdin 与 stdout 可以利用减号 "-" 来替代,
举例来说:
[root@linux ~]# tar -cvf - /home | tar -xvf -
上面这个例子是说:『我将 /home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 file 了!











本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93267/showart_1884301.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP