`

shell 学习

 
阅读更多

1. shell 根据表现方式与读取使用者输入种类的不同,可分为两大类:

        1. Text base : 文字向导

        2. Graphic base :图形向导


2. Bash 有两种工作模式:交互模式,非交互模式


3.  /dev/null 是只写文件,传说中的黑洞。


4. 合法的shell都标记在 /etc/shells 里面


5. 常见转义字符:

单引号 ' \'
双引号 “ \"
星号 * \*
? \?
倒斜线 \ \\
~ \~
` \`
! \!
# \#
$ \$
& \&
( \(
) \)
[ \[
] \]
{ \{
} \}
; \;
< \<
> \>
/ \/
|  


6. 让script在现行的shell中执行2种方法:

 

1.     . /root/tmp/test.sh   (注意点和/之间有空格)
2.    source /root/tmp/test.sh

 

  7 .    

 

 

 

实战Linux shell 编程与服务器管理 笔记


开启文件 fd<>filename
关闭文件 fd<&-  fd>&-  不用的文件及时关闭是好习惯
复制文件代码,建立文件连接 n<&m  复制m,存成n,也就是将m连接到n
    n>&m  复制m存成n,使n连接至m

列出系统内定义的信号:
kill -l  或者  trap -l
查找说明   man 7 signal

如果使用kill或killall发送信号时没有提供信号,默认为 SIGTERM
为什么 kill -TERM  pid  有时不能终止进程?(TERM和-9里面都有杀死的意思)
因为进程中可以重新定义对信号 TERM的处理方式,而不能重定义-9的处理。

KILL和STOP这两个信号无法用trap捕捉,也无法忽略。

trap运用: trap 触发指令  信号串行

取消:   trap '-' 信号串行
忽略:   trap '' 信号串行

清空历史bash记录文件  history -c

注意:  ~不可以放在单引号或双引号中,否则会失去家目录的替换效果

ls -a -A  区别 -a 会有 . .. 但 -A没有,都会显示隐藏目录

当用命令替换产生的参数过多传递给下面的程序时,会报参数行过长的错误信息,而无法正常运作。这时,可以改用find或xargs。

declare在脚本中不好使,原因没有使用bash进行脚本解析,例如我没有添加脚本的执行权限,直接使用 sh filename.sh  结果报错说 declare not found ,并且for syntax

error,解决方法有两种,一种是用 bash  filename.sh  另外一种是在脚本开头添加  #!  /bin/bash   然后给脚本加执行权限,之后  ./filename.sh  就可以了。


建立多级目录   mkdir -p  t1/t2/t3
建立目录时指定目录权限而不是由umask决定   mkdir -m 755  dirname

对于使用ln 硬链接建立的关联文件,两个文件指向同一个文件,删除其中一个文件时,计数器减1,知道最后计数器为0了,才会删除整个文件。
软链接呢?

建立特殊文件  mknod option  filename  [bcp] major minor

命名管道是有路径的,在一个目录下建立的命名管道只能在对应的目录下才可找到。

craker会用 chattr +i filename  来使得文件不得修改,即使root也不行,这样就无法删除了, 需要用 chattr来移除属性即可。lsattr查看文件属性

stat  查看文件信息 大小,连接数目等等。

转码工具  iconv

 

 

默认关闭,除非允许

iptables -L -n  查看 iptables 的设定情况

由用户自定义的自动执行文件,已由原来的/etc/init.d/rc.local 移到/etc/rc.local


生成摘要:
md5sum filename > filename.md5
校验:  md4sum -c filename.md5

sha1 filename > filename.sha1
校验: sha1 c filename.sha1


查看系统开启了哪些服务? 如何关闭,开启等等

postfix发一封邮件

bash 4.0之后的新特性,支持数组的key value模式
支持switch的连续匹配模式,支持类似perl,python的连续数字生成模式。大小写转换^, 还有一个 ** 用来列出当前目录下的所有文件列表省去使用find的麻烦。

备份: cp   cpio  dump   tar

tar -cvjf tar.bz2 dirname_or_filename
tar -cvzf tar.gz  dirname_or_filename
查看tar包中的文件
tar tvf tarfilename 
如果使用了压缩算法,那么要使用对应的参数才能查看tar包中的文件
tar tvjf tarfilename

如果要解压到某一特定目录,该目录一定要事先存在才行
tar xvf tar_filename -C  path

向tar包中增加文件  r选项  (但要注意如果使用了压缩,那么必须先解压才能添加)
tar rvf tar_filename file
bunzip2 tar_filename
tar rvf tar_filenaem  appendfile_name
bzip2 tar_filename

合并tar文件:
tar Avf file1.tar file2.tar file3.tar

删除tar中某一文件
tar vf etc.tar --delete etc/hosts

与实际文件系统比较(需放在同一目录)
tar dvf etc.tar

tar 还可以进行远程备份
tar cvf 主机:/路径/文件名 文件或目录

用tar进行标识
tar cvf home.tar -V backup_`date %Y%m%d%H%M` /home

差异性备份:
tar cvf home.tar -g /var/log/home-1.snar /home
tar cvf home-1.tar -g /var/log/home-1.snar /home
还原 :
tar xvf home.tar -g /dev/null  #  无需参考数据
tar xvf home-1.tar -g /dev/null

dd 低阶层次的备份,可以拷贝整个硬盘,按区拷贝,可以把MBR直接复制出来

复制光盘
dd if=/dev/cdrom of=/bk/mycd.iso bs=2048 conv=sync,notrunc

 

 

 

题目:

1.  删除指定文件的前100个字节,即头部的100个字节。

tail -c +101 filename

2. 删除指定文件的末尾100个字节。

 

 

crontab  命令

cron是时间计量单位,百万年的意思。名字很霸气。

用法  分、时、日、月、星  command  path

几个符号:

* : 任何时间

/ : 每隔多长时间

- : 一个时间段

, : 分隔每个时间。

星期: 0-6, 0是星期日

 

一个需要牢记的重定向的例子:

./a.out  > out.txt 2>&1  正常

./a.out 2> out.txt 2>&1  还是输出到终端上,文件中没有

./a.out > out.txt 2>&1  正常

 

测试程序

#include <stdio.h>

int main()
{
    char *pout = "stdout test\n";
    char *errout = "stderr test\n";
    fwrite(pout, strlen(pout), 1, stdout);
    fwrite(errout, strlen(errout), 1, stderr);
    return 0;
}

 

     fwrite(char *buffer, size_t size, size_t nmemb, FILE *fp);

 

 tar 打包时不包括特定文件、文件件

tar -cvf tarbao.tar --exclude=dir/excludefilename

tar -cvf tarbao.tar --exclude=dir/excludefodername/*

 

rm 删除特殊字符文件, 分两种:

a)  以--开头的文件   rm -- --exclude  

b)  乱码文件

     首先 ls -i 列出文件的节点ID, 如: 123456789 

     然后 find ./ -inum inode_value -print -exec rm -rf {} \;

 

 

 两个去重文件的并和交集:

cat a b | sort | uniq -d > c   # c 是a和b的交集

cat a b b | sort | uniq -u > c   # c 是a和b的不同

 

xargs 的 -I -i参数

 cat hosts | xargs -I{} ssh root@{} hostname 

 

 

shell 几个内置符号常量:

$@ 参数数组:  "a" "b" "c"

$*   所有的参数,  一个字符串:   "a b c"

$#   参数个数, 如  ./test a b c   为3

 

shell 的函数返回值只能是0-255的数值。通过$?查看。  如果需要返回字符串,使用子shell调用,并用echo打印,用变量接收。

 

几个简单命令:

 

tar  -zcvf  hello.tar.gz  hello/

tar -jcvf hello.tar.bz2 hello/

tar -zrf hello.tar.gz append.txt

tar -tf hello.tar.gz

 

以16进制查看文件:

hexdump  -C  filename

hexdump -c filename

 

linux 下 在文件浏览器下,F3可以切出一个竖屏来。

 

 去掉空行:  sed '/^$/d' filename

 

奇偶行分离:第一行是奇数行,从1开始奇数

awk 'NR%2==0' filename

awk 'NR%2==1' filename

 

 

1.  为输出着色 

大多数情况下,你希望输出带颜色的结果,比如绿色代表成功,红色代表失败,黄色代表警告。

 

NORMAL=$(tput sgr0)
GREEN=$(tput setaf 2; tput bold)
YELLOW=$(tput setaf 3)
RED=$(tput setaf 1)
 
function red() {
    echo -e "$RED$*$NORMAL"
}
 
function green() {
    echo -e "$GREEN$*$NORMAL"
}
 
function yellow() {
    echo -e "$YELLOW$*$NORMAL"
}
 
# To print success
green "Task has been completed"
 
# To print error
red "The configuration file does not exist"
 
# To print warning
yellow "You have to use higher version."

 

获取目录名和文件名:

dirname  $filepath
basename $filepath

 读取超时设置

READ_TIMEOUT=60
read -t "$READ_TIMEOUT" input
 
# if you do not want quotes, then escape it
input=$(sed "s/[;\`\"\$\' ]//g" <<< $input)
 
# For reading number, then you can escape other characters
input=$(sed 's/[^0-9]*//g' <<< $input)

 

HERE DOCUMENT

cat << EOF
sssss
    what i write is what you will see format
        yes
EOF

 

 用户配置值vs. 默认值 

     URL=${URL:-http://localhost:8080}

 

字符串长度:

     ${#strname}

 

检查特定可执行的文件是否存在 

OK=0
FAIL=1
 
function require_curl() {
    which curl &>/dev/null
    if [ $? -eq 0 ]
    then
      return $OK
    fi
 
    return $FAIL
}

 

这里使用which来命令查找可执行的curl 路径。如果成功,那么可执行的文件存在,反之则不存在。将&>/dev/null设置在输出流中,错误流会显示to /dev/null (这就意味着在控制板上没有任何东西可打印)。 

有些极客会建议直接通过返回which来返回代码。 

# From cool geeks at hacker news
function require_curl() { which "curl" &>/dev/null; }
function require_curl() { which -s "curl"; }

 

 

 

 tr 命令:translate or delete characters

    tr  -s "a"  #删除连续的多个a,只保留第一个

    tr -s "a" "b" #将a替换为b,并删除连续的多个b,只保留第一个

 

    tr "abc" "xyz" # 字符替换,a替换为x,b替换为y,c替换为z

 

    tr  -d "abc"  #删除所有字符"a",“b”,"c"

    tr -d "\n" #删除空行

 

    tr  -c  "a-zA-Z0-9\n\- " "@" #替换文本中"a-zA-Z0-9\n\- "以外的所有字符为@。传说中的补集

 

 

cat out.txt | grep  "delete" 报错如下:

 grep:Binary file (standard input) matches

这是grep认为这是binary file,无法进行搜索。

 

解决方法:

grep -a "delete"  # -a  是说

        -a, --text

              Process  a binary file as if it were text; this is equivalent to the --binary-

              files=text option.

 

#一个填充0的函数
function fillzero
{
   ((i=$1));
   if [ $i -lt 10 ]; then
        echo 0$i;
        return;
   fi
   echo $i;
}

#调用
fillzero $var1

  

替换文件中的tab为空格:

1. vim 打开要操作的文件

2. 替换空格

:set ts=4

:set expandtab

:%retab!

 

设置文件的编码:

1. vim打开要操作的文件

2. 查看编码:

:set fileencoding

 

3. 设置编码:

:set fileencoding=gbk

 

 shell接收参数函数:

while getopts c:v:d:f: opt
do
    case $opt in
        c)
               echo $OPTARG
               ;;
        *)
               echo "unknown opt:$opt"
               exit 0
    esac

done

 

 source /home/work/a/b/bashrc 时,如果想在bashrc知道自己的路径怎么办?

BASE_HOME=`dirname ${BASH_SOURCE}`
cd ${BASE_HOME}
BASE_HOME=`pwd`

 

 

分享到:
评论

相关推荐

    shell学习,第一章

    Shell学习第一章主要涵盖了Shell脚本语言的基础知识,包括Shell的介绍、基本语法、变量和字符串操作等内容。以下是对这些知识点的详细阐述: 1. **Shell介绍**:Shell是一种命令行解释器,它允许用户与操作系统进行...

    实用的shell学习资料

    **实用的Shell学习资料概述** Shell是Linux和Unix操作系统中的一种命令解释器,它作为用户与操作系统之间交互的界面,允许用户输入命令并执行。在众多的Shell中,Bash(Bourne Again SHell)是最流行的一个,广泛...

    shell学习资料01

    shell学习01

    shell学习方法

    ### Shell学习方法详解 #### 一、Shell简介 在计算机科学领域中,Shell是一种非常重要的交互式编程环境,被广泛应用于各种操作系统中,包括Linux、Unix等。Shell通常被称为“壳”,用来区别于操作系统的核心部分...

    linux shell学习资料

    在本学习资料包中,包含了三本关于Linux Shell的重要书籍:《Linux Shell编程艺术》、《Linux Shell脚本攻略》以及《Linux Shell从入门到精通》,这些资源将帮助你全面深入地理解和掌握Linux Shell。 《Linux Shell...

    shell学习经典资料

    以下是对标题“shell学习经典资料”及相关文件的详细解析: 首先,我们看到标题提及了“shell学习”,这指的是对shell编程的学习。Shell编程是一种使用命令行界面编写脚本的技能,它允许用户通过编写简单的或复杂的...

    Linux教程+ shell学习笔记 + Shell脚本常用命令+shell脚本100例资源合集

    本文整理了一份Linux shell学习笔记及基本命令合集,包含了LINUX常用操作命令和命令行编辑快捷键、shell基本命令,Linux相关使用配置教程等,需要的朋友可下载试试! shell是一个用C语言编写的程序,它是用户使用...

    linux脚本shell学习笔记

    shell学习基本命令,可以帮助初学者快速掌握较全面的shell脚本知识

    非常实用shell学习文档

    每个脚本命令都有很实用的例子,让人易于掌握,迅速上手实现shell脚本的开发。

    SHELL基础学习指导

    在Shell学习中,首先需要了解的是一些基础概念。例如,当用户登录到Linux系统时,系统会根据/etc/passwd文件中的信息来决定使用哪个Shell。用户可以在命令提示符下输入命令,由Shell进行解释和执行。例如,输入命令...

    shell学习笔记-2018-01-09

    ### Shell学习笔记 #### Shell的发展与分类 Shell作为Unix及类Unix系统(包括Linux)的主要用户界面之一,其历史可以追溯到20世纪70年代。最初,Shell仅仅作为一个简单的命令解释器,随着时间的推移,它发展成为了...

    Shell学习.docx

    【Shell学习】 Shell是Linux系统中至关重要的组成部分,它是一个用C语言编写的程序,作为用户与Linux操作系统之间的桥梁。Shell不仅是一个命令语言,允许用户输入指令执行操作,同时它也是一种程序设计语言,能够...

    Shell学习笔记总结

    Shell 学习笔记总结 本资源是 Shell 学习笔记的总结,涵盖了 Shell 的基本概念、类型、变量、进程、权限、管道、POSIX、grep、sed、awk 等命令和编程语言。 一、 Shell 的类型和特点 Shell 是一种命令行界面,...

    Linux Shell学习资料合集

    分别有以下这些内容的资料 Linux与unix shell编程指南 Bash参考手册 Expect中文教程 Expect简介和应用 Expect命令基本语法 高级Bash脚本编程指南 高级Shell脚本编程 Shell命令合集

    liunx shell学习指南

    Linux Shell学习指南是针对Linux操作系统中的命令行接口——Shell,进行深入学习的资源。Shell是用户与Linux内核交互的桥梁,它提供了命令行界面,允许用户通过输入指令执行各种任务。对于初学者来说,掌握Shell编程...

    shell学习(经过自己整理)

    shell学习(经过自己整理) shell编程简介: Shell编程是指使用shell脚本语言编写的程序,以实现自动化任务、批量处理、系统管理等功能。Shell编程语言是基于文本的命令行接口,用户可以通过编写脚本来实现特定的...

    shell学习脚本指南

    Shell学习脚本指南是一份非常实用的资源,尤其适合初学者深入理解并掌握Shell脚本编程。Shell,作为Linux和Unix系统中的命令解释器,是系统管理员和开发者的强大工具,能够实现自动化任务处理和系统管理。这份PDF...

Global site tag (gtag.js) - Google Analytics