Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281150
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 221
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-25 17:36
文章分类

全部博文(38)

文章存档

2015年(1)

2014年(37)

分类: LINUX

2014-10-08 10:48:45

第10章 vim程序编辑器
1、Linux下面的配置文件多为文本文件,故使用vim即可进行设置编辑。
2、vim可视为程序编辑器,可用以编辑shell script、配置文件等,避免打错字。
3、vi为所有UNIX like的操作系统都会存在的编辑器,且执行速度快。
4、vi有三种模式,一般模式可变换到编辑与命令行模式,但编辑模式与命令行模式不能互换。
5、常用的按键有i,[Esc],:wq等。
6、vi的界面大致可分为两部分:上半部的文本与最后一行的状态+命令行模式。
7、数字是有意义的,用来说明重复进行几次操作的意思,如5yy为副职5行的意思。
8、光标的移动中,大写的G经常使用,尤其是1G,G,表示移动到文章的头、尾功能。
9、vi的替换功能也很棒。:n1,n2s/old/new/g要特别注意学习起来。
10、小数点“.”为重复进行前一次操作,也是经常使用的按键功能。
11、进入编辑模式几乎只要记住i,o,R三个按钮即可,尤其是新增一行的o与替代的R。
12、vim会主动创建swap暂存文件,所以不要随意断线。
13、可以使用ctrl -v进行复制/粘贴/删除的行为。块选择。
    y:将反白的地方复制起来
    d:将反白的地方删除
    vim hosts /etc/hosts 多文件编辑
14、使用:sp功能可以切割窗口。
    命令模式输入
    :sp filename 打开一个新窗口,如果有加filename,表示在新窗口打开一个文件,否则表示两个窗口为同                  一个文件内容(同步显示)。
    ctrl+w+j     按键的按法:先按下ctrl不放,在按下w后放开所有的按键,然后在按下j(或下下箭头键),                  则光标可移动到下方的窗口。
    ctrl+w+k 同上,不过光标移动到上面的窗口。
    ctrl+w+q 其实就是:q结束离开。举例来说,如果我想要结束下方的窗口,那么利用ctrl+w+[向下键],然                后:q即可离开,也可以ctrl+w+q
15、vim的环境设置可以写入~/.vimrc文件中。
16、可以使用iconv进行文件语系编码的转换。
    [root@www ~]# iconv --list
    [root@www ~]# iconv -f 原本编码 -t 新编码 filename [-o newfile]
    选项与参数:
    --list :列出 iconv 支持的语系数据
    -f     :from ,亦即来源之意,后接原本的编码格式;
    -t     :to ,亦即后来的新编码要是什么格式;
    -o file:如果要保留原本的档案,那么使用 -o 新档名,可以建立新编码档案。
    eg:iconv -f big5 -t utf8 vi.big5 -o vi.utf8
17、使用dos2UNIX及UNIX2dos可以变更文件每一行的行为断行字符。
    [root@www ~]# dos2unix [-kn] file [newfile]
    [root@www ~]# unix2dos [-kn] file [newfile]
    选项与参数:
    -k  :保留该档案原本的 mtime 时间格式 (不更新档案上次内容经过修订的时间)
    -n  :保留原本的旧档,将转换后的内容输出到新档案,如: dos2unix -n old new


vim常用指令
移动光标的方法:
Ctrl+f:屏幕向下移动一页。
Ctrl+b:屏幕向上移动一页。
0或[Home]:移到这一行最前面字符。
$或[End]:移动到这一行最后面字符。
G:移动到这个文件的最后一行。
nG:移动到第N行
gg:移动到这个文件的第一行,相当于1G。
N[Enter]:n为数字。光标向下移动n行。
查找与替换
/word         向下寻找一个名称为Word的字符串。例如要在文件内查找bbird这个字符串,就输入/vbird即                 可。
:na,n2s/word1/word2/g n1,n2为数字。在n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2
:1,$s/word1/word2/g   从第一行到最后一行查找word1字符串,并将该字符串替换为word2。
:1,$s/word1/word2/gc  从第一行到最后一行查找word1字符串,并将该字符串替换为word2,且在替换前显示提                       示字符给用户确认(confirm)是否需要替换。
删除、复制与粘贴
x,X     在一行字当中,x为向后删除一个字符(相当于del按键),X为向前删除一个字符(相当于backspace)
ndd n   为数字。删除光标所在的那一行
nyy     复制光标所在向下n行。
p,P    粘贴
u       复原前一个操作
Ctrl+r  重做上一个操作


第11章 认识与学习bash
1、由于内核在内存中是受保护的块,因此我们必须要通过"Shell"将我们输入的命令与Kernel通信,好让Kernel    可以控制硬件来正确无误地工作。
   bash 和C shell
2、学习shell的原因主要有:命令行界面的shell在各大distribution都一样;远程管理时命令行界面速度较      快;shell是管理Linux系统非常重要的一环,因为Linux内很多控制都是以shell编写的。
3、系统合法的shell均写在/etc/shells文件中。
4、用户默认登录取得的shell记录于/etc/passwd的最后一个字段。
5、bash的功能主要有命令编辑功能、命令与文件补全功能、命令别名设置功能、作业控制、前台、后台控制、    程序化脚本、通配符。
6、type可以用来找到执行命令为何种类型,也可用于which相同的功能。
   [root@www ~]# type [-tpa] name
   选项与参数:
       :不加任何选项与参数时,type 会显示出 name 是外部命令还是 bash 内建命令
   -t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
   file    :表示为外部命令;
   alias   :表示该命令为命令别名所配置的名称;
   builtin :表示该命令为 bash 内建的命令功能;
   -p  :如果后面接的 name 为外部命令时,才会显示完整文件名;
   -a  :会由 PATH 变量定义的路径中,将所有含 name 的命令都列出来,包含 alias
7、变量就是以一组文字或符号等来替换一些设置或者是一串保留的数据。
   eg:echo ${PATH}
       unset 变量名称
       cd /lib/modules/$(uname -r)/kernel
8、变量主要有环境变量与自定义变量,或称为全局变量与局部变量。
9、使用env与export可查看环境变量,其中export可以将自定义变量转成环境变量。
   eg:env
   export 变量名称
10、set可以查看目前bash环境下的所有变量。
11、$?也为变量,是前一个命令执行完毕后的回传吗。在Linux回传码为0代表执行成功。
12、locale可用于查看语系数据。
13、可用read让用户由键盘输入变量得值。
    [root@www ~]# read [-pt] variable
     -p  :后面可以接提示字符!
     -t  :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
14、ulimit可用以限制用户使用系统的资源情况。
    [root@www ~]# ulimit [-SHacdfltu] [配额]
    选项与参数:
    -H  :hard limit ,严格的配置,必定不能超过这个配置的数值;
    -S  :soft limit ,警告的配置,可以超过这个配置值,但是若超过则有警告信息。
          在配置上,通常 soft 会比 hard 小,举例来说,soft 可配置为 80 而 hard 
          配置为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时,
          系统会有警告信息通知你!
    -a  :后面不接任何选项与参数,可列出所有的限制额度;
    -c  :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
          这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
    -f  :此 shell 可以创建的最大文件容量(一般可能配置为 2GB)单位为 Kbytes
    -d  :程序可使用的最大断裂内存(segment)容量;
    -l  :可用于锁定 (lock) 的内存量
    -t  :可使用的最大 CPU 时间 (单位为秒)
    -u  :单一用户可以使用的最大程序(process)数量。
    [root@www ~]# history [n]
    [root@www ~]# history [-c]
    [root@www ~]# history [-raw] histfiles
    选项与参数:
    n   :数字,意思是『要列出最近的 n 笔命令行表』的意思!
    -c  :将目前的 shell 中的所有 history 内容全部消除
    -a  :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
          则默认写入 ~/.bash_history
    -r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
    -w  :将目前的 history 记忆内容写入 histfiles 中!
15、bash的配置文件主要分为loginshell与non-login shell。login shell主要                                 读取/etc/profile~/.bash_profile,non-login则仅读取~/.bashrc。
    cat /etc/issue 登录与欢迎信息
    source 配置文件名 读入环境配置文件的命令
16、通配符主要有*、?、[]等。
17、数据流重定向通过>、2>、<之类的符号将输出的信息转到其他文件或设备去。
    1)标准输入(stdin):代码0,使用<或<<;
    2)标准输出(stdout):代码1,使用>或>>;
    3)标准错误输出(stderr):代码为2,使用2>或2>>。
       >是覆盖,>>是累加
     eg:将命令的数据全部写入名为list的文件中
         find /home -name .bashrc >list 2>&1
         find /home -name .bashrc 2> /dev/null
         cat > catfile < ~/.bashrc
18、连续命令的执行可通过;&&、||等符号来处理。
   ;不考虑相关性
    cmd1 && cmd2  1. 若 cmd1 运行完毕且正确运行($?=0),则开始运行 cmd2。
                  2. 若 cmd1 运行完毕且为错误 ($?≠0),则 cmd2 不运行。
    cmd1 || cmd2  1. 若 cmd1 运行完毕且正确运行($?=0),则 cmd2 不运行。
                  2. 若 cmd1 运行完毕且为错误 ($?≠0),则开始运行 cmd2。
19、管道命令的重点是它仅会处理standard output,对于standard error output会予以忽略。管道命令必须要     能够接受来自前一个命令的数据称为standar input继续处理才行。
20、本章介绍的管道命令主要有cut,grep,sort,wc,uniq,tee,tr,col,join,paste,expand,split,     xargs
选取命令:cut grep
[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
[root@www ~]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;


[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!


排序命令: sort, wc, uniq
[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思


[root@www ~]# uniq [-ic]
选项与参数:
-i  :忽略大小写字符的不同;
-c  :进行计数


[root@www ~]# wc [-lwm]
选项与参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;


双向重导向: tee
[root@www ~]# ls -l / | tee -a ~/homefile | more
# 要注意! tee 后接的文件会被覆盖,若加上 -a 这个选项则能将信息累加。


字符转换命令: tr, col, join, paste, expand


分割命令: split
[root@www ~]# split [-bl] file PREFIX
选项与参数:
-b  :后面可接欲分割成的文件大小,可加单位,例如 b, k, m 等;
-l  :以行数来进行分割。
PREFIX :代表前导符的意思,可作为分割文件的前导文字。
eg:cd /tmp; split -b 300k /etc/termcap termcap
关于减号 - 的用途
eg:tar -cvf - /home | tar -xvf -
上面这个例子是说:『我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个命令的 stdout, 因此,我们就不需要使用 file 了!这是很常见的例子喔!注意注意!


第12章 正则表达式与文件格式化处理
1、正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为。
2、正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找,删除,替换某特定字符串的处理程序。
3、只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字符串处理之用。
4、正则表达式与通配符是完全不一样的。通配符(wildcard)代表的是bash操作接口的一个功能,但正则表达式    则是一种字符串处理的表示方式!
5、使用grep或其他工具进行正则表达式的字符串比较时,因为编码的问题会有不同的状态,因此,你最好将      LANG等变量设置为C或者是en等英文语系!
6、grep与egrep在正则表达式里面是常见的两个程序,其中,egrep支持更严谨的正则表达式的语法。
7、由于编码系统的不同,不同的语系(LANG)会造成正则表达式选取数据的去表,因此可利用特殊符号如          [:upper:]来替代编码范围较佳。
8、由于严谨度的不同,正则表达式之上还有更严谨的扩展正则表达式。
9、基础正则表达式的特殊字符有*,?,[],[^],^,$等!
基础正则表达式字符
^word     意义:待查找的字符串word在行首   
  eg范例:  grep -n '^#' regular_express.txt   搜寻行首为 # 开始的那一行!
word$     待搜寻的字符串(word)在行尾!
.         代表『任意一个』字符,一定是一个任意字符!
*         重复零个或多个的前一个 RE 字符
\{n,m\}   连续 n 到 m 个的『前一个 RE 字符』
          若为 \{n\} 则是连续 n 个的前一个 RE 字符,
          若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符!
[]        字符集合的 RE 特殊字符的符号
[^list]   意义:从字符集和的RE字符里面找出不要的字符串或范围。
10、常见的正则表达式工具有grep,sed,vim等。
[root@test root]# grep [-acinv] '搜寻字符串' filename
参数说明:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!


[root@linux ~]# sed [-nefr] [动作]
参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
      的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
      sed 动作;
-r  :sed 的动作支持的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i  :直接修改读取的档案内容,而不是由屏幕输出。


动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』


function 有底下这些咚咚:
a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正则表达式!例如 1,20s/old/new/g 就是啦!
eg:
范例一:将 /etc/passwd 的内容列出,并且我需要打印行号,同时,请将第 2~5 行删除!
[root@linux ~]# nl /etc/passwd | sed '2,5d'
范例六:我们可以使用 ifconfig 来列出 IP ,若仅要 eth0 的 IP 时?
[root@linux ~]# ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | \
> sed 's/Bcast.*$//g'
11、printf可以通过一些特殊符号来将数据进行格式化输出。
12、awk可以使用“字段”为依据,进行数据的重新整理与输出。
相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个『字段』来处理
[root@linux ~]# awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
13、文件的比较中,可利用diff及cmp进行比较,其中diff主要用在纯文本文件方面的新旧版本比较。
[root@linux ~]# diff [-bBi] from-file to-file
参数:
from-file :一个档名,作为原始比对档案的档名;
to-file   :一个档名,作为目的比对档案的档名;
注意,from-file 或 to-file 可以 - 取代,那个 - 代表『Standard input』之意。
-b  :忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "about     me" 视为相同
-B  :忽略空白行的差异。
-i  :忽略大小写的不同。
cmp主要利用『位』单位去比对
14、patch命令可以将旧版数据更新到新版(主要由diff创建patch的补丁来源文件)。
eg:
[root@linux ~]# mkdir /tmp/old; cp /etc/passwd /tmp/old
[root@linux ~]# mkdir /tmp/new; cp /tmp/test/passwd /tmp/new
[root@linux ~]# cd /tmp ; diff -Naur old/ new/ > test.patch
[root@linux ~]# patch -pN < patch_file
参数:
-p  :后面可以接『取消几层目录』的意思。


范例一:将刚刚制作出来的 patch file 用来更新旧版数据
[root@linux ~]# cd /tmp/old
[root@linux ~]# patch -p1 < /tmp/test.patch
patching file passwd
# 为什么这里会使用 -p1 呢?因为我们在比对新旧版的数据时,是在 /tmp 底下,
# 而实际的数据是在 /tmp/old 里面,因此,当我们进入到 /tmp/old 时,
# 再查阅 /tmp/test.patch 的第一行如下:
# diff -Naur old/passwd new/passwd (用 head -n 1 /tmp/test.patch)
# 发现到,我们所在的目录其实是 old 里面,所以,就必须要减去一层目录。


第13章
1、shell script是利用shell的功能所写的一个“程序”(program),这个程序是使用纯文本文件,将一些shell    的语法与命令(含外部命令)卸载里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所    想要的处理目的。
2、shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上九不够好了,因为shell      script的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良。
3、在shell script的文件中,命令是从上而下、从左而右地分析与执行。
4、shell script的执行至少需要有r的权限,若需要直接命令执行,则需要拥有r与x的权限。
5、在良好的程序编写习惯中,第一行要声明shell(#!/bin/bash),第二行以后则声明程序用途,版本,作者      等。
6、对谈式脚本可用read命令达成。要创建每次执行脚本都有不同结果的数据,可使用date命令利用日期完成。
7、script的执行若以source来执行时,代表在父进程的bash内执行之意!
8、若需要进行半段是,可使用test或中括号([])来处理。
9、在script内,$0,$1,$2,$@,$#是由特殊意义的!
   $0:是文件名
   $#:代表后接的参数“个数”
   $@:全部变量
10、条件判断式可使用if...then来判断,若是固定变量内容的情况下,可使用case$var in esac 来处理
11、循环主要分为不定循环(while,until)以及固定循环(for),配合do、done来达成所需任务!
12、我们可使用sh -x scipt.sh来进行程序的调试。
进行运算var=$((运算内容))
判断式[ "$HOME" == "$MAIL" ]
eg:#!/bin/bash
# Program:
#       This program shows the user's choice
# History:
# 2005/08/25    VBird   First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


read -p "Please input (Y/N): " yn


if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
echo "OK, continue"
elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
echo "Oh, interrupt!"
else
阅读(2563) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~