echo -e "\e[1;42m this is test \e[0m" ‘this is test‘会被彩色打印,其中颜色由42m决定
echo -n this is test ‘this is test‘不会被换行
printf "%-4s %-5.1f\n" wade 3.1 wade 3.1分别按照左对齐打印出来,并采用4s和5.1f格式
pgrep gedit 可以查看到gedit的进程ID
export命令用来设置环境变量。至此以后,从当前shell脚本执行的任何程序都会继承这个变量
export PATH="$PATH:/home/user/bin" 在PATH中新加一条路径
var=1234567890
length=${#var}
echo $length 获得变量的长度
echo $SHELL或者echo $0 识别当前的shell版本
echo $UID 如果结果为0,标示当前为root用户
echo $PS1 显示当前bash的提示字符串,其中\u为用户名,\h为主机名,\w为当前的工作目录。
可以利用\e[1;32m设置彩色提示字符串
算数操作:
no1=4
no2=5
let result=no1+no2 let命令可以直接执行基本的算数操作
let no1+=6
echo $result
echo $no1
result=$[no1+no2]
result=$[no1+100] 可以使用[]操作符,和let命令类似
result=$((no1+10)) 也可以使用(())操作符,但是变量名之前需要加上$
result=`expr 3 + 4`
result=$(expr $no1+5) expr也可以用作类似算数操作
echo "4 * 0.45" | bc bc执行浮点数运算
echo "scale=2;3/8" | bc scale设置小数精度,scale=2表示将小数位个数设置为2
no=100
echo "obase=2;$no" | bc 利用obase进行进制转换
no=1100100
echo "obase=10;ibase=2;$no" | bc obase和ibase配合进行进制转换
echo "sqrt(100)" | bc sqrt计算平方根
echo "10^10" | bc ^计算平方
文本描述符:
0 stdin
1 stdout
2 stderr
echo "this is test" >temp.txt
echo "this is test 1" >>temp.txt >等同于1>;>>等同于1>>
当命令输出错误信息时,stderr信息就会被打印出来。当一个命令发生错误并退回时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回数字0。
退出状态可以从特殊变量$?中获得。
ls + 2>out.txt 将错误输出到out.txt文件中
cmd 2>stderr.txt 1>stdout.txt 将stderr单独定向到一个文件中,将stdout重定向到另一个文件中
cmd &>output.txt 将stderr和stdout都被重定向到同一个文件中
command | tee [-a] FILE1 FILE2 在终端中打印,并将它重定向到文件FILE1和FILE2.-a表示为追加内容选项
exec 3<input.txt exec命令创建自定义的文件描述符
数组和关联数组
array_var=(1,2,3,4,5) 定义数组,以0位起始索引
array_var[0]="test" 自定义数组
echo ${array_var[0]} 打印出特定索引的数组元素内容
echo ${array_var[*]} 打印所有数组的内容
echo ${#array_var[*]} 打印数组长度
declare -A ass_array 定义关联数组
ass_array=([index1]=val1 [index2]=val2) 内嵌索引-值列表法
ass_array[index1]=val3 独立的索引-值
echo ${ass_array[index1]} 打印index1索引对应的值
echo ${!ass_array[*]} 列出数组索引
alias new_command=‘command sequence‘ 创建新的别名。要想永久保存,需要将其放入到~/.bashrc文件中。若想删除只需要使
用unalias命令或者从~/.bashrc中删除
tput cols 获取终端的行数
tput lines 获取终端的列数
tput longname 打印出当前终端名
tput setb [0-7] 设置终端背景色
tput bold 设置字体为粗体
echo -e "Enter password: "
stty -echo 禁止将输出发送到终端
read password
stty echo 允许发送到终端
echo
echo Password read
date 显示日期
date +%s 以纪元时显示时间,主要用途是做时间差的秒数
date --date "jan 20 2011" +%s 按照给定日期显示纪元时
date --date "jan 20 2011" +%A 按照给定日期显示是星期几
%A 星期
%B 月
%d 日
%D 固定格式日期(mm/dd/yy)
%Y 年
%H 小时
%M 分钟
%S 秒
%N 纳秒
%s 纪元时
date "+%d %B %Y" 按照指定格式打印时间
date -s "21 june 2015 11:12:23" 设置日期和时间
bash -x script.sh 使用-x选项,启动跟踪调试shell脚本。打印出所执行的每一行命令以及当前状态
set -x 在执行时显示参数和命令
set +x 禁止调试
set -v 当命令进行读取时显示输入
set +v 禁止打印输入
#!/bin/bash -xv 在/bin/bash启动xv,可以启用调试功能
function fname()
{
statements; 自定义函数。或者去掉function也可以
}
fname 执行函数
fname arg1 arg2 执行函数,传递参数
$1是函数的第一个参数
$2是函数的第二个参数
[email protected]是打印所有参数
$*是以单个实体的方式打印所有参数
递归函数
F()
{
echo $1;
F HELLO;
SLEEP 1; SLEEP表示休眠1秒钟
}
导出函数
export -f fname 导出函数,扩展函数的作用域。可以扩展到子进程
FORK炸弹
:() {:|:&};: 该函数能够调用自身,不断的生成新的进程,最终造成DDOS攻击
ls | cat -n >out.txt 列出当前目录下的内容,cat -n追加行号存到out.txt文件中
pwd
(cd /bin;ls) 利用()定义一个子shell
pwd
read -n 2 var 读取2个字符并存入变量var中
read -s var 以不回显的方式存入变量
read -p "enter input:" var 显示提示信息
read -t timeout var 在特定时限内读取输入
read -d "定界符" var 用定界符结束输入行
IFS(内部字段分隔符) 默认为空
for循环
for var in list;
do
commands
done
for ((i=1;i<10;i++));
do
commands
done
echo {1..50} 生成一个1到50的数字列表
echo {a..z} 生成a..z的列表
while循环
while condition
do
commands
done
until循环
x=0;
until [$x -eq 9]
do
let x++;echo $x
done
if 条件;then
commands;
fi
if 条件;then
commands;
elif conditions;
then
commands;
else
commands;
fi
[condition] && action 如果条件为真,则执行action
[condition] || action 如果条件为假,则执行action
条件判断:
算术比较
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于
-a 逻辑与
-o 逻辑或
文件系统相关测试
-f $var 判断var变量是否有文件
-x 判断是否有可执行文件
-d 目录
-e 文件是否存在
-c 字符设备文件
-b 块设备文件
-w 文件是否可写
-r 文件是否可读
-L 是否有符号链接
字符串比较
[[ $str1 = $str2 ]] 当str1等于str2时,返回真。就是str1和str2包含的文本是一模一样的
[[ $str1 == $str2 ]] 检查字符串是否相等
[[ $str1 != $str2 ]] 字符串不同则返回真
[[ $str1 > $str2 ]] 字符串1的字母序大于字符串2,返回真
[[ $str1 < $str2 ]] 字符串1的字母序小于字符串2,返回真
[[ -z $str1 ]] 若str1为空,返回真
[[ -n $str1 ]] 若str1内容为非空,则为真
if [ $var -eq 0 ];then echo "true";fi
can be written as
if test $var -eq 0;then echo "true";fi 可以用test命令替代[]符号
cat 1.sh 2.sh 拼接1.sh和2.sh文件内容
cat -s 1.sh -s选项压缩1.sh中的连续的空白行
cat 1.sh | tr -s ‘\n‘ 利用tr移除空白行
cat -T 1.sh 将1.sh中的制表符标记成^|
script -t 2> timing.log -a output.session timing.log用于存储时序信息,描述命令在何时运行。output.session用于存储命令输出
exit 退出录制终端会话
scriptreplay timing.log output.session 播放录制终端会话
Terminal1输入以下命令:
mkfifo scriptfifo
Terminal2输入以下命令:
cat scriptfifo
返回terminal1,输入以下命令:
script -f scriptfifo
commands;
exit 当退出时,终端1变成广播员,终端2变成听众
find . -print 当前目录下打印出匹配文件的文件名(路径)。其中‘\n‘作为用于分隔文件的定界符
find . -print0 ‘\0‘作为定界符
find . -iname "example*" -print 寻找当前目录下example开头的文件,忽略大小写,并打印出来
find . \( -name "*.txt" -o -name "*.pdf" \) -print 寻找匹配多个条件中的一个并打印
find . -path "*slynus*" -print 寻找符合slynus路径
find . -regex "*slynus*" -print 以正则表达式的方式寻找路径
find . ! -name "*.txt" -print 当前目录下不是以txt为后缀的文件
find . -maxdepth 1 -type f -print maxdepth参数指定寻找最大深度
find . -mindepth 2 -type f -print mindepth参数指定寻找最小深度
-atime 访问时间 用户最近一次访问文件的时间
-mtime 修改时间 文件内容最后一次被修改的时间
-ctime 变化时间 文件元数据(例如权限或所有权)最后一次被改变的时间
其中-表示小于,+表示大于
-amin 访问时间 以分钟为计时
-mmin 修改时间
-cmin 变化时间
-newer 比较时间 需找比指定文件更新的所有文件
find . -type f -size +2k 寻找当前目录下文件大小大于2k的文件.
find . -type f -size -2k
find . -type f -size 2k
还可以用b/c/w/k/m/g代替k
find . -type f -name "*.txt" -delete 删除匹配的文件
find . -type f -perm 644 -print 基于文件权限匹配
find . -type f -user slynux -print 基于文件所有权匹配
find . -type f -user root -exec chown slynux {} \; 利用exec和{}可以结合find执行命令或动作
本例的意思是将所有的符合文件全部更改其所有权为slynux用户.其中{}表示为所有符合条件的集合
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
find devel/source_path \( -name ".git" -pruns \) -o \( -type f -print \) 该命令表示打印出不包括在.git目录中的所有文件的名称(路径).使用关键字pruns
xargs命令把从stdin接收到的数据重新格式化,再将其作为参数提供给其他命令
cat example.txt | xargs xargs将多行输入转换成单行输出。将‘\n‘符转换成" "(空格)
cat example.txt | xargs -n 3 指定每行最大的参数数量n,每个参数都是由" "(空格)隔开
echo "splitXsplitXsplitXsplit" | xargs -d X -n 2 利用-d选项指定分隔符,默认为IFS作为分隔符
#cecho.sh
echo $*‘#‘ 定义一个文件,当参数被传递给文件后,它会将这些参数打印出来,并以#字符作为结
尾
#args.txt
args1
args2
args3
cat args.txt | xargs -n 1 ./cecho.sh 当需要每次提供一个参数时,指定n=1
cat args.txt | xargs ./cecho.sh 当需要每次提供所有参数时
INPUT | xargs -n X 每次执行脚本需要X个参数的命令时
./cecho.sh -p arg1 -l
./cecho.sh -p arg2 -l arg部分是唯一的可变文本
cat args.txt | xargs -I {} ./cecho.sh -p {} -l 利用-I选项配合{}指定了替换字符串,可以实现上面的执行命令
find . -type f -name "*.txt" -print0 | xargs -0 rm -f 删除匹配的文件,其中\0作为输入定界符。
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l 统计源代码目录中所有C程序文件的行数
tr只能通过stdin,而无法通过命令行参数来接受输入。
tr [options] set1 set2
将来自stdin的输入字符从set1映射到set2,并输出到stdout。若set2的长度小于set1,则set2会不断重复其最后一个字符,直到长度与set1相同。如果set2的
长度大于set1,那么在set2中超出set1长度的那部分字符则完全被忽略
echo "HELLO WORLD WHO IS THIS" | tr ‘A-Z‘ ‘a-z‘ 将输入字符由大写转换成小写
echo 12345 | tr ‘0-9‘ ‘9876543210‘ 加密
echo 87654 | tr ‘9876543210‘ ‘0-9‘ 解密
echo "hello 123 world 456" | tr -d ‘0-9‘ 利用-d选项删除字符。本例结果为hello world
echo hello 1 char 2 next 4 | tr -d -c ‘0-9 \n‘ 利用-c选项使用字符的补集,将去除非set1中出现的所有字符。本例结果为 1 2 4
echo "ssssss" | tr -s ‘s‘ 利用-s选项压缩字符。本例压缩s,结果为s
字符类
alnum 字母和数字
alpha 字母
cntrl 控制(非打印)字符
digit 数字
graph 图形字符
lower 小写字母
print 可打印字符
punct 标点符号
space 空白字符
upper 大写字母
xdigit 十六进制字符
tr ‘[:lower:]‘ ‘[:upper:]‘
md5sum 1.sh > 1.md5 计算1.sh的校验和(32字符,十六进制)并保存到1.md5文件中
md5sum -c 1.md5 利用生成的文件核实数据完整性
md5sum *.md5 用所有的.md5信息来检查所有的文件
sha1sum 1.sh > 1.sha1 计算1.shd点校验和(40字符,16进制)
md5deep -rl directory_path > directory.md5 计算目录的校验和。r表示递归,l表示使用相对路径。需要安装md5deep软件包
md5sum -c directory.md5 核实目录
sort file1.txt file2.txt > sort.txt 利用sort将一组文件进行排序
cat sort.txt | uniq > uniq.txt 利用uniq找出已排序文件中不重复的行
sort -n file.txt 按数字进行排序
sort -r file.txt 按逆序进行排序
sort a.txt -o a.txt 对a.txt的文件排序
sort -M months.txt 按月份进行排序
sort -nC file.txt 检查是否按照数字进行排序
sort -m sorted1 sorted2 合并两个排过序的文件,而且不需要对合并后的文件再进行排序
sort -nrk 1 data.txt -k指定了排序应该按照哪一个键(列号)来进行排序。
sort -u unsort.txt 只显示唯一的行
uniq -u unsort.txt 只显示唯一的行
sort unsort.txt | uniq -c 统计各行在文件中出现的次数
sort unsort.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 删除指定的文件
temp_file=$(tempfile) 为变量temp_file赋值了一个临时文件名
temp_file="/tmp/file-$RANDOM" 加带了随机数的文件名作为临时文件名
echo $RANDOM 总是返回一个随机数
temp_file="/tmp/var.$$" 生成带当前运行脚本的进程ID的临时文件
dd if=/dev/zero bs=100k count=1 of=data.file 生成一个大小为100KB的测试文件
split -b 10k data.file 将文件分割为多个大小为10k的文件
split -b 10k data.file -d -a 4 -d参数指定以数字为后缀,-a参数指定后缀长度
split -b 10k data.file -d -a 4 split_file 指定每个分割文件的前缀为split_file
split -l 10 data.file -l选项指定分割文件仅有10行
csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log";rm server00.log
/SERVER/ 用来匹配某一行,分割过程即从此开始
{*} 表示根据匹配重复执行分割,直到文件末尾为止。{整数}指定分割执行的次数
-s 使命令进入静默模式,不打印其他信息
-n 指定分割后的文件名后缀的数字个数
-f 指定分割后的文件名前缀
-b 指定后缀格式
因为分割后的第一个文件没有任何内容,所以删除第一个文件
file_jpg="sample.jpg"
name=${file_jpg%.*} 利用$操作符可以将名称部分从“名称.扩展名”这种格式的文件名中提取出来
echo File name is :$name
var=hack.fun.book.txt
echo ${var%.*} -->hack.fun.book 从右到左
echo ${var%%.*} -->hack %%符号执行非贪婪匹配
echo ${var#*.} -->fun.book.txt 从左到右
echo ${var##*.} -->txt ##符号执行非贪婪匹配
extension=${file_jpg#*.} 利用#操作符可以将扩展名部分提取出来
echo Extension is : $extension
rename *.jpg *.JPG 将*.jpg更名为*.JPG
目录/usr/share/dict包含了一些词典文件
命令aspell来核查某个单词是否在字典中
look android filepath 返回filepath路径中以android开头的文件/目录
read -p "Enter number:" no 将输入内容赋值给变量no
交互式自动化:expect
#!/bin/bash
#文件名:interactive.sh
read -p "Enter number:" no
read -p "Enter name:" name
echo you have entered $no,$name;
#!/usr/bin/expect
#文件名:automate_expect.sh
spawn ./interactive.sh spawn参数指定需要自动化哪一个命令
expect "enter number:" expect参数提供需要等待的消息
send "1\n" send是要发送的消息
expect "enter name:"
send "hello\n"
expect eof expect eof指明命令交互结束
comm a.txt b.txt 比较A.TXT和B.TXT的文件。输出的第一列包含只在a.txt中出现的行,第二列只包含在b.txt中出
现的行,第三列包含共同出现的行
comm a.txt b.txt -1 -2 -1从输出中删除第一列,-2从输出中删除第二列,-3从输出中删除第三列
用户特殊权限:S
setuid权限允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户运行的
用户组特殊权限:S
setgid位允许以同该目录拥有者所在组相同的有效组权限来允许可执行文件,但是这个组和实际发起命令的用户组未必相同
其他用户特殊权限:T/t
粘滞位(sticky bit)。当一个目录设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,即使用户组和其他用户也有写权限
如果没有设置执行权限,但是设置了粘滞位,那么使用t;如果同时设置了执行权限和粘滞位就使用T
chmod a+t directory_name 设置粘滞位
chmod 777 . -R 以递归的方式设置权限
chown user.group . -R 以递归的方式设置所有权
chmod +s executable_file 以不同的用户运行可执行文件
chmod u+s file 置位setuid
chmod g+s file 置位setgid
chattr +i file 将文件file设置为不可修改
chattr -i file 将文件file重新设置为可修改
touch -a file 只更改文件访问时间
touch -m file 只更改文件内容修改时间
touch -d "Fri Jun 25 10:20:12 IST 2012" file -d为时间戳指定特定的时间和日期
ln -s target symbolic_link_name 创建软连接symbolic_link_name-->target
file filename 显示文件类型信息
file -b filename 显示不包括文件名在内的文件类型信息
环回文件系统是指那些在文件中而非物理设备中创建的文件系统
创建一个1G大小的文件
dd if=/dev/zero of=loopbackfile.img bs=1G count=1
格式化这个文件
mkfs.ext4 loopbackfile.img
检查文件系统
file loopbackfile.img
挂载环回文件
mkdir /mnt/loopback
mount -o loop loopback/img /mnt/loopback
在内部,这个环回文件连接到一个名为/dev/loop1或者loop2的设备上,手动操作如下
losetup /dev/loop1 loopback.img
mount /dev/loop1 /mnt/loopback
将ISO文件作为环回文件挂载
mkdir /mnt/iso
mount -o loop linux.iso /mnt/iso
通过sync立即应用更改
sync
创建ISO镜像
从/dev/cdrom创建一个ISO镜像
cat /dev/cdrom > image.iso
创建镜像的最好方法是用dd工具
dd if=/dev/cdrom of=image.iso
mkisofs命令创建iso文件系统
mkisofs -V "Label" -o image.iso source_dir/
-V指定了ISO文件的的卷标,source_dir是作为ISO文件内容来源的目录路径
能够启动闪存或硬盘的混合ISO
isohybrid命令把标准ISO文件转换成混合ISO
isohybrid image.iso ->可用于写入USB存储设备
将ISO写入USB存储设备
dd if=image.iso of=/dev/sdb1
命令行刻录ISO
cdrecord -v dev=/dev/cdrom image.iso
-speed 速度 指定刻录速度
-multi 刻录方式采用多区段
玩转CD ROM托盘
eject 弹出光驱托盘
eject -t 合上光驱托盘
查找文件差异并进行修补
diff -u version1.txt version2.txt 以一体化形式输出差距,version2.txt中没有version1.txt的文件被显示。+表示是新加入的行,-表示是删除的行
diff -u version1.txt version2.txt > version.patch 将diff的输出重定向到一个文件
patch命令配合version.patch,当应用与version1时,就可以得到version2
patch -p1 version1.txt < version.patch 此时version1的内容和version2相同
patch -p1 version1.txt < version.patch 再次输入该命令撤销修改
生成目录的差异信息
diff -Naur directory1 directory2
-N:将所有缺失的文件视为空文件
-a:将所有文件视为文本文件
-u:生成一体化输出
-r:遍历目录下的所有文件
head -n 4 file 指定打印前几行
head -n -N file 打印除了最后N行之外的所有行
seq 11 | head -n -5 打印除了最后五行之外的所有行
seq 100 | head -n 5 打印前五行
tail -n 5 file 打印后五行
tail -n +(N+1) 打印除了前N行之外的所有行
seq 100 | tail -n +6 打印第六行到第一百行
tail -f file 动态显示文件
查看当前路径下的目录
ls -d */
用pushd和popd快速定位
pushd和popd可以用于在多个目录之间进行切换而无需复制粘贴。pushd和popd是以栈的方式来运作,后进先出。
pushd /var/www 压入路径
pushd /usr/src 压入路径
pushd /etc 压入路径
查看栈内容
dirs
切换目录
pushd +3 每条路径的编号是以0开始,从左到右
移除栈内容
popd 当前目录被移除
popd +3 将第三个移除
cd - 切换到上个目录
统计行数
wc -l file
统计单词数
wc -w file
统计字符数
wc -c file
默认显示行数、单词数和字符数
wc file
打印最长行的长度
wc file -L
打印目录树
tree -/unixfs 树状UNIX文件系统
tree path -P pattern 用通配符描述样式
tree path -I pattern 只重点标出除符合样式之外的文件
tree -h 同时打印出文件和目录的大小
tree PATH -H http://localhost -o out.html 以html形式输出目录树
grep match_pattern filename 从文件中搜索
grep word filename --color 重点标记处匹配到的单词
grep -E "[A-Z]+" 或者 egrep "[A-Z]+" 正则表达式查找
grep word -o file -o选项只输出匹配到文本部分
grep -v word file -v选项打印除了匹配外的所有行
grep -c word file -c统计匹配行的数量
grep -c word file | wc -l wc -l配合-c可以统计匹配项的数量
grep -n word file -n选项包含匹配字符串的行数
grep word file -R -n -R递归搜索
grep -i word file -i忽略大小写
grep -e word1 word2 file -e匹配多个样式
grep dir --include word --include搜索中包含文件
grep dir --exclude word --exclude搜索排除文件
--exclude-dir
--exclude-from FILE
cut按列切分文件
cut -f 2,3 filename 提取filename文件中2、3列
cut -f 3 --complement file 提取除了第三列外的所有列
cut -f 3 -d ";" file -d指定了定界符
cut -c 1-5 file 打印前5个字符
cut -c -5 file 打印前5个字符
-c 表示字符
-b 表示字节
-f 表示定义字段
N- 从第N个字节到行尾
N-M 从第N个到第M个
-M 从第一个到第M个
cut -c1-3,6-9 file --output-delimiter "," 指定输出定界符
sed入门
sed ‘s/pattern/replace_string/‘ file 替换给定文本中的字符串
sed -i ‘s/pattern/replace_string/‘ file 将替换结果应用于原文件
sed ‘/s/pattern/replace_string/g‘ file 替换所有符合内容
sed ‘s/pattern/replace/Ng‘ file 从第N+1处替换
sed ‘/^$/d‘ file 移除空白行
sed ‘s/\w\+/[&]/g‘ &对应于之前所匹配到的单词
sed ‘expr1‘ | ‘expr2‘ 组合多个表达式
awk入门
awk ‘BEGIN{print "start"} pattern {commands} END {print "end"}‘ file
工作方式:
1,执行BEGIN {commands}语句块中的语句
2,从文件中或stdin中读取一行,然后执行pattern {commands}。重复这个过程,直到文件全部被读取完毕
3,当读至输入流末尾时,执行END {commands} 语句块
三个语句块都是可选的
echo -e "line1\nline2" | awk ‘BEGIN{print "start"} {print} END{print "END"}‘ 结果如下:
start
line1
line2
end
特殊变量
NR:表示记录数量
NF:表示字段数量
$0:这个变量包含执行过程中当前行的文本内容
$1:这个变量包含第一个字段的文本内容
$2:这个变量包含第二个字段的文本内容
迭代文件中的每一行
while read line;
do
echo $line;
done < file.txt
或者
cat file.txt | (while read line;do echo $line;done)
迭代一行中的每一个单词
for word in $line;
do
echo $word;
done
迭代文件中的每一行的每一个单词
while read line;
do
for word in $line;
do
echo $word;
done
done < file.txt
迭代一个单词中的每一个字符
for ((i=0;i<${#word};i++))
do
echo ${word:i:1};
done
按列合并文件
paste file1 file2
paste file1 file2 -d "," 指定定界符,默认为制表符
按行合并文件
cat file1 file2
打印文件或行中的第n个单词或列
awk ‘{print $1}‘ file
ls -l | awk ‘{print $1 ":" $4}‘
打印不同行或样式之间的文本
awk ‘NR==M,NR==N‘ filename 打印m行到n行文本
awk ‘/start_pattern/, /end_pattern/‘ filename 打印pattern之间的文本
邮件的正则表达式
[a-zA-Z0-9.][email protected][a-zA-Z0-9.]+\.[a-zA-Z]{2,4}
文本切片与参数操作
var="this is a line"
echo ${var/line/replace} -->this is a replace
${variable_name:start_position:length} -->指定字符串的起始位置和长度来生成子串
string=abcdefghijklmnopqrstuvwxyz
echo ${string:4} -->efghijklmnopqrstuvwxyz
echo ${string:4:8} -->efghijkl
echo ${string:(-1)} -->x
echo ${string:(-2):2} -->yx
网站下载
wget url 下载网页或远程文件
wget url1 url2
wget ftp://baidu.com/somfile.jpg
wget ftp://baidu.com/somfile.jpg -o log -O 1.jpg -o表示日志,-O表示指定输出文件名
wget -t 5 rul -t指定重试次数
wget --limit-rate 20k url 限速下载
wget -Q 100m url 指定下载最大限额
wget -c url 断点续传
curl url 下载网页
wget --mirror url 复制或镜像整个网站
wget --user username --password pass url 访问需要认证的HTTP或FTP页面
以格式化纯文本形式下载网页
lynx -dump url > webpage_as_text.txt 将网页以ASCII字符的形式下载到文本文件中
用curl设置cookie
curl url --cookie "user=slynx;pass=hack"
将cookie另存为一个文件
curl url --cookie-jar cookie-file
用curl设置用户代理字符串
curl url --user-agent "Mozilla/5.0" 设置用户代理为IE
限定curl可占用的带宽
curl url --limit-rate 20k
指定最大下载量
crul url --max-filesize 30k
用curl进行认证
curl -u user:pass url
tar -cvf output.tar source1 source2 创建包
tar -rvf output.tar new_file 追加文件
tar -tvf output.tar 列出包里的内容
tar -xvf output.tar 提取包里的内容
tar -Af file1.tar file2.tar 拼接两个包文件
tar -f output.tar --delete file1 file2 从包文件中删除文件
tar -zcvf output.tar.gz source gzip格式压缩
tar -jcvf output.tar.bz2 source bz2格式压缩
tar -cvf --lzma output.tar.lzma lzma格式压缩
tar -cf output.tar * --execlude "*.txt" 从归档中排除部分文件
用cpio归档
echo file1 file2 | cpio -ov > archive.cpio
gzip filename 压缩文件,只能压缩一个文件
gunzip filename.gz 解压缩文件
zcat filename.gz 读取压缩文件内容
gzip -9 filename 压缩率
1级的压缩率最低,但是压缩速度最快
9级的压缩率最高,但是压缩率最慢
bzip2 filename 压缩文件
bunzip2 filename.bz2 解压缩文件
bunzip2 filename.bz2 -k 解压缩文件,保留原文件
bzip2 filename -k 压缩文件,保留原文件
lzma filename 压缩文件
unlzma filename.lzma 解压缩文件
lzma filename -k 压缩保留原文件
lzma -9 filename 压缩率
超高压缩率的squashfs文件系统
mksquashfs sources compressedfs.squashfs 创建squashfs文件
mkdir /mnt/squash
mount -o loop compressedfs.squashfs /mnt/squash
加密工具与散列
crypt input_file output_file 接受文件以及口令
crypt passphrase inputfile encrypted_file
crypt passphrase -d encrypted_file > outputfile 解密文件
gpg -c filename 加密文件
gpg filename.gpg 解密文件
列出网络上的所有活动主机
方法一:
for ip in 192.168.0.{1..255};
do
ping $ip -c 2 &> /dev/null;
if [ $? -eq 0 ];
then
echo $ip is alive
fi
done
方法二:
fping -a 192.168.0.1/24 -g 2> /dev/null
或者
fping -a 192.168.0.1 192.168.0.255 -g
传输文件
lftp [email protected]
cd directory 改变目录
lcd 改变本地主机的目录
mkdir 创建目录
get filename 下载文件
put filename 上传文件
sftp [email protected]
sftp -oPort=422 [email protected] SSH端口不是默认的22时,需要指定端口
scp source destination 安全复制文件
scp filename [email protected]:/path
其中src和dst都可以采用形如[email protected]:/path的形式
scp -r filename [email protected]:/path 递归复制
iwconfig命令用来为无线网卡配置合适的无线网络
iwlist scan命令可以扫描并列出可用的无线网络
lsof -i 列出系统中的开放端口以及运行在端口上的服务的详细信息
netstat -lntp 查看开放端口与服务
计算命令执行时间
time command 计算命令的执行时间
real时间表示挂钟时间,命令开始到结束的时间
user时间是指进程花费在用户模式中的cpu时间,真正用于执行进程的时间
sys时间是指进程花费在内核模式中的cpu时间
watch监视命令
watch ls 在某段时期内以固定的间隔时间不断监视某个命令的输出
watch -n 5 ‘ls -l‘ -n指定输出的时间间隔
watch -d ‘ls -l‘ -d指定命令输出差异
对文件及目录访问进行记录
inotifywait -m -r -e create,move,delete /dev/ -q
wall命令用来向所有当前登陆用户的终端写入消息
echo "test123" | wall
wall < message
查看主机名
hostname 或者uname -n
打印linux内核版本、硬件架构等详细信息
uname -a
打印内核发行版本
uname -r
打印主机类型
uname -m
打印CPU相关信息
cat /proc/cpuinfo
打印内存的详细信息
cat /proc/meminfo
打印系统的分区信息
cat /proc/partions
cron表的格式,从左到右依次是
分钟(0-59)、小时(0-23)、天(1-31)、月份(1-12)、工作日(0-6)、命令
创建cron表:
crontab -e -u user
查看cron表:
crontab -l
移除cron表:
crontab -u user -r
$0 查看当前shell
$? 命令的返回状态,正常退出为0;非正常退出为非0
$1 执行脚本时的参数
$PS1 当前bash提示字符串
$$ 当前进程ID
$UID 为0表示为root