Linux命令

http://www.cnblogs.com/xkfz007/archive/2012/03/04/2379322.html

Linux命令行和shell脚本编程宝典

这次阅读《Linux命令行和shell脚本编程宝典》这本书是第3次阅读。 总的来说,这本书还是挺不错的。很适合入门。我也是从这本书开始了解shell编程的。

不过,因为现在对Linux 环境也比较熟悉了,并且也会一些shell编程了,所以,这次看的时候会比较快,有些已经会的东西就没有写。只是记录下那些之前没有注意到的东西。

第1章 Linux shell入门

Linux 内核

GNU软件:

Gnome shell

Gnome软件

Linux发行版

(1)核心发行版

(2)特定发行版

第2章 了解shell

Linux下的虚拟控制台:ctrl+Alt+F1/F2/F3../F8

模拟终端:xterm, gnome terminal

1. 任务管理命令:

&: 最经常被用到,这个用在一个命令的最后,可以把这个命令放到后台执行

ctrl + z:可以将一个正在前台执行的命令放到后台,并且暂停

jobs:查看当前有多少在后台运行的命令

fg:将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

bg:将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

 

2.文件和目录操作 
 (1). 文件列表
 ls -l -h -a -s
 (2). 创建文件/目录
 touch  -a access time
        -m modify time
        -t time stamp
 mkdir -p
 (3). 复制文件/目录
 cp -r(递归复制文件) -v -p(保留文件属性)
    -R(递归复制目录)
    -l(创建硬链接文件)
    -s(创建软连接)
 (4). 重命名
 mv -v 
 (5). 删除文件/目录
 rm -r -v -f
 rmdir
 (6). 查看文件内容
 cat -n(编号)
 vi,od(二进制),more,less,tail,head
 nl(为输出加上行号)
 stat(文件统计数据)
 file(文件类型)
   
3.进程管理
(1). 进程查看
   ps -aux
   ps -l
   ps -efH
   top
(2)进程管理
   kill
(3) 查看磁盘
  mount -o loop
  umount
  df -h -l
  du -c -h -s -a
(4) 数据排序
  sort -n(进行数值排序)
       -r(逆序)
(5)搜索数据
 grep -n(显示匹配行号)
      -v(反转搜索)
      -c(统计匹配数)
      -e(指定多个匹配)
4. 环境变量
(1). 创建全局环境变量
   export
(2). 移除全局环境变量
   unset
(3). 默认的环境变量
  HOME,HOSTNAME,PATH,IFS(用于分割字段的字符列表),OPTARG,OPTIND
(4). 登录shell
 当登录到Linux系统时,bash shell将作为登录shell启动.登录shel将查找4个不同的启动文件来处理其中的命令.
 bash shell中处理文件的顺序如下:
 /etc/profile
 ~/.bash_profile
 ~/.bash_login
 ~/.profile
 即先执行/etc/profile,接着检查用户的目录中是否有.bash_profile,.bash_login或.profile其中之一.
 当执行新的shell时, 如果是执行交互式的shell,例如直接执行bash,bash会执行/etc/bashrc文件,然后检查用户目录中的.bashrc
 如果非交互式(shell script),bash shell会去执行BASH_ENV环境变量的内容.

 

  

5.shell中数学计算

(1)count=1;count=$[ $count+1 ]

(2) let i=i+1;(( i=i+1 ))

(3)var=1;var=`expr $var + 1`

第4章 Linux中的权限管理

 常用的命令:

 useradd用于添加新用户
 userdel删除用户,但是只删除/etc/passwd中的用户信息,不会删除账户在系统中拥有的任何文件
 passwd 修改账户密码
 chsh 修改默认shell

 groupadd 添加用户组

chmod   修改权限
chown  修改所有者
chgrp 修改用户组

  

第10章 结构化命令

  (1) if-else

 数值比较:-eq,-ge,-gt,-le,-lt,-ne
 字符串比较:=,!=,<,>,-n,-z
 文件比较:-e,-d,-f,-r,-w,-x,-s
 复合条件检查:&&,||
 (2)case
 (3)for,while,until
 (4)break,continue

 

第11章 处理用户输入输出

  (1)命令行参数

 位置参数:$0程序名称,$1第一个参数,$2第二个参数...
 basename,dirname
 $#命令行参数个数
 $*所有参数作为一个对象
 $@所有参数作为多个对象

(2)处理选项

  利用case语句的形式

 shift偏移参数
 getopt命令接受任意形式的命令选项和参数列表,并自动将这些选项和参数转换为适当的格式.
 如:getopt ab:cd -a -b test1 -c -d test2 test3
 set命令的一个选项是双破折号,将命令行参数变量替换为set命令的命令行中的值.
 比如:set -- `getopt ab:cd -a -b test1 -c -d test2 test3`

 getopts命令为在命令行中找到的所有待处理的选项和参数生成一个输出,并且顺序的对现有的shell参数变量进行处理
 同时利用到了两个环境变量OPTARG和OPTIND.OPTARG中包含需要参数值的选项要使用的值;OPTIND包含的值表示getopts停止处理时在参数列表中的位置.

  

 

 (3)获取用户输入
 echo -n(不换行)
 read 读取输入
     -p 给出提示
     -t 计时
     -n1 指示read命令只需接受一个字符后就退出
     -s 不回显

  (4)使用临时文件

  linux中的/tmp目录处理不需要永久保存的文件,在启动时自动删除/tmp目录中的任何文件
  系统上的任何用户账户都有权读取和写入/tmp目录中的文件.
  mktemp testing.XXXXXX  创建本地临时文件
  -t 强迫mktemp在/tmp中创建文件
  当mktemp创建临时文件时,它将完整路径名返回给环境变量.
  -d 创建一个临时目录

 

输入输出重定向:

 1.重定向错误

ls -al badfile 2>test4 #将错误重定向到文件test4,这样程序的错误就直接输入到了文件test4中,而在屏幕上看不到输出。

2. 重定向错误和数据

如果需要同时重定向错误和普通数据,则必须使用两个重定向符号。必须在希望重定向的数据前面放置相应的文件描述符,然后将他们指向相应的输出文件以保存数据

如:

ls -al test test3 badfile 2>test6 1>test7

这是将错误重定向到test6文件,将标准输出STDOUT重定向test7文件

其实,也可以将STDEER和STDOUT重定向到同一个文件,使用&>符号,如:

ls -al test test2 test3 badfile &> test7

这样,错误和标准输出都定向到test7文件中了。

3. 临时重定向

如:

echo "This is an error" >&2 #将这句重定向到了标准错误

4. 永久重定向

exec 1>testout 在脚本执行期间,将标准输出重定向到testout

exec 2>testerror 在脚本执行期间,将标准错误重定向到testerror

但是这样存在的一个问题是重定向STDOUT和STDERR之后,就无法再将他们重定向到原来的位置。

exec 0<testfile 在脚本执行期间,将testfile重定向到标准输入

5. 输出文件描述符。shell中最多有9个打开的文件描述符,其他6个是3~8

exec 3>test13out

echo "and this" >&3

将数字3重定向到test13out文件,这样上面echo后面的一句就输入到了test13out文件。

6. 恢复重定向文件描述符

exec 3>&1

exec 1>test14out

echo "dsafadsfasdf"

exec 1>&3

这样 先将文件描述符3重定向到标准输出,然后将标准输出重定向到文件test14out,之后再把文件描述符1重定向到3,这样1就恢复了原来的STDOUT了。这儿文件描述符3相当于一个临时变量来保存标准输出STDOUT

类似输入文件描述符如下:

exec 6<&0

exec 0<testfile

....

exec 0<&6 

7. 创建读取/写入文件描述符

确实可以为输入和输出打开同一个文件描述符,可以使用同一个文件描述符从一个文件读取数据,同时向这个文件写入数据

exec 3<>testfile

输入输出都定向到了testfile文件。

8. 关闭文件描述符

要关闭文件描述符,将它重定向特殊符号&-

如:exec 3>&-

 

第13章 脚本 脚本控制

 

mktemp testint.XXXXXX 创建临时文件     

-t 选项强迫mktemp在系统临时文件夹中创建临时文件

-d mktemp创建一个临时目录

 

tee命令可以将STDIN的数据同时发送到STDOUT和其所指定的文件

 

创建函数

return 命令以特定退出状态退出函数。return命令可以使用单个整数值来定义函数退出的状态,提供了一种通过编程设置函数退出状态的简单方法。

必须注意两个容易发生的错误:

(1)请记住在函数完成之后尽快提取返回值。

(2)请记住退出状态的取值范围是0~255

 

第15章 在脚本中使用颜色

 

 

 

 

 

 第16章 sed和awk介绍

 

 sed使用

   -e 使用多个命令时要使用这个参数

  -f 执行文件中的命令
  -n 禁止输出

 数字用来指定sed编辑器替换哪一个实例

p输出已经修改的行,-n 选项禁止sed编辑器的输出。二者结合使用会只输出那些已经更改行

删除文本d:指定行:sed '2,$d' data

模式指定:sed '/num/d' data#删除带有num的行

插入和附加文本:

插入命令(i)在指定行之前添加新一行

附加命令(a)在指定行之后添加一行

可以在i或a之前使用数字行号(包括某一个范围之内的所有行)或文本模式匹配(在所有的匹配行之后或之前插入),找到相应的行之后,再插入

更改行(c)和插入/附加的使用类似

变换命令y:[address]y/inchars/outchars/

将[address]范围之内的所有inchars字符替换为outchars,注意inchars与outchars的个数必须一致,从而保证一一映射。这是个全局命令

打印行号(=):sed '=' data1

 

将文件用于sed(可以使用地址范围和模式匹配)

1. 写文件

[address]w filename 如 sed -n '1,3w test' data6 将1到3行写入到test

2. 读文件

[address]r filename

将filename中的内容读入到r行之后,在标准输出上显示

正则表达式

^匹配开头

$匹配结尾

. 单个字符匹配

[]匹配字符类

[^]否定字符类

特殊字符类

gawk的使用

   -F 指定分隔符

 

   -f 指定读取程序的文件名
   -v 定义所要使用的变量
   $0:整行文本
   $1,$2,...第1,2个字段
   
  gawk ' BEGIN{} {} END{}'
  
  字段匹配符号~
  $1 ~ /^data/
  如:gawk 'BEGIN {FS=","} $2 ~ /^data2/{print $0}' data1
  使用数学表达式:
  gawk -F: '$4 == 0{print $1}'/etc/passwd
           数学比较式:==,<=,<,>=,>
  
  结构化命令:(用花括号括起来)
  if{}else{}
  while{}
  do{}while
  for(){}

  格式化打印:
  printf "format string",var1,var2....

 

用户可以在脚本中定义变量

在gawk的脚本中进行变量赋值的方法类似于shell脚本

赋值语句中还可以包含数学计算,如:gawk 'BEGIN {x=4;x=x*2+3;print x}'

  

第19章高级gawk编程

posted @ 2014-09-07 22:26  daishuguang  阅读(266)  评论(0编辑  收藏  举报