个人常用命令汇总
个人常用命令
文件和目录
- 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_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为例
包管理
- 查看已安装的软件
# rpm包安装的 rpm -qa rpm -qa | grep -i package_name # deb包安装的 dpkg -l # yum方法安装的 yum list installed
如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了, 如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下
- 软件包状态(确定是否安装了某个软件包)
rpm -q package_name
- 软件安装和卸载
yum install -y package_name yum remove package_name 或 yum erase package_name
-y 自动应答yes
- 软件升级
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