Linux Shell脚本攻略2:命令之乐(2)

版权声明:原创文章,未经允许不得转载。www.data-insights.cn. https://blog.csdn.net/qixizhuang/article/details/77926455

用tr进行转换


  1. tr可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。它可以将一组字符变成另一组字符,因而通常也被称为转换(translate)命令。

  2. tr只能通过stdin,而无法通过命令行参数来接受输入,其调用格式如下:

    • tr [options] set1 set2

    • 将来自stdin的输入字符从set1映射到set2,然后将输出写入stdout。set1set2是字符类或字符集。如果set1长度大于set2,那么set2会不断重复其最后一个字符;反之,则set2多余的不分会全部被忽略。

  3. 将输入字符由大写转换成小写

    • $ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
  4. 通过在tr中使用集合的概念,我们可以轻松地将字符从一个集合映射到另一个集合中。我们可以据此进行数字加密和解密

    • $ echo 12345 | tr '0-9' '9876543210'

    • $ echo 87654 | tr '9876543210' '0-9'

    ROT13是一个著名的加密算法,在ROT13算法中,文本加密和解密都使用同一个函数。

    • $ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
  5. tr还可以用来将制表符转换成空格:

    • tr '\t' ' ' < file.txt
  6. tr删除字符

    • $ cat file.txt | tr -d '[set1]'

    • $ echo "Hello 123 world 456" | tr -d '0-9'

  7. 字符集补集

    • $ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'

    • 上述命令中,补集包含了除数字、空格字符和换行字符之外的所有字符。因为制定了-d选项,所以这些字符全都被删除。

  8. tr压缩字符

    • $ echo "GNU is not UNIX. Recursive right ?" | tr -s ' '

    • tr-s选项可以压缩输入中重复的字符。

  9. 字符类。tr可以像使用集合一样使用各种不同的字符类,这些字符类如下所示:

    • alnum:字母和数字
    • alpha:字母
    • cntrl:控制字符
    • digit:数字
    • graph:图形字符
    • lower:小写字母
    • print:可打印字符
    • punct:标点符号
    • space:空白字符
    • upper:大写字母
    • xdigit:十六进制字符

    • tr '[:lower:]' '[:upper:]'


检验和与核实


  1. 检验和(checksum)程序用来从文件中生成校验和密钥,然后利用这个校验和密钥核实文件的完整性。

  2. 最知名且使用最为广泛的校验和技术是md5sum和SHA-1,它们对文件内容使用相应的算法来生成校验和。

  3. md5sum

    • md5sum file1 file2 file3 .. #计算文件校验和
    • md5sum filename > file_sum.md5 #将输出的校验和重定向到一个文件,然后用此文件核实数据的完整性
    • md5sum -c file_sum.md5 #输出校验和是否匹配
    • md5sum -c *.md5 #检查所有文件的校验和
  4. SHA-1从给定的输入文件中生成一个长度为40个字符的十六进制串。用来计算SHA-1串的命令是sha1sum,用法和md5sum非常相似。

  5. 对目录进行校验。校验和是从文件中计算得来的,对目录计算校验和意味着我们需要对目录中的所有文件以递归的方式进行计算。这可以通过命令md5deepsha1deep来实现。首先需要安装md5deep软件包以确保能找到这些命令。

    $ md5deep -rl directory_path > directory.md5
    
    # `-r`使用递归的方式
    
    
    # `-l`使用相对路径。默认情况下,`md5deep`会输出文件的绝对路径。
    

    或者结合find来递归计算校验和:

    $ find directory_path -type -f -print0 | xargs -0 md5sum >> directory.md5

    $ md5sum -c directory.md5


加密工具与散列


  1. 加密技术主要用于防止数据遭受未经授权的访问。常用的加密算法有crypt、gpg、base64、md5sum、sha1sum以及openssl。

  2. crypt是一个简单的加密工具,从stdin接受一个文件以及口令作为输入,然后将加密数据输出到stdout,因此要对输入输出文件使用重定向。

    • $ crypt <input_file >output_file
      Enter passphrase: #crypt要求输入一个口令,我们也可以通过命令行参数来提供口令。

    • $ crypt PASSPHRASE <input_file >encrypted_file

    如果需要解密文件,可以使用:

    • $ crypt PASSPHRASE -d <encrypted_file >output_file
  3. gpg(GNU隐私保护)是一种应用广泛的工具,它使用加密技术来保护文件,以确保数据在送达目的地之前无法被读取。

    • $ gpg -c filename #加密
    • $ gpg filename.gpg #解密
  4. Base64是一组相似的编码方案,它将ASCII字符转换成以64为基数的形式(radix-64 representation),以可读的ASCII字符串来描述二进制数据。base64命令可以用来编码/解码Base64字符串。

    • $ base64 filename > outputfile #将文件编码为Base64格式

    或者

    • $ cat file | base64 > outputfile #base64可以从stdin中进行读取

    • $ base64 -d file >outputfile #解码Base64数据

    或者

    • $ cat base64_file | base64 -d > outputfile
  5. md5sum和sha1sum都是单向散列算法,均无法逆推出原始数据,他们通常用于验证数据完整性或为特定数据生成唯一的密钥。

  6. shadow-like散列(salt散列)。

    • 在Linux中,用户密码是以散列值形式存储在文件/etc/shadow中的。

    • $ opensslpasswd -1 -salt SALT_STRING PASSWORD


排序、唯一与重复


  1. sort命令能够帮助我们对文本文件和stdin进行排序操作,它通常会配合其他命令来生成所需要的输出。

  2. uniq是一个经常与sort一同使用的命令。它的作用是从文本或stdin中提取唯一(或重复)的行。

  3. 对一组文件进行排序

    • $ sort file1.txt file2.txt > sorted.txt

    • $ sort file1.txt file2.txt -o sorted.txt

  4. 按照数字顺序进行排序

    • $ sort -n file.txt
  5. 按照逆序进行排序:

    • $ sort -r file.txt
  6. 按照月份进行排序:

    • $ sort -M months.txt
  7. 合并两个已排序过的文件:

    • $ sort -m sorted1 sorted2
  8. 找出已排序文件中不重复的行:

    • $ sort file1.txt file2.txt | uniq
  9. 检查文件是否已经排序过:

    
    #!/bin/bash
    
    
    # 功能描述:排序
    
    sort -C filename ;
    if [ $? -eq 0 ]; then
        echo Sorted;
    else
        echo Unsorted;
    fi
  10. 依据键或列进行排序:

    • sort -k 2 data.txt

    • sort -k 1,2 data.txt

    • 为了使sort的输出与以\0作为终止符的xargs命令相兼容,需如此:sort -z data.txt | xargs -0

    • sort -bd unsorted.txt,其中-b用于忽略文件中的前导空白行,-d用于指明以字典序进行排序。

  11. uniq命令通过消除重复内容,从给定输入中(stdin或命令行参数文件)找出唯一的行。它也可以用来找出输入中出现的重复行。

    • uniq只能作用于排过序的数据输入,因此,uniq要么使用管道,要么将排过序的文件作为输入,与sort命令结合使用。

    • uniq sorted.txt #打印唯一行

    • uniq -u sorted.txt #打印没有重复出现过的行

    • sort unsorted.txt | uniq -u #同上

    • sort unsorted.txt | uniq -c #统计各行在文件中出现的次数。

    • sort unsorted.txt | uniq -d #找出文件中重复的行。

    • sort data.txt | uniq -s 2 -w 2 #-s指定可以跳过前n个字符,-w指定用于比较的最大字符数。

    • uniq -z file.txt #用uniq命令生成包含0值字节终止符的输出。

    • uniq -z file.txt | xargs -0 rm


临时文件命名与随机数


# 创建临时文件
$ filename=`mktemp`
$ echo $filename

# 创建临时目录
$ dirname=`mktemp -d`
$ echo $dirname

# 如果仅仅是想生成文件名,又不希望创建实际的文件或目录,如下:
$ tmpfile=`mktemp -u`
$ echo $tmpfile

# 根据母版创建临时文件名
$ mktemp test.XXX

猜你喜欢

转载自blog.csdn.net/qixizhuang/article/details/77926455
今日推荐