- Day7-认识与学习BASH(3)
Day7-认识与学习BASH
0x01 BASH基础
1. shell内建属性
获取字符串的长度
length=${#var} 可以获得var的长度
-
获取当前使用的shell
if [ $UID -ne 0 ] then echo NOT ROOT USER. Please run as root else echo Root User fi -
检查当前运行用户
if test $UID -ne 0 then echo NOT ROOT USER. Please run as root else echo ROOT USER fi
或者
cat ~/.bashrc | grep PS1
-
修改bash的提示字符
环境变量 : PS1 可以控制
u 扩展为用户名 h 扩展为主机名 w 扩展为档期啊目录
还有一些比较特殊的字符在里面可以使用
prepend() { [ -d "" ] && eval ="':'$'" && export ;}
echo ${array[*]} echo ${array[@]}3. 数组
#!/bin/bash echo -e "Please Enter password:" stty -echo read password stty echo echo echo password read.
分别以字符的形式打印数组元素
4.终端 *** 作stty -echo 以密码形式获取输入 但不输出
#!/bin/bash echo Count; tput sc for count in `seq 0 40` do tput rc tput ed echo -n $count sleep 1 done
设计一个终端倒计时
set -x 执行时显示参数和命令 set +x 禁止调试 set -v 当命令进行读取时显示输入 set +v 禁止打印输入5. 调试脚本
read -n 指定数量 -s 无回显 -p 提示信息 -t 时限 -d 特定的分隔符6.获取输入 1. /etc/profile 2. /etc/bash.bashrc 3. profile 7. 配置文件定制bash
登录shell: /etc/profie profile /bash_login
交互shell、ssh单条执行: bash.bashrc .bashrc
BASH_ENV: 设置之后才能在子shell中用别名
ssh登录 读取的配置文件
find xxx -print0 | xargs -00x02 命令执行 1. 录制并回放终端会话
script -t 2> timing.log -a output.session
scriptreplay; 回访执行过程。 2.xargs 和find 结合使用 注意指定
- 对文件md5
- 3. md5sum
- md5sum file > a.md5 生成
md5sum -c a.md5 快速check
openssl password -1 -salt salt_string password
md5deep -r1 dir > a.md5
- -r指定迭代深度 此处为一层
-
密码hash
sort data.txt | uniq -s 2 -w 2
- -nrk 依据第一列 按逆序排序
-k 2 按照第2列排序
-d 按照字典排序
-
sort
-c 统计数据出现次数
-n 显示唯一行
-d 显示重复
-s 跳过
-w 从当前开始多少
-
uniq
-b 指定各个文件大小
-d 使用数字后缀
-a 后缀长度
-l 指定行数
split 在不出网环境写数据就有大用了哦。
{真数} 指定分割执行的次数 -s 命令静默 -n 文件名后缀数字格式 -f 后缀的前缀 -b 指定后缀格式
csplit
#!/bin/bash PIDARRAY=() for file in File1.iso File2.iso do md5sum $file & PIDARRAY+=("$!") done wait ${PIDARRAY[@]}
6. 并行并行计算 yyds 都是开的子shellcd /var/log find . -exec sh -c 'echo -n {}| tr -d "[:alnum:]_.-" | tr "/" " "; basename {} ' ; 7.树状目录图
- **-**作为命令行参数 借此实现从stdin获得输入
0x03 文件 *** 作dd if=/dev/zero of=junk.data bs=1m count=1 1. 创建任意大小文件
如果目录设置了该权限 只有创建者才能删除 /tmp
if: 输入文件
of: 输出文件
bs: 指定单位大小
count: 被复制的块数2. 删除相同文件
- #!/bin/bash
# name: remove_duplicates.sh
# use: remove the same
ls -lS --time-style=long-iso | awk 'BEGIN{
getline; getline;
name1=$8; size=$5
}
{
name2=$8;
if(size==$5)
{
"md5sum "name1 | getline; csum=$1;
"md5sum "name2 | getline; csum2=$1;
if( csum==csum2 )
{
print name1; print name2;
}
};
size=$5; name1=name2;
}' | sort -u > duplicate_files
cat duplicate_files | xargs -I {} md5sum {} |
sort | uniq -w 32 | awk '{ print $2 }' |
sort -u > unique_files
echo Remving....
comm duplicate_files unique_files -3 | tee /dev/stderr |
xargs rm
echo Removed duplicates files successfully.
-
3. 文件权限
目录的粘滞位
chattr +i file
chattr -i file
-
递归赋权
-R -
将文件设置为不可修改
chattr 设置文件的扩展属性
dd if=/dev/zero of=look.img bs=1G count=1 mkfs.ext4 look.img file look.img mkdir /mnt/loop mout -o loop look.img /mnt/loop` basepath";
exit
fi
path=
declare -A statarray;
while read line;
do
ftype=`file -b "$line" | cut -d, -f1`
let statarray["$ftype"]++;
done -
查看文件状态
losetup -o 32256 /dev/loop2 look.img
-
创建1g ext4文件并且挂载
losetup /dev/loop1 loo.img fidsk /dev/loop1
-o loop 指名挂载的是环回i文件 而非设备
fdisk 标准分区工具 +
losetup -o 32256 /dev/loop2 loopback.img
如果需要创建分区 就必须手动擦 *** 作了
mkdir /a mount -o loop linux.iso /a
在loop.img中创建分区并挂载第一个分区
dd if=/dev/cdrom of=iamge.iso
#此时将所有文件都导入对应的,目录内
mkisofs -v "Label" -o image.iso dir/
- 挂载ISO文件
这样我们访问该目录 就是访问的iso文件上的数据了。
isohybrid image.iso dd if=image.iso of=/dev/sdb1
4. iso文件创建iso文件
cdrecourd -v dev=/dev/cdrom image.iso -speed 8
-v : 指定卷标的。
创建启动闪存和硬盘的混合型iso文件
eject eject -t 合上。
用命令行刻录iso
diff -Naur dir1/ dir2/ -N 将缺失的文件视为空文件 -a 将所有文件视为文本文件 -u 生成一体化输出 -r 递归目录下所有文件
d出托盘
dmeg | tail -f
5. 文件差异 目录差异Ubutu Studio6. 监视文件变化
isohybrid image.iso dd if=image.iso of=/dev/sdb1
7. 音频文件*
cdrecourd -v dev=/dev/cdrom image.iso -speed 8
标的。
创建启动闪存和硬盘的混合型iso文件
eject eject -t 合上。
用命令行刻录iso
diff -Naur dir1/ dir2/ -N 将缺失的文件视为空文件 -a 将所有文件视为文本文件 -u 生成一体化输出 -r 递归目录下所有文件
d出托盘
dmeg | tail -f
5. 文件差异[外链图片转存中…(img-61M4cKxf-1640655330273)]
目录差异Ubutu Studio
6. 监视文件变化 7. 音频文件
评论列表(0条)