1 文件管理
1.1 列出文件
ls [OPTIONS]... [FILE]...
参数 | 说明 |
-a | 列出全部文件。 |
-l | 使用长格式打印。 |
-h | 使用易读格式打印。 |
-t | 按修改时间排序。 |
-n | 以数字形式打印用户和组ID。 |
-s | 显示文件使用的块(512字节)数量。 |
-u | 按访问时间排序。 |
-c | 按文件状态修改时间排序。 |
1.2 打印当前工作目录
pwd
1.3 建立目录
mkdir [OPTIONS]... [DIRECTORY]...
参数 | 说明 |
-m | 设定模式。 |
-p | 自动建立上层目录。 |
1.4 切换工作目录
cd DIRECTORY
1.5 删除文件或目录
rm [OPTIONS]... [FILE]...
参数 | 说明 |
-f | 强制删除。 |
-i | 删除前要求用户确认。 |
-r | 递归删除目录下的文件和子目录。 |
-d | 删除空目录。 |
rmdir [FILE]...
rmdir
等价于 rm -d
.
1.6 移动文件或目录
mv [OPTIONS]... SOURCE TARGET
参数 | 说明 |
-f | 强制移动。 |
-b | 覆盖前备份。 |
-i | 覆盖前询问。 |
-n | 不会覆盖已有文件。 |
-u | 只覆盖旧文件。 |
1.7 复制文件或目录
cp [OPTIONS]... SOURCE TARGET
参数 | 说明 |
-b | 建立备份。 |
-f | 强制复制。 |
-i | 复制前询问。 |
-r | 递归复制。 |
1.8 统计文件或目录大小
du -sh
2 文件操作
2.1 查看文件
查看文件头部若干行或若干字节
head [-n COUNT | -c BYTES] [FILE]...
查看文件尾部若干行或若干字节
tail [-n count] [-f] [-pid=PID]
查看文件
more [OPTIONS] [FILE]...
参数 | 说明 |
+n | 从第n行开始。 |
-n | 屏幕显示n行。 |
-c | 显示前清空屏幕。 |
-p | 按页显示。 |
less和more的用法一样。区别是more仅仅支持向前滚动,less支持向后滚动。
less [OPTIONS] [FILE]...
2.2 连接文件
cat [OPTION]... [FILE]...
连接文件并输出到标准输出。
参数 | 说明 |
-n | 显示行号。 |
-s | 将连续空行合并为一个空行。 |
-v | 显示非打印字符。 |
2.3 反向连接文件
反向连接文件并输出到标准输出。
tac
2.4 按列提取文件内容
cut -c3-5 a.txt # 提取a.txt的3-5列。
2.5 比较文件差异
diff [OPTION]... [FILE]...
2.6 打包文件
tar
2.7 压缩文件
gzip
2.8 统计文件行数
wc [-clmw] [FILE]...
参数 | 说明 |
-c | 统计字节数。 |
-l | 统计行数。 |
-m | 统计字符数。 |
-w | 统计字数。 |
2.9 打印文件并增加行号
nl a.txt
2.10 更新文件时间戳
touch [OPTIONS]... FILE...
参数 | 说明 |
-a | 更改访问时间。 |
-c | 如果文件不存在,不要建立文件。 |
-d | 设定为指定日期。 |
-m | 更改文件修改时间。 |
-t | 设定为指定时间。 |
3 日期和时间
3.1 打印日期
date [+FMT]
FMT | 说明 |
%H | 小时(24小时制)。 |
%M | 分钟。 |
%S | 秒。 |
%d | 日期(01-31)。 |
%m | 月(01-12)。 |
%Y | 年(4位)。 |
%a : 星期几 (Sun..Sat) %A : 星期几 (Sunday..Saturday) %b : 月份 (Jan..Dec) %B : 月份 (January..December) %c : 直接显示日期和时间 %d : 日 (01..31) %D : 直接显示日期 (mm/dd/yy) %h : 同 %b %j : 一年中的第几天 (001..366) %m : 月份 (01..12) %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形) %w : 一周中的第几天 (0..6) %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形) %x : 直接显示日期 (mm/dd/yy) %y : 年份的最后两位数字 (00.99) %Y : 完整年份 (0000..9999) % : 印出冒号 % %n : 下一行 %t : 跳格 %H : 小时(00..23) %I : 小时(01..12) %k : 小时(0..23) %l : 小时(1..12) %M : 分钟(00..59) %p : 显示本地 AM 或 PM %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61) %T : 直接显示时间 (24 小时制) %X : 相当于 %H:%M:%S %Z : 显示时区
date --date='1 day ago' +%Y-%m-%d # 去年的今天 date --date='1 month ago' '+%Y-%m' # 上个月 date --date="$(date +%e) days ago" '+%Y-%m-%d' # 上个月最后一天
3.2 打印日历
cal [-1 | -3 | -y] [-m|-s]
参数 | 说明 |
-1 | 显示当月日历。 |
-3 | 显示上月、当月、下月日历。 |
-y | 显示全年日历。 |
-m | 星期一作为星期第一天。 |
-s | 星期日作为星期第一天。 |
4 搜索
4.1 搜索程序
which
4.2 搜索程序名
whereis
参数 | 说明 |
-b | 搜索可执行文件。 |
-m | 搜索man文件。 |
-s | 搜索源代码文件。 |
4.3 搜索文件
find
参数 | 说明 |
打印将匹配的文件名。 | |
-exec | 对匹配的文件执行指定命令。 |
-name | 按名字查找。 |
-perm | 按权限查找。 |
-user | 按属主查找。 |
-type | 按类型查找。 |
-depth | 设定最大查找深度。 |
4.4 正则表达式搜索
grep
5 进程管理
5.1 查看进程
ps
参数 | 说明 |
a | 显示所有进程。 |
c | 显示进程真实名称。 |
-A | 显示所有进程。 |
-e | 显示所有进程。 |
f | 显示进程间关系。 |
-H | 以树状结构显示。 |
u | 显示指定用户的所有进程。 |
5.2 向进程发送信号
kill -s SIGNAL PID
5.3 列出信号
kill -l
5.4 查看进程打开的文件
lsof
5.5 实时查看系统进程
top
6 网络
6.1 检查网络联通性
ping
6.2 查看本地套接字
netstat ss
6.3 查看网卡配置
ifconfig
6.4 查看主机名
hostname
6.5 跟踪IP路由
traceroute
6.6 查看本地路由表
route
6.7 下载文件
wget
6.8 抓取网络包
tcpdump -n -nn dst port 9001 -i eth1
7 辅助函数
7.1 打印字符串
echo Hello
8 Bash
8.1 变量
#变量和运算
定义变量
message="hello"
使用变量
echo $message echo ${message}
只读变量
name="John" readonly name name="Alice" # -bash: name: readonly variable
删除变量
message="John" echo message unset message
定义全局变量
message="hello" export message export message="world"
全局变量
echo $HOME echo $PATH echo $SHELL echo $UID echo $GID echo $HOSTNAME
x=1 echo $x unset x a=(1 2 3) unset a[0] let x=1 let _y=x+1 # 判断对象是否被设置 if [ -z ${var+x} ]; then echo "var is unset"; fi # whatever x is
8.2 分支条件
if [ "$foo" = "x86_64 ]; then echo "OK" else echo "FOO" fi ((a=1)) if ((a)); then echo "1" fi
if [ "foo" == "$1" ]; then echo "a" else echo "b" fi
常用条件
[ -a FILE ] # 是否文件存在 [ -b FILE ] # 是否block文件 [ -c FILE ] # 是否字符文件 [ -d FILE ] # 是否目录存在 [ -e FILE ] # 是否文件存在 [ -f FILE ] # 是否普通文件 [ -h FILE ] # 是否符号链接 [ -p FILE ] # 是否管道 [ -r FILE ] # 是否可读 [ -s FILE ] # 是否非空文件 [ -w FILE ] # 是否可写 [ -x FILE ] # 是否可执行 [ FILE1 -nt FILE2 ] # 是否FILE1比FILE2新 [ FILE1 -nt FILE2 ] # 是否FILE1比FILE2旧 [ -z STRING ] # 是否空字符串 [ -n STIRNG ] # 是否非空字符串 [ STRING ] # 是否非空字符串 [ STRING1 == STRING2 ] # 是否STRING1等于STRING2 [ STRING1 != STRING2 ] # 是否STRING1不等于STRING2 [ STRING1 < STRING2 ] # 是否STRING1小于STRING2 [ STRING1 > STRING2 ] # 是否STRING1大于STRING2 [ ARG1 OP ARG2 ] # 关系判断。OP是-eq, -ne, -lt, -le, -gt, -ge之一。 # 复合条件 [ !EXPR ] [ (EXPR) ] [ EXPR1 -a EXPR2 ] # and [ EXPR1 -o EXPR2 ] # or
字符串比较
-eq 等于 -ne 不等 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 -z 空字符串 = 相等 != 不相等 -n 非空字符串
文件比价
-nt 文件1比文件2新 -ot 文件1比文件2旧 -ef 文件1是文件2的硬链接
多个条件
if 条件; then 语句 elif 条件; then 语句 else 语句 fi
使用test判断条件
test 3 -gt 4 && echo True || echo False test "abc" = "def"; ehco $? [ "abc" < "def" ]; echo ?
case "$1" in 1) echo "a";; 2) echo "b";; *) echo "c";; esac
echo -n "Do you agree with this? [yes or no]: " read yno case $yno in [yY] | [yY][Ee][Ss] ) echo "agreed" ;; [nN] | [n|N][O|o] ) ehco "not agreed" ;; esac
8.3 数值计算
((a=1)) ((b=2)) ((c=a*b)) echo $c
8.4 执行命令
arch=`uname -a` echo $arch
8.5 数组
a=(1 2 3) echo ${a[0]} # 数组长度 ${#a[@]} ${#a[*]} b[0]=1 b[1]=2
8.6 函数
function f1 { echo $1 } function fct() { local result=$1 local myresult='some' eval $result="'$myresult'" } fct foo echo $foo # $* 参数列表 # $# 参数列表长度
函数返回值
# 返回 exit -1 # 读取上一个命令的返回值 echo $?
$# 参数个数 $* 参数列表 $$ 当前进程ID $! 后台运行的最后一个进程ID $@ 和$*相同 $- shell当前选项 $? 命令最后的退出状态
8.7 字符串
# 子字符串 ${variable:start:len} # 删除首个以tail结尾的子串 ${variable#*tail} # 删除以tail结尾的子串中,最长的那个 ${variable##*tail} # 删除以head开头的最后一个子串 ${variable%head*} # 删除已head开头的子串中,最长的那个 ${variable%%head*} # 长度 ${#str}
计算字符串长度
message="hello" expr length $message echo ${#message}
查找字符串
expr index $message "ll"
取子字符串
expr substr "$message" 1 2 # he echo ${message:2} # llo echo ${message:2:3} # llo echo ${message:(-1):5} # o
字符串替换
pets="cat,dog,cat" echo ${pets/cat/CAT} # 替换首个 echo ${pets//cat/CAT} # 替换全部 echo ${pets/#cat/CAT} # 按前缀匹配替换 echo ${pets/%cat/CAT} # 按后缀匹配替换
字符串比较
[[ "a.txt" == a* ]] [[ "a.txt" =~ .*\.txt ]] [[ "abc" == "abc" ]] [[ "11" < "2" ]]
字符串连接
name="John" message="Hello, " echo $message$name echo "Bye, ${name}"
8.8 循环
while循环
while condition; do statement done
until循环
until condition; do statement done
for循环
for i in 'apple' 'orange' 'banana'; do echo $i done
循环示例:
for i in {1..10}; do echo $i done
循环示例:
for i in `ls`; do echo $i done
循环示例:
for i in {a..z}; do echo $i done
for i in `seq 1 2 10`; do echo $i done
for ((i=1;i<=100;i++)) do echo $i done
while [ $count -lt 10 ]; do # ... done
for i in $(ls); do echo $i done for i in `seq 1 10`; do echo $i done COUNTER=0 while [ $COUNTER -lt 10 ]; do echo $COUNTER let COUNTER=COUNTER+1 done COUNTER=20 util [ $COUNTER -lt 10 ]; do echo $COUNTER let COUNTER-=1 done $lst="1 2 3" for i in $lst; do echo $i; done
变量中字符的删除与替换
变量设置方式 说明 ${变量#关键字} ${变量##关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除。 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除。 ${变量%关键字} ${变量%%关键字} 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除。 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除。 ${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换。 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换。 除了上述变量设置方式,还有如下用法:
${var:0:5}截取var变量的前5个字符 ${#var}获取var变量的长度 代码实例参考 鸟哥第十章变量内容的删除与取代 。
变量的测试与替换
var=${str:=expr} 如果str为null或空字符串,则var的值为expr,并且expr赋值给str;如果str非空则var的值为$str
var=${str:?expr} 如果str为null或空字符串,则var的值为null,并且expr输出至stderr;如果str非空则var的值为$str
var=${str:-expr} 与第一个“=”的类似,只是expr不赋值给str
var=${str:+expr} 与上面“-”的相反
8.9 输入输出
OPTIONS="Hello Quit" select opt in $OPTIONS; do if [ "$opt" = "Quit" ]; then echo done exit elif [ "$opt" = "Hello" ]; then echo Hello World else clear echo bad option fi done read name email echo $name $email
#输入和输出
打印字符串
echo hello
将命令输出保存到文件
ls > result.txt
从文件输入
command < input.txt
输入
read input echo $input
9 附录:常用命令
9.1 查看系统block size大小的方法
- 用tune2fs查看block size大小:
$ tune2fs -l /dev/sda1 |grep "Block size"
Block size: 1024
- 用stat查看block size大小:
stat /boot/|grep "IO Block"
Size: 1024 Blocks: 2 IO Block: 1024 目录
- 用dumpe2fs查看block size大小:
dumpe2fs /dev/sda1 |grep "Block size"
Block size: 1024
9.2 CentOS下安装桌面系统的方法
yum groupinstall "X Window System"
yum grouplist
startx
9.3 查看网卡
ip addr show
9.4 关闭防火墙
service firewalld stop
9.5 获取脚本执行路径
export DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9.6 判断文件中是否存在某个字符串
if grep -q root /etc/passwd; then echo account root exist else echo account root not exist fi
9.7 判断文件是否相同
if ! diff -q file1 file2; then echo diff else echo same fi
9.8 查找大文件
find . -type f -size +100M -exec ls -lh {} \;
9.9 查找大目录
for x in `du --max-depth=3 | sort -nr | head -10 | awk '{print $2}'`; do du -sh $x; done; # 或 du --max-depth=3 | sort -nr | head -10
9.10 查看磁盘空间
df -h
10 附录:常见问题
10.1 最小化安装后无法使用yum
最小化安装后,需要手动设置网卡才能联网。进入目录
etc/sysconfig/network-script
找到名字为
ifcfg-xxx.sh
的文件,将其中各项配置修改为
NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO="dhcp"
然后重启network服务
service network restart
来源:oschina
链接:https://my.oschina.net/u/131191/blog/3195436