常见任务

tar

  • tar.xz 外面是xz压缩方式,里层是tar打包方式
    xz -d ***.tar.xz
    tar -xvf  ***.tar
    #或者
    tar xvJf  ***.tar.xz
    
  • 查看tar文件下的所有文件(像ls一样)
    tar -tvzf stuff.tar.gz
    tar -tvf stuff.tar
    
  • 使用tar对文件加密
    tar -zcvf - stuff|openssl des3 -salt -k secretpassword | dd of=stuff.des3
    
  • 使用tar对加密文件解压
    dd if=stuff.des3 |openssl des3 -d -k secretpassword|tar zxf -
    

find

  • 一次查找多个指定文件
    find . -name "a.html" -o -name "b.html"  
    find . -iregex '.*\.txt\|.*\.doc\|.*\.mp3'
    
  • 排除某些文件类型
    find . -type f ! -name "*.html"
    
  • 排除多种文件类型的示例
    find . -type f ! -name "*.html" ! -name "*.php" -name "*.svn-base"
    
  • 查找时排除某目录
    find . -path ./xxx -prune -o -print
    find . \( -path ./xxx -o -path ./yyy \) -prune -o -print
    

date

  • date -d next-day +%Y%m%d #明天日期
  • date -d last-day +%Y%m%d #昨天日期
  • date -d @12345678 计算时间戳的日期
  • man date

awk

  • 指定多个分割符
    命令行选项 -F"[:/]" 告诉awk / 和 : 都是字段分隔符,即-F选项支持正则表达式
  • 输出单引号(')
    • '\''
    • printf("%c",39)
    • printf("%s","\047")

rpm

  • rpm -q 查询系统已安装的软件(查看系统中所有已经安装的包,要加 -a 参数)
  • rpm -qf 查询一个文件属于哪个软件包
  • rpm -ql 查询已安装软件包都安装到何处
  • rpm -i 安装rpm包
  • rpm -qpl 列出RPM软件包内的文件信息[Query Package list]
  • rpm -qpi 查看一个软件包的用途、版本等信息
  • rpm -e 删除一个rpm包[erase]

read

不用回车结束输入

  • read -n 10 var 输入10个字符
  • read -d “:” 以”:”结束输入
  • read -t 30 30s超时
  • read -s 关闭回显
  • 以上方式可以组合使用

screen

  • 创建会话, 并attach: screen -S abc
  • attach 到abc: screen -x abc
  • 会话列表: screen -list/screen -ls
  • 连接/恢复会话: screen -r abc
  • 暂时离开会话, 会话仍在后台运行: CTRL+a+d
  • 停止会话(已连接的情况): exit/ctrl+d

tmux

在一个终端窗口中运行多个终端会话

script命令

script是将终端会话制成打印稿的命令。 想要script在登录时就生效,可以将其加在shell profile(~/.profile)。 /usr/bin/script -qa /usr/local/script/log_record_script

  • 选项-q是安静模式,用户登录时完全不会察觉到script命令的运行。
  • 选项-a是追加,不会覆盖以往的记录。

敲击ctrl+d或exit,可以停止记录。

均匀绑定cpu的shell

绑定指定程序均匀负载到各个CPU上

#!/bin/sh
pids=`/sbin/pidof $1`
cpunum=`cat /proc/cpuinfo | grep processor | wc -l`
cpuidx=0
for pid in $pids
do
    /usr/bin/taskset -cp ${cpuidx} ${pid}
    cpuidx=$(($cpuidx+1))
    cpuidx=$(($cpuidx%$cpunum))
    echo $cpuidx
done

查看正在运行进程的CPU

  1. 如果一个进程使用 taskset 命令明确的被固定(pinned)到 CPU 的特定内核上, 可以使用 taskset 命令找出被固定的 CPU 内核
    • taskset -c -p <pid>
  2. ps 可以显示每个进程/线程目前分配到的CPU ID(PSR列)
    • ps -o pid,psr,comm -p <pid>
  3. top 命令可以显示 CPU 被分配给哪个进程
    • top中使用P选项, 然后按f键, 显示中会出现 "Last used CPU" 列. 目前使用的 CPU 内核将出现在 P(或PSR)列下
  4. htop

检查命令执行是否成功

  • 常见写法
    echo abcdee | grep -q abcd
    if [ $? -eq 0 ]; then
    echo "Found"
    else
    echo "Not found"
    fi
    
  • 简洁写法
    if echo abcdee | grep -q abc; then
    echo "Found"
    else
    echo "Not found"
    fi
    
  • 不要if/else
    echo abcdee | grep -q abc && echo "Found" || echo "Not found"
    

将man的内容干净的输出到一个文件里

man tar | col -b > /tmp/tar.txt

获取一个字符的ASCII码

  • man ascii
  • showkey -a 附:man 报错的可能的原因

    • locale问题
    • 报错conversion from utf8 unsupported, 修改 /usr/bin/nroff脚本,把utf8 写成 utf-8(使用iconv -l检查支持的编码列表)
  • printf '%02x' "'+"

  • echo -n '+' | od -tx1 -An | tr -d ' '

显示进程树

pstree -p

根据进程名查找或kill进程

pgrep 和 pkill 来找到或是kill 某个名字的进程 (-f 选项很有用).

根据进程名找进程id

pidof ProcessName

让某个进程在后台运行

使用 nohup 或 disown

日志监控

tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q' 当file.log里出现Finished: SUCCESS时候就退出tail,这个命令用于实时监控并过滤log是否出现了某条记录。

不支持-f的tail命令可以使用watch命令。watch命令会过滤不可打印字符,可以考虑与cat –v连用。

获取登录的IP

who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'

文本操作命令

  • sort uniq
    • Stable sort (sort -s) 很有用
      • sort -k1,1 | sort -s -k2,2 将两例排序,先是以第二列,然后再以第一列
    • 按照tab分隔符进行字段排序
      • sort -t $'\t' -k3,3n a.txt>a.sort
      • sort -t'v' -k3,3n a.txt>a.sort
      • v代表先同时按下Ctrl和v键,然后松开,按下tab键。
  • split 分隔一个大文件(split by size) csplit(split by a pattern)
  • 文件的集合操作
    cat a b | sort| uniq > c   # c is a union b 并集
    cat a b | sort| uniq -d > c   # c is a intersect b 交集
    cat a b b | sort| uniq -u > c   # c is set difference a - b 差集
    
  • 备注: comm命令
  • shuf 来打乱一个文件中的行或是选择文件中一个随机的行
  • shred

AIX如何查询CPU个数

  • vmstat可以查看逻辑CPU个数
  • bindprocessor -q
  • lsdev -Cc processor 可以查看物理CPU个数
  • prtconf或lsconf脚本可以查看物理CPU个数(查看脚本可以看到使用的方式
  • smtctl

删除文件的前N个字节

问题引出: libxml2不支持导入带有BOM的UTF-8格式的XML文件

dd if=XXX.xml of=YYY.xml bs=1 skip=3

删除BOM头

sed -i 's/\xEF\xBB\xBF//'

将printf格式化的结果赋值给变量

例如将数字转换成其十六进制形式

  • 常见的写法 var=$(printf '%%%02x' 111)
  • 简单的写法 printf -v var '%%%02x' 111

看看printf的help
help printf | grep -A 1 -B 1 -- -v

printf: printf [-v var] format [arguments]
   Formats and prints ARGUMENTS under control of the FORMAT.
--
    Options:
      -v var    assign the output to shell variable VAR rather than
            display it on the standard output

进制转化

  • N进制转化为10进制: echo $((2#111000))
  • 进制转换: echo "obase=10;ibase=2;111000" | bc

results matching ""

    No results matching ""