Linux Shell脚本攻略 读书笔记

这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝;
最有价值的当属文本处理,对这块我单独整理出来一篇blog,详见《Linux Shell文本处理工具集锦》
下面是文本处理之外的简单介绍,如果你觉得自己的shell需要充充电,强烈建议读读这本《linux Shell脚本攻略》

嗨,Echo一下

从 echo开始:
带引号的 echo和不带引号的 echo区别:
使用带引号时,bash 不会对单引号中的变量进行求值,而是原样输出;
而使用双引号,或者不使用引号,则会对变量进行解析:

echo '$var' // $var
echo $var // 5
echo "$var" // 5
  • 对比printf 的格式化输出
    printf "%-5s %-10s %-4s" NO NAME HELLO //左对齐 宽度为 5 10 4
    具体的值使用右边引号外的;
  • 对比 python中的输出:
    printf " %s " % "hello"

  • 让echo支持转义字符:-e

    [/home/weber#]echo -e '1\t2'
    1 2

给终端来点颜色

  • 在终端彩色输出:

    echo -e '\e[1;31m this is red text\e[0m'
    this is red text
  • 更有用的是为我们提示符着色:
    vi .profile添加:
    export PS1='[[\e[34;1m]$PWD#\e[0m]'

  • 注意环境变量的赋值错误
    var=value //赋值操作 echo $var
    var = value //判断相等操作

    [/home/weber#]var=5
    [/home/weber#]echo 'this is $var'
    this is $var
    [/home/weber#]echo "this is $var"
    this is 5
  • 获取变量值的长度:

      length=${#var} //语法真诡异
  • 打印程序的退出状态:
      echo $?
  • 对.bashrc 修改的简便方法:
      echo 'a=/abc/' >> ~/.bashrc
  • 为rm打造回收站功能:
      alias rm='cp $@ ~/backup; rm $@' 

shell的控制结构

  • 条件判断

    if condition;
    then
    commands;
    elif condition;
    then
    commands
    else
    commands
    fi
  • 循环结构

    for var in list;
    do
    commands;
    done

    list可以是字符串或是序列;
    echo {1..50} 生成列表
    echo {a..z}

  • 更亲切的for循环(类C)

    for((int i = 0 ; i < 10 ;i++))
    {
    commands;
    }
  • while循环

    while condition
    do
    commands;
    done

算术比较

  • 语法
    if[ $var -eq 0 ] && action;
    -gt :大于
    -lt: 小于
    -ge: 大于等于
    -le: 小于等于
    -a: 逻辑与
    -o: 逻辑或

  • 字符串的比较,最好使用双中括号
    [[ $str1 == $str2 ]]
    [[ $str != $str ]]
    支持 > 、 <
    判空:-z 非空: -n

  • if更友好:
    if [[ -n $str ]] && [[ -z $str2 ]];
    then
    commands;
    fi

  • 避免if语句过长
    [ condition ] && action ;//condition为真,则执行action
    [ condition ] && action; // condition 为假,则执行aciton
    注意:condition 和[ ] 之间必须有空格,否则报错;

目录操作

  • 创建长路径目录:

      mkdir -p colin/soft/redis/
  • 粘滞位和setuid:

      chmod a+t file_dir/

    设置了粘滞位,只有目录的所有者才有权限删除该目录

  • 让所有用户都有权限执行文件:

      chown root.root file
    chmod +s file

    设置setuid文件权限后,它运行其它用户以文件所有者身份来执行文件;
    tips:只有linux 的elf二进制文件才可设置这个文件权限;

  • 文件写保护

      chattr +i file //文件不可修改、不可删除
  • touch的妙用
    touch可用来生成空白文件;如果文件存在,则更新时间戳;
    eg:批量生成100个空白文件

    for name in test{0..100}.txt
    do
    touch $name
    done
  • 只列出目录的方法

    1. ls -d */
    2. ls -F| grep '/$' //-F会在文件尾部列出文件类型;
    3. ls -l| grep '^d' //-l第一行第一个字符是文件类型;
    4. find . -type d -maxdepth 1 -print
  • 切换目录快速定位
    压入并切换:

     pushd /var/www
    dirs: 显示当前路径栈

    选择路径回切(通过索引编号):

     pushd +3

    移除最近压入栈的路径并切换到下一个目录:

     popd

网站下载

wget url:直接下载文件或者网页;
--limit-rate :下载限速,别太快
-o:指定日志文件;输出都写入日志;
-c:断点续传

    wget -c ftpUrl

下载整个站点所有页面

wget --mirror me115.com

或者:

wget -r -N -l DEPTH me115.com

-l:指定页面层级的深度;
-N:允许对文件使用时间戳;

格式化文本形式下载网页

lynx -dump URL > web.txt

-dump选项将网页已ASCII字符形式下载到文本文件中;

更多

如果需要更丰富的下载功能,考虑使用curl;其支持多种协议,
还支持POSF、cookie、认证、用户代理字符串等特性;
如果你想将网页处理流程自动化,cURL是很好的选择;

tar 归档工具

  • 归档:

      tar -cvf output.tar dir/

    -c:创建规定
    -f:指定文件名
    -v:在归档或解开时显示更多的详细信息

  • -r:追加文件到归档中:

      tar -rvf output.tar dir2/
  • -t:显示归档内容;

      tar -tf output.tar
  • 提取归档文件:

      tar -xvf output.tar
  • 归档时排序版本控制目录(svn、cvs、git等目录信息):

      tar --exclude-vcs -czvf source_code.tar.gz source/

rsync 备份系统快照

rsync -av source_path destination_path

-a:表示归档;-v:归档时显示详细信息
-z:指定在网络传输时使用数据压缩;
路径可以是远程路径:
eg:rsync -avz source_dir usrname@host:path;
(如果不希望使用交互式的密码输入,可使用SSH密钥来实现)

注:source_dir末尾如果使用路径/,那么rsync会将source_dir目录中的所有
内容复制到目的端;如果没有带/,则会将source_dir本身复制到目的端;

备份时排除部分文件:

rsync -avz /home/code /mnt/disk/bakup --exclude "*.txt"

可使用一个列表文件指定需要排除的的文件:
--exclude-from FILEPATH

ftp自动传输

使用ftp选项-i关闭交互会话;
eg ftp.sh:

!/bin/bash
HOST='me115.com'
USER='colin'
PASSWD='passwd'
ftp -i -n $HOST <<EOF
user ${USER} ${PASSWD}
binary
cd /home/linux
put test.php
quit
EOF

磁盘管理

  • 显示文件大小

      du -h filename
  • 统计文件夹的详细大小及总计

      du -ch svn_archives/

    -s 只输出合计信息;

  • 找出指定目录中最大的文件

      du -ak source_dir | sort -nrk 1| head

    -a:扫描指定目录下所有文件(递归到最深一级目录)
    结果单位指定:-k KB -m MB -h 人性化显示(打算排序的时候,不要用这个,因为单位不统一了)
    上述结果中包含了目录,如果只看文件,不需要目录:

      find . -type f -exec du -k {} \; | sort -nrk 1| head

故障排查

  • 当前登录用户:who
  • 当前登录主机的用户列表:users
  • 排除重复用户:users | tr ' ' '\n' | sort |uniq
  • 系统运行时长: uptime
  • 获取登录会话信息:last (单个用户 last colin)
  • 列出系统开放端口及运行的服务:
    lsof -i
    或者:
    netstat -tnp

使用syslog记录日志

向syslog文件/var/log/messages中记录日志信息:

logger hello,this is colin

发送带标记的日志信息

logger -t ME115  hello,colin coming

/etc/rsyslog.d/下配置了标记和日志的对应关系;

杀死进程

  • 通过进程名获取进程id

      ps -C command_name
  • 通过命令名终止进程:
      killall process_name
  • 通过进程id强杀进程:

      kill -9 process_id
  • 找出命令所在位置: 

      which php
    whereis php
  • 列出命令简短描述信息:

      whatis ls

用/proc收集信息

  • 获取cpu信息:

      cat /proc/cpuinfo
  • 获取内存信息:
      cat /proc/meminfo
  • 获取分区信息:
      cat /proc/partitions

    每一个运行的进程在/proc下都有一个以该进程id命名的目录,
    /proc/PID/下的重要文件:
    environ:包含与进程相关的环境变量;
    exe:到进程工作目录的符号链接;
    fd:进程所使用的文件描述符

Posted by: 大CC | 18NOV,2013
博客:blog.me115.com
微博:新浪微博

Linux Shell脚本攻略 读书笔记的更多相关文章

  1. Linux Shell脚本攻略

    -Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...

  2. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  3. 读书笔记--Linux Shell脚本攻略

    总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理到远程ssh等等,都给出来作者挑选 ...

  4. linux shell脚本攻略笔记

    前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符  echo -e "\e[1:41m" 1表示背景色   2 ...

  5. 【链接】LINUX SHELL脚本攻略笔记[速查]

    LINUX SHELL脚本攻略笔记[速查]

  6. linux shell 脚本攻略学习20--awk命令入门详解

    awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...

  7. Linux shell 脚本攻略之统计文件的行数、单词数和字符数

    摘自:<Linux shell 脚本攻略>

  8. Linux shell 脚本攻略之创建不可修改文件

    摘自:<Linux shell 脚本攻略>

  9. Linux shell 脚本攻略之生成任意大小的文件

    摘自:<Linux shell 脚本攻略>

随机推荐

  1. React-Native入门指导之iOS篇

    React-Native 入门指导系列教程目录 一.准备工作 (已完成) 二.项目介绍与调试 三.CSS样式与Flex布局 四.常用UI控件的使用 五.JSX在React-Native中的应用 六.事 ...

  2. 《C++标准库》

    函数对象 使用bind时注意,占位符有自己的命名空间std::placeholders,如果不在程序开始处using std::placeholders,那么就要写成: std::bind(std:: ...

  3. Asp.net Vnext IValueProvider

    概述 本文已经同步到<Asp.net Vnext 系列教程 >中] IValueProvider 根据ValueProvider获取数据,在对数据进行绑定 代码实现 private cla ...

  4. 20145227 《Java程序设计》第7周学习总结

    20145227 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambda 如果使用JDK8的话,可以使用Lambda特性去除重复的信息. 在只有Lambda表达式的情 ...

  5. 三对角矩阵(Tridiagonal Matrices)的求法:Thomas Algorithm(TDMA)

    转载http://www.cnblogs.com/xpvincent/archive/2013/01/25/2877411.html 做三次样条曲线时,需要解三对角矩阵(Tridiagonal Mat ...

  6. 【转】【Android】开源项目汇总-备用

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  7. python安装numpy科学计算模块

    解决两个问题: (1)Import Error: No module named numpy (2)Python version 2.7 required, which was not found i ...

  8. Android开发:ScrollView嵌套GridView的解决办法

    Android开发:ScrollView嵌套GridView的解决办法   前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...

  9. 南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。

    N! 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它.现在这里有一个问题,给定一个N(0< ...

  10. windows Android 开发环境

    步骤: 1)下载jdk,注意这是安装路径,不是目标路径,忘记了怎么看勒,安装路径的lib文件夹下面有个tools.jar 文件,这个也是等下需要的. 2) 在path 中添加 ;%JAVA_HOME% ...