个人常用命令汇总

个人常用命令


文件和目录

  • man
    man ps
    
  • cd
    cd /
    cd ~
    cd ..
    cd /usr/bin
    
  • pwd
  • ls
    ls -l
    ls -a
    ls *.txt
    
  • mkdir
    mkdir dir1
    mkdir dir1 dir2
    mkdir -p /tmp/dir1/dir2
    
  • rm / rmdir
    rm -f file1
    rmdir dir1
    rm -rf dir1
    rm -rf dir1
    rm -rf dir1 dir2
    
  • mv
    # 重命名或移动
    mv file newfile
    mv dir newdir
    
  • cp
    cp file1 file2
    cp dir1/* dir2
    cp -r dir1 dir2
    cp -a /tmp/dir1 .
    
  • touch
  • ln
    # item可以是一个文件或目录
    ln -s item lnk1
    
  • tree
  • jq
    # 格式化json
    curl -s https://testerhome.com/api/v3/topics.json | jq
    

查看文件内容

  • cat
    cat file1
    
  • more / less
    more file1
    less file1
    
键盘操作 注释
Page UP or b 向上翻滚一页
Page Down or space 向下翻滚一页
UP Arrow 向上翻滚一行
Down Arrow 向下翻滚一行
G 移动到最后一行
1G or g 移动到开头一行
/charaters 向前查找指定的字符串
n 向前查找下一个出现的字符串,这个字符串是之前所指定查找的
h 显示帮助屏幕
q 退出less程序
  • head / tail
    head -2 file1
    tail -2 file1
    tail -f /var/log/messages
    

通配符

通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper] 匹配任意一个大写字母

重定向

  • >输出重定向
  • >>追加
  • 2>错误重定向
  • &>标准输出和错误重定向
  • <输入重定向
  • > /dev/null处理不需要的输出
ls -l /bin/usr > output.txt
ls -l /bin/usr > output.txt
ls -l /bin/usr &> output.txt
ls -l /bin/usr > output 2>&1 # 旧版shell

权限

  • chmod

    文件类型 + 所有者u 文件组g 其他人o 的读写和执行权限

touch test.txt
chmod 600 test.txt
chmod u+x test.txt
chmod go-rwx test.txt
chmod o=r test.txt
  • su / sudo
  • chown
  • passwd
    passwd
    passwd monkeyjerry
    

进程

  • ps
    ps aux
    

    更详细可参看性能测试常用命令

  • top
    # 动态查看进程 默认每三秒更新一次
    top
    
  • bg / & 进程进入后台
  • jobs 列出活跃任务
  • fg 进程返回前台如fg %1
  • kill / killall
  • $$
    Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)
  • $!
    Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)

搜索

  • locate
  • find
测试条件 描述
-name pattern 用指定通配符模式匹配的文件和目录
-type c 匹配的文件类型是 c
-size n 匹配的文件大小为 n
f 普通文件
l 符号链接

-type选项

文件类型 描述
b 块设备文件
c 字符设备文件
d 目录
f 普通文件
l 符号链接

更多其他选项(测试条件)和逻辑操作符请参考linux 基础之查找文件

find ~ -type f -name "*.JPG" -size +1M | wc -l # wc:打印文件中换行符,字,和字节个数
find / -name passwd # 查找文件名为passwd的文件
find . -perm 0755 # 查找当前目录中文件权限的0755的文件
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte
  • which
  • whereis

网络

  • ping
  • netstat
    netstat -ie
    netstat -r
    
    # 查看端口占用情况:
    lsof -i:8080
    netstat -tunlp | grep 8080
    
  • traceroute
  • wget
  • curl
    curl -s https://1eq066.coding-pages.com | grep -o "http[^ \"')]*" | while read line;do curl -s -I $line | grep "200 OK" &>/dev/null || echo $line;done
    

    涉及知识点:curl,管道|,grep,重定向,while,read, 或|| 做条件判断,请参考本文其他章节

  • ssh
    ssh root@192.168.1.96
    
  • scp
    用来进行远程拷贝文件的命令
    # 本地拷贝到远程并重命名
    scp /tmp/test.py root@192.168.6.129:/etc/py/test_new.py
    
    # 远程服务器的上的文件复制到本机
    scp root@10.0.0.254:/etc/py/test_new.py /tmp/tmp/
    
    

    root@是机器账户,可省略,如果省略则和本地同样的账户
    :后面接远程机器的文件/目录路径
    -r 选项,目录复制
    -P选项,指定端口

压缩和归档

  • gzip和gunzip
    gzip file1
    gzip -9 file1 # 最大程度压缩
    gunzip file1.gz
    
  • bzip2和bunzip2
    bzip2 file1
    bunzip2 file1.bz2
    
  • rar和unrar
    rar a file.rar test_file1 test_file2 test_dir1 test_dir2
    rar a file.rar *.jpg
    unrar x file.rar # 解压到同名目录下
    unrar e file.rar # 解压到当前目录
    
  • zip和unzip
    zip file1.zip file1
    zip -r file1.zip file1 file2 dir1
    unzip file1.zip 
    
  • tar
    常用选项:
    选项 说明
    -c 为文件和/或目录列表创建归档文件
    -x 解压缩或解打包
    -r 追加具体的路径到归档文件的末尾
    -t 列出归档文件里含有的文件名
    -j bzip2压缩
    -z gzip压缩
    -v 将压缩解压缩过程中处理的文件名输出到屏幕
    -f 指定要处理的文档|
    -C 指定解压缩的特定目录|
tar -cvf archive.tar file1 # 创建一个非压缩的 tar包
tar -cvf archive.tar file1 file2 dir1 # 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案案文件 
tar -tf archive.tar # 显示一个包中的内容 
tar -xvf archive.tar # 释放一个包 
tar -xvf archive.tar -C /tmp # 将压缩包释放到 /tmp目录下 
tar -cvfj archive.tar.bz2 dir1 # 创建一个bzip2格式的压缩包 
tar -jxvf archive.tar.bz2 # 解压一个bzip2格式的压缩包 
tar -cvfz archive.tar.gz dir1 # 创建一个gzip格式的压缩包 
tar -zxvf archive.tar.gz # 解压一个gzip格式的压缩包 

环境变量

  • PATH:由冒号分开的目录列表,当你输入可执行程序名后,会搜索这个目录列表。
    添加环境变量:
    # java环境变量
    export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Conte nts/Home"
    export CLASS_PATH=$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin
    
    # adb环境变量,也可写成多行
    export PATH=${PATH}:~/Library/Android/sdk/platform-tools:~/Library/Android/sdk/tools
    
    • ${}为占位符,${PATH}$PATH等效
    • =前后不能有空格
    • : 为分隔符(等同于windows环境变量中的 ; )
    • PATH=$PATH:xxx 可以理解为 " PATH+=xxx "(当然不能这么写)
    • PATH=xxx:$PATH这种写法亦可

其他

  • $?
    $?用于检测退出状态,0值总是说明成功,其他所有值说明失败

    $ ls -d /bin/usr
    ls: cannot access /bin/usr: No such file or directory
    $ echo $?
    2
    
  • 位置参数

    • $0$1$2${10}
    • $#是可以得到命令行参数个数的变量
      posit-param 脚本如下:
    #!/bin/bash
    # posit-param: script to view command line parameters
    echo "Number of arguments: $#
    \$0 = $0
    \$1 = $1
    \$2 = $2
    \$3 = $3
    \$4 = $4
    \$5 = $5
    \$6 = $6
    \$7 = $7
    \$8 = $8
    \$9 = $9
    "
    
    $ posit-param a b c d
    Number of arguments: 4
    $0 = /home/me/bin/posit-param
    $1 = a
    $2 = b
    $3 = c
    $4 = d
    $5 =
    $6 =
    $7 =
    $8 =
    $9 =
    
  • 文本基本处理sort、uniq和wc

    $ sort foo.txt | uniq |wc -l
    a
    b
    
    head -10000 /tmp/nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5
    

    更多详细的选项可参看linux 进阶之文本处理

  • df

    df -h  # 显示已经挂载的分区列表 
    

linux shell


变量

  • 变量定义
    a=1
    b=hello
    c="a string and $b" # 参数展开,双引号中$开头变量会被自动替换
    d="hello world"
    e='hello from "monkeyjerry" '
    f=`ls`
    g="\t\ta string\n" # 双引号,支持转义
    h=$(ls -l foo.txt) # 参考命令替换,与``(旧shell)作⽤⼀致,但可以嵌套
    i=$((5 * 7)) # 参考算数扩展
    a=5 b="a string" #可以在同一行中对多个变量赋值
    
    • = 左右不要有空格
    • 如果内容有空格,需要使⽤单引号或者双引号
    • 双引号⽀持转义 $开头的变量会被⾃动替换
  • 变量使用(引用)
    echo $a
    echo ${b}
    echo "$a"
    
    • 使⽤$var 或 var访{var}来访问变量。后者更为严谨。var_x ${var}_x 是不同的
    • 变量不需要定义也可以使⽤。引⽤未定义的变量,默认为空值
  • 数组变量
    array=(1 3 4 6) 
    array=(`ls`)
    echo ${array[1]}
    echo ${#array[@]} #数组元素个数
    
    • 输出整个数组的内容${array[*]} ${array[@]}

    下标 * 和 @ 可以被用来访问数组中的每一个元素。与位置参数一样,@ 表示法在两者之中更有用处,@能展开成分离的词

    $ animals=("a dog" "a cat")
    $ for i in ${animals[*]}; do echo $i; done
    a
    dog
    a
    cat
    $ for i in ${animals[@]}; do echo $i; done
    a
    dog
    a
    cat
    $ for i in "${animals[*]}"; do echo $i; done
    a dog a cat
    $ for i in "${animals[@]}"; do echo $i; done # 推荐
    a dog
    a cat
    

() (()) {} [] [[]]

  • ()
    echo ls $(which cp) # 等价与 echo ls `which cp`
    
  • 算数扩展$((expression))
     echo $(($((5**2)) * 3))
     echo $(((5**2) * 3))
    
  • 花括号展开{}
    echo number_{1..3} # number_1 number_2 number_3
    {1..10} # 等价于 seq 1 10 ; seq 1 3 10 # 表⽰⽣成⼀个1到10,步进为3
    
  • 测试条件[]和加强版测试条件[[]]
    # 算数比较
    [ 2 –eq 2 ] #相等
    [ 2 –ne 2 ] #不等
    [ 3 –gt 1 ] #⼤于
    [ 3 –ge 3 ] #⼤于等于
    [ 3 –lt 4 ] #⼩于
    [ 3 –le 3 ] #⼩于等于
    

    也可用((10>=8)) ,((10==10))

    # 字符串比较
    [ string1 = string2 ] # 如果两字符串相同,则结果为真
    [ string1 != string2 ] #如果两字符串不相同,则结果为真
    [ -n "$var" ] 如果字符串不是空,则结果为真
    [ -z "$var" ] 如果字符串是空,则结果为真
    

    在引⽤变量的时候要记得加双引号[ -z "$a"]否则当a未定义时会语法报错

    # 内置文件判断
    [ -e "$file" ] # 如果⽂件存在,则结果为真
    [ -d "$file" ] # 如果⽂件是⼀个⼦⽬录,则结果为真
    [ -f "$file" ] # 如果⽂件是⼀个普通⽂件,则结果为真
    [ -r "$file" ] # 如果⽂件可读,则结果为真
    [ -s "$file" ] # 如果⽂件的长度不为0,则结果为真
    [ -w "$file" ] # 如果⽂件可写,则结果为真
    [ -x "$file" ] # 如果⽂件可执⾏,则结果为真
    
    # 逻辑判断与或非
    [ 2 -ge 1 -a 3 -ge 4 ];echo $? 
    [ 2 -ge 1 -o 3 -ge 4 ];echo $?
    [ ! 2 -ge 1 ];echo $?
    

    [[]]是[]的扩展语法,在⽼的sh⾥并不⽀持,推荐⽤[],可参看shell 脚本之测试条件章节

流程控制

  • if
if commands; then
     commands
[elif commands; then
     commands...]
[else
     commands]
fi
# 例子
$ MIN_VAL=1
$ MAX_VAL=100
$ INT=50
$ if [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; then \
    echo "$INT is outside $MIN_VAL to $MAX_VAL." \
else \
    echo "$INT is in range." \
fi

使用测试条件[],其中所有的表达式和操作符都被 shell 看作是命令参数(不像 [[ ]] 和 (( )) ),对于 bash 有特殊含义的字符,比如说 ( ),必须引起来或者是转义

  • ||&&
$ mkdir temp && cd temp
$ [ -d temp ] || mkdir temp
  • while
while commands; do commands; done
# 例子
$ count=1
$ while [ $count -le 2 ]; do \
		echo $count \
		count=$((count + 1)) \
done \
echo "Finished."
  • for
for variable [in words]; do
    commands
done
# 例子
$ ss="aa bb cc dd";for x in $ss;do echo $x ;done
$ for x in `ls` ;do echo $x ;done
$ ss=(aa bb cc "sss dd");for x in "${ss[@]}";do echo $x ;done
# c风格例子
for (( i=0; i<5; i=i+1 )); do
    echo $i
done
  • break和continue

键盘输入

  • read
# ⼀⾏⾏的读取⽂件内容 
while read line;do echo $line;done < /tmp/tmp

其他

以centos为例

包管理

  1. 查看已安装的软件
    # rpm包安装的
    rpm -qa
    rpm -qa | grep -i  package_name
    
    # deb包安装的
    dpkg -l
    
    # yum方法安装的
    yum list installed
    

    如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了, 如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下

  2. 软件包状态(确定是否安装了某个软件包)
    rpm -q package_name
    
  3. 软件安装和卸载
    yum install -y package_name
    yum remove package_name 或 yum erase package_name
    

    -y 自动应答yes

  4. 软件升级
    yum -y update package_name
    

服务

  • 启动关闭服务systemctl start/stop和查看服务当前状态systemctl status
# 启动nginx服务:
systemctl start nginx.service
# 查看服务当前状态:
systemctl status nginx.service
  • 设置开启systemctl enable和关闭开机启动systemctl disable
# 设置开机自启动:
systemctl enable nginx.service
# 停止开机自启动:
systemctl disable nginx.service 
  • 重启服务
# 重新启动服务:
systemctl restart nginx.service
  • 查看已启动的服务
# 查看所有已启动的服务:
systemctl list-units --type=service
systemctl list-unit-files
  • 防火墙
# 停止firewall
systemctl stop firewalld.service
# 禁止firewall开机启动
systemctl disable firewalld.service
# 启动防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 检查防火墙状态
systemctl status firewalld

扩展阅读