栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Day7-认识与学习BASH(3)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day7-认识与学习BASH(3)

Day7-认识与学习BASH 0x01 BASH基础 1. shell内建属性
  1. 获取字符串的长度

    length=${#var} 可以获得var的长度
    
  2. 获取当前使用的shell

    $BASH $0
    
  3. 检查当前运行用户

    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
    
  4. 修改bash的提示字符

    环境变量 : PS1 可以控制

    cat ~/.bashrc | grep PS1
    

    还有一些比较特殊的字符在里面可以使用

    u 扩展为用户名
    h 扩展为主机名
    w 扩展为档期啊目录
    
2. 函数添加环境变量
prepend() { [ -d "$2" ] && eval $1="$2':'$$1'" && export $1;}
3. 数组
echo ${array[*]}
echo ${array[@]}

分别以字符的形式打印数组元素

4.终端操作

stty -echo 以密码形式获取输入 但不输出

#!/bin/bash
echo -e "Please Enter password:"
stty -echo
read password
stty echo
echo 
echo password read.

设计一个终端倒计时

#!/bin/bash
echo Count;
tput sc
for count in `seq 0 40`
do
	tput rc
	tput ed
	echo -n $count
	sleep 1
done
5. 调试脚本
set -x 执行时显示参数和命令
set +x 禁止调试
set -v 当命令进行读取时显示输入
set +v 禁止打印输入
6.获取输入
read 
-n 指定数量
-s 无回显
-p 提示信息
-t 时限
-d 特定的分隔符
7. 配置文件定制bash

登录shell: /etc/profie profile /bash_login

交互shell、ssh单条执行: bash.bashrc .bashrc

BASH_ENV: 设置之后才能在子shell中用别名

ssh登录 读取的配置文件

1. /etc/profile
2. /etc/bash.bashrc
3. profile
0x02 命令执行 1. 录制并回放终端会话
script -t 2> timing.log -a output.session

scriptreplay; 回访执行过程。

2.xargs

和find 结合使用 注意指定参数

find xxx -print0 | xargs -0 
3. md5sum
  • 对文件md5
md5sum file > a.md5 生成
md5sum -c a.md5  快速check
  • 对于目录进行md5
md5deep -r1 dir > a.md5

-r指定迭代深度 此处为一层

  • 密码hash

    openssl password -1 -salt salt_string password
    
4. 排序
sort data.txt | uniq -s 2 -w 2
  • sort

    -nrk 依据第一列 按逆序排序
    -k 2 按照第2列排序
    -d 按照字典排序
    
  • uniq

    -c 统计数据出现次数
    -n 显示唯一行
    -d 显示重复
    -s 跳过
    -w 从当前开始多少
    
5. 分割

split 在不出网环境写数据就有大用了哦。

-b 指定各个文件大小
-d 使用数字后缀
-a 后缀长度
-l 指定行数

csplit

{真数} 指定分割执行的次数
-s 命令静默
-n 文件名后缀数字格式
-f 后缀的前缀
-b 指定后缀格式
6. 并行

并行计算 yyds 都是开的子shell

#!/bin/bash
PIDARRAY=()
for file in File1.iso File2.iso
do
	md5sum $file &
	PIDARRAY+=("$!")
done
wait ${PIDARRAY[@]}
7.树状目录图
cd /var/log
find . -exec sh -c 'echo -n {}| tr -d "[:alnum:]_.-" | tr "/" " "; basename {} ' ;
0x03 文件操作
  • **-**作为命令行参数 借此实现从stdin获得输入
1. 创建任意大小文件
dd if=/dev/zero of=junk.data bs=1m count=1

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. 文件权限
  1. 目录的粘滞位

    如果目录设置了该权限 只有创建者才能删除
    /tmp
    
  2. 递归赋权

    -R

  3. 将文件设置为不可修改

    chattr 设置文件的扩展属性

    chattr +i file
    chattr -i file
    
  4. 查看文件状态

    !/bin/bash
    # name: filestat.sh
    if [ $# -ne 1 ];
    then
    	echo "Usage: is $0 basepath";
    	exit
    fi
    path=$1
    
    declare -A statarray;
    
    while read line;
    do
    	ftype=`file -b "$line" | cut -d, -f1`
    	let statarray["$ftype"]++;
    done < <(find $path -type f -print) #注意 这里不是<<  第一个< 是重定向 第二个是子进程输出转换
    
    echo ============ FIle types and counts =============
    for ftype in "${!statarray[@]}";
    do
    	echo $ftype: ${statarray["$ftype"]}
    done
    
    
  5. 创建1g ext4文件并且挂载

    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`	
    

    -o loop 指名挂载的是环回i文件 而非设备

    fdisk 标准分区工具 +

     losetup -o 32256 /dev/loop2 look.img
    

    如果需要创建分区 就必须手动擦操作了

    losetup /dev/loop1 loo.img
    fidsk /dev/loop1
    

    在loop.img中创建分区并挂载第一个分区

    losetup -o 32256 /dev/loop2 loopback.img
    
  6. 挂载ISO文件

这样我们访问该目录 就是访问的iso文件上的数据了。

mkdir /a
mount -o loop linux.iso /a
4. iso文件

创建iso文件

dd if=/dev/cdrom of=iamge.iso
#此时将所有文件都导入对应的,目录内
mkisofs -v "Label" -o image.iso dir/

-v : 指定卷标的。

创建启动闪存和硬盘的混合型iso文件

isohybrid image.iso
dd if=image.iso of=/dev/sdb1

用命令行刻录iso

cdrecourd -v dev=/dev/cdrom image.iso -speed 8

弹出托盘

eject
eject -t 合上。
5. 文件差异

目录差异

diff -Naur dir1/ dir2/
-N 将缺失的文件视为空文件
-a 将所有文件视为文本文件
-u 生成一体化输出
-r 递归目录下所有文件
6. 监视文件变化
dmeg | tail -f
7. 音频文件

*Ubutu Studio
标的。

创建启动闪存和硬盘的混合型iso文件

isohybrid image.iso
dd if=image.iso of=/dev/sdb1

用命令行刻录iso

cdrecourd -v dev=/dev/cdrom image.iso -speed 8

弹出托盘

eject
eject -t 合上。
5. 文件差异

[外链图片转存中…(img-61M4cKxf-1640655330273)]

目录差异

diff -Naur dir1/ dir2/
-N 将缺失的文件视为空文件
-a 将所有文件视为文本文件
-u 生成一体化输出
-r 递归目录下所有文件
6. 监视文件变化
dmeg | tail -f
7. 音频文件

*Ubutu Studio

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号