首页
统计归档
留言墙
关于我
Search
1
Java 中的 cron 表达式使用
151 阅读
2
宽度确定的情况下,如何让高度等于宽度
87 阅读
3
2023年的日子
72 阅读
4
docker 安装nacos
67 阅读
5
人工智能误区
59 阅读
web开发
硬件、电子
常见芯片
常见传感器
机械结构
系统、容器
往事前言
读书
登录
Search
标签搜索
docker
人工智能
浪潮之巅
JJia
累计撰写
59
篇文章
累计收到
106
条评论
首页
栏目
web开发
硬件、电子
常见芯片
常见传感器
机械结构
系统、容器
往事前言
读书
页面
统计归档
留言墙
关于我
搜索到
59
篇与
的结果
2022-08-09
思想是个狗东西之-1
毒药往往是甜的;解药往往是苦的。
2022年08月09日
15 阅读
0 评论
0 点赞
2022-08-05
arm 9005x 风扇控温脚本
#!/bin/bash sj_temp_pid="$(cat /var/run/sj_temp.pid 2>/dev/null)" get_name="$(cat /proc/$sj_temp_pid/comm 2>/dev/null)" # 这个其实是if else的语法糖 [] 为判断条件 && 内是成功的处理逻辑 ||内是失败的处理逻辑,当然,可以只有&& 即成功的处理逻辑 [ "$get_name" = "${0##*\/}" ]&&{ echo "脚本已经执行,请勿重复执行……" exit 0 } # 温度获取地址的获取 [ -r /sys/class/hwmon/hwmon0/temp1_input ]&&tempfile="/sys/class/hwmon/hwmon0/temp1_input" # 温度获取地址的获取 [ -r /sys/class/thermal/thermal_zone0/temp ]&&tempfile="/sys/class/thermal/thermal_zone0/temp" # 获取到当前风扇的gpio的引脚定义(两脚的话只有开关,四pin的话会有转速控制) [ -L /sys/class/gpio/gpiochip501 ]&&gpio_id=504||gpio_id=148 { #保存当前脚本的pid,用于开头的文件是否运行的检测 echo "$BASHPID" >/var/run/sj_temp.pid [ "$(cat /sys/class/thermal/cooling_device1/type)" = "gpio-fan" ]&&statusfile="/sys/class/thermal/cooling_device1/cur_state"||{ #获取好风扇状态的文件配置地方 statusfile="/sys/class/gpio/gpio$gpio_id/value" echo "$gpio_id" >/sys/class/gpio/export # 设置风扇方向 echo "out" >/sys/class/gpio/gpio$gpio_id/direction # 设置风扇状态 echo "0" >/sys/class/gpio/gpio$gpio_id/value } # 循环执行 while : do # 先获取到当前的cpu温度 cpu_temp=$(cat $tempfile) # 再获取到当前风扇的状态,没有先后顺序哈这俩 f_status=$(cat $statusfile) # 这个其实是if else的语法糖 [] 为判断条件 && 内是成功的处理逻辑 ||内是失败的处理逻辑,意思为cpu温度超过了60000 就打开风扇,小于50000就关闭风扇,中间的差值防止风扇反复横跳,留个缓冲区。 [ "$cpu_temp" -ge "60000" -a "$f_status" = "0" ]&&echo "1" >$statusfile [ "$cpu_temp" -lt "50000" -a "$f_status" = "1" ]&&echo "0" >$statusfile sleep 10 done } >/dev/null 2>&1 &
2022年08月05日
10 阅读
0 评论
0 点赞
2022-08-05
Shell 参数扩展及各类括号在 Shell 编程中的应用
文章引用自 开源中国的一位大佬的博客 Shell 参数扩展及各类括号在 Shell 编程中的应用1、bash 中的大括号参数扩展(Parameter Expansion)假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt1.1 bash 下的 split 取 “数组” 的首、尾:${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/myTips:记忆的方法为:'#'是去掉左边 (在键盘上 # 在 $ 之左边)'%' 是去掉右边 (在键盘上 % 在 $ 之右边)单一符号是最小匹配﹔两个符号是最大匹配(类似贪婪匹配)。1.2 bash 下的 substring 按字符位置、长度截取${file:0:5}:提取最左边的 5 个字节:/dir1 ${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2 ${#file}:计算出字符串的长度,/dir1/dir2/dir3/my.file.txt 字符串长度 27 ${file: -4}:提取最后四个字符串(空格是为了避免冲突,注意不同于echo ${file:-4},也可以用(-4)代替空格),类似用法(提取前四个字符) ${file:0:4}1.3 bash 下的 replace 与 replaceAll我们也可以对变量值里的字符串作替换:${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt1.4 bash 下的变量空值检测与初始化利用 ${} 还可针对不同的变量状态赋值 (没设定、空值、非空值):${file-my.file.txt} :假如 $file 没有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) ${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理) ${file+my.file.txt} :假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(没设定时不作处理) ${file:+my.file.txt} :若 $file 为非空值,则使用 my.file.txt 作传回值。 (没设定及空值时不作处理) ${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (空值及非空值时不作处理) ${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (非空值时不作处理) ${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值时不作处理) ${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值时不作处理)Tips:以上的理解在于,你一定要分清楚 unset 与 null 及 non-null 这三种赋值状态.一般而言,:与 null 有关,若不带:的话,null 不受影响,若带:则连 null 也受影响。而 - 和 = 的区别在于是否把传回值赋给引用变量,例如:${parameter:-word} word is only substituted. ${parameter:=word} word is substituted and assigned to parameter. root@localhost ~ $ echo "$var" root@localhost ~ $ echo "${var:-hello}" hello root@localhost ~ $ echo "$var" root@localhost ~ $ echo "${var:=hello}" hello root@localhost ~ $ echo "$var" hello1.5 bash 下的数组和关联数组Bash4 中可以使用两种容器。一种是数组,另一种是关联数组,类似于其他语言中的 Map/Hash/Dict。声明数组的常用语法: declare -a ARY 或者 ARY=(1 2 3)声明关联数组的唯一语法:declare -A MAP(bash4 以下不支持)赋值的语法:直接 ARY[N]=VALUE,N 可以是数字索引也可以是键。关联数组可以使用 MAP=([x]=a [y]=b) 进行多项赋值,注意这是赋值的语句而不是声明。亲测数组中的索引不一定要按顺序来,你可以先给 2 和 3 上的元素赋值。(同样算是弱类型的 Javascript 也支持这种无厘头赋值,这算通病么?)往现有数组批量添加元素:ARY+=(a b c) MAP+=([a]=1 [b]=2)取值:${ARY[INDEX]} ${MAP[KEY]}注意花括号的使用${A[@]} 展开成所有的变量,而获取数组长度使用 ${#A[@]}切片:${ARY[@]:N:M} N是offset而M是length返回索引,相当于keys():${!MAP[@]}试试下面的代码:declare -a ARY declare -A MAP MAP+=([a]=1 [b]=2) ARY+=(a b c) echo ${ARY[1]} echo ${MAP[a]} echo "${ARY[@]}" echo "${MAP[@]}" echo "${ARY[@]:0:1}" echo ${#ARY[@]} echo "${!MAP[@]}" ARY[4]=a echo ${ARY[@]} echo ${ARY[3]}1.6 bash 下的大小写变换HI=HellO echo "$HI" # HellO echo ${HI^} # HellO echo ${HI^^} # HELLO echo ${HI,} # hellO echo ${HI,,} # hello echo ${HI~} # hellO echo ${HI~~} #hELLo^大写,,小写, ~大小写切换重复一次只修改首字母,重复两次则应用于所有字母。混着用会怎样?echo ${HI^,^} # HellO看来是不行的×_×2、各类括号在 shell/bash 编程中的应用上面应该见识到了 shell 中大括号的强大功能,其实 shell 下有很多种括号,不像其它高级语言括号只起到语法和意义的作用,而 shell 下的每种括号除了语法、语义的作用之外,还对 shell 编程起到了功能上的扩展。2.1 () 在子shell中运行(a=1);echo $a,结果是空,因为a=1不是在当前shell中运行的(a=1);(echo $a)也是空的。小技巧:(cd $path, do something) 可以让不切换当前目录而在其它目录干点别的事儿~() 还有个功能是数组的赋值:比如a=(1 3 5),那么${a[0]}=1;${a[1]}=3;${a[2]}=5,需要注意的是,下标是从0开始的。2.2 (()) 表达式计算a=1;((a++));echo $a,这时a就是2了。2.3 <() 和 >() 进程代入,可以把命令的执行结果当成文件一样读入比如comm前一般需要sort,那就可以这样comm <(sort 1.lst) <(sort 2.lst)或者是paste <(cut -t2 file1) <(cut -t1 file1),和管道差不多,但是支持多个输入。2.4 $() $(cmd) 执行cmd的结果,比如cmd是echo ls,那么就是执行ls,比如file $(which bash),which bash的结果是/bin/bash,所以file $(which bash)等于file /bin/bash。如果你$(ls),而且你的当前目录下只有a b两个文件,那么就是执行a b,然后系统会提示,命令没找到。$() 基本和 `` 等价。2.5 $(()) 表达式扩展,和(())很相似,但是这个是有点不同,$(())不能直接$((b++)),例如:b=1;echo $((++b))这时b等于2,显示的也是2,b=1; echo $((b++))这时b等于2,显示的是1.2.6 [] 和 [[]],[] 就是 test,[]和[[]]都是条件表达式,不过[[]]有比[]高的容错性,如果a为空,那么[ $a -eq 0 ]会报错,但是[[ $a -eq 0 ]]不会,所以一般都会使用[[]]或者是[ "$a" -eq 0 ],[[]]支持的功能也比 [] 多,比如[[ aaa =~ a{3} ]],[] 还有一种用途,如果你的当前目录下有a1-a9九个文件,你可以用a[1-9]来替代这九个文件。有点需要注意,你不能用a[1-20]来代替a1- a20,必须要a[1-9] a1[0-9] a20。但是需要注意的是 [[]] 数字进制转换的坑~2.7 $[] 是 $(()) 的过去形式,现在已经不建议使用。2.8 {n..m} {1..30} 就是1-30,或者是/{,s}bin/表示/bin/和/sbin/,ab{c,d,e}表示abc、abd、abe,小技巧:文件备份: cp a.sh{,.bak}而 { cmd1; cmd2; } 的作用是定义一个命令组,一般用在单行的条件表达式中: [[ 1 -eq 2 ]] && echo True || { echo False; echo "Program will exit!"; }其实 shell 函数的语法也是它的变体: a(){ i=$1; echo $((i++)); echo $((++i)); } && a 12.9 ${} 变量的Parameter Expansion,用法很多,最基本的 ${var}1,防止变量扩展冲突,具体可以查看man bash。或者参考我之前的博文链接:http://hi.baidu.com/leejun_2005/blog/item/ebfee11a4177ddc1ac6e751d.html3、bash 命令执行流程:执行分为四大步骤:输入、解析、扩展和执行。4、Refer:[1] shell 十三问之大括号参数扩展(Parameter Expansion)http://hi.baidu.com/leejun_2005/item/138c09343aaddff6e6bb7a49[2] shell 十三問? http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&page=7#[3] shell/bash 编程中各类括号的应用http://hi.baidu.com/leejun_2005/item/6f9eb7345e5f4f302f20c453[4] Bash Hackers Wiki Frontpage » Syntax » Parameter expansionhttp://wiki.bash-hackers.org/syntax/pe[5] 玩转 Bash 变量http://segmentfault.com/blog/spacewander/1190000002539169[6] Bash 快速入门指南http://blog.jobbole.com/85183/[7] SHELL (bash) 脚本编程六:执行流程https://segmentfault.com/a/1190000008215772
2022年08月05日
18 阅读
0 评论
0 点赞
2022-08-04
私家云 U盘启动系统写入EMMC(脚本处理)
这里的脚本是一个兄弟写的,有些命令是没用过的,所以在此处加些注释,记下,方便大家理解和自己以后如果用的话可以来此看看#!/bin/sh echo "Start script create MBR and filesystem" # 这里是定义emmc的路径,肯能有的系统内emmc的路径是mmcblk0 DEV_EMMC=/dev/mmcblk1 echo "Start backup u-boot default" #备份u-boot 将emmc备份到boot下 ,if 读取位置, of写入位置,bs单次读取大小,count 读取次数 dd if="${DEV_EMMC}" of=/boot/u-boot-default.img bs=1M count=4 echo "Start create MBR and partittion" # 这里是给emmc分区(msdoc其实就相当于mbr,mbr只支持2T已下的硬盘) parted -s "${DEV_EMMC}" mklabel msdos # 建立主分区, 格式为fat32,从第700M开始,828M结束 parted -s "${DEV_EMMC}" mkpart primary fat32 700M 828M # 建立主分区,格式为ext4 从829 到剩下的全部 parted -s "${DEV_EMMC}" mkpart primary ext4 829M 100% echo "Start restore u-boot" # dd命令恢复reboot conv:转化时的参数表示把文件的“数据”和“metadata”都写入磁盘(metadata包括size、访问时间st_atime & st_mtime等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,fsync 与fdatasync相差不大。 dd if=/boot/u-boot-default.img of="${DEV_EMMC}" conv=fsync bs=1 count=442 # skip:从输入文件跳过多少个块,seek 从输出文件跳过多少个块 dd if=/boot/u-boot-default.img of="${DEV_EMMC}" conv=fsync bs=512 skip=1 seek=1 echo "Done" #将内存中的缓存文件写入到硬盘,sync 命令可以强制将内存中的文件缓冲写入磁盘,更新块信息。防止数据丢失 sync echo "Start copy system for eMMC." # 创建临时文件夹 mkdir -p /ddbr # 赋予最高权限 chmod 777 /ddbr # 定义emmc第一分区的路径(boot分区,系统引导分区) PART_BOOT="/dev/mmcblk1p1" # 定义emmc第二分区的路径(root分区,相当于文件分区吧) PART_ROOT="/dev/mmcblk1p2" # 定义安装路径 DIR_INSTALL="/ddbr/install" # 判断如果安装路径不是空的话,先删除 if [ -d $DIR_INSTALL ] ; then rm -rf $DIR_INSTALL fi # 然后再新建改目录 mkdir -p $DIR_INSTALL # 查看boot分区是否存在挂载信息,如果有的话,卸载掉 if grep -q $PART_BOOT /proc/mounts ; then echo "Unmounting BOOT partiton." umount -f $PART_BOOT fi echo -n "Formatting BOOT partition..." # 格式化boot分区并起名为BOOT_EMMC mkfs.vfat -n "BOOT_EMMC" $PART_BOOT echo "done." # 以读写方式挂载文件系统PART_BOOT(引导分区路径)到DIR_INSTALL(安装文件路径) 即写入到安装过目录就是写入到了emmc内 mount -o rw $PART_BOOT $DIR_INSTALL echo -n "Cppying BOOT..." # 赋值boot下的文件到安装目录(也就是写入到了emmc内) cp -r /boot/* $DIR_INSTALL && sync echo "done." echo -n "Edit init config..." # 编辑配置文件uEnv.ini sed -e "s/ROOTFS/ROOT_EMMC/g" \ -i "$DIR_INSTALL/uEnv.ini" echo "done." # 删除多余文件 rm $DIR_INSTALL/s9* # 删除多余文件 rm $DIR_INSTALL/aml* # 卸载安装目录(断开emmc的boot分区和安装目录的关系) umount $DIR_INSTALL # 同理查看root分区是否存在挂载,如果有就卸载掉 if grep -q $PART_ROOT /proc/mounts ; then echo "Unmounting ROOT partiton." umount -f $PART_ROOT fi echo "Formatting ROOT partition..." # mke2fs 格式化root分区 为ext4格式 mke2fs -F -q -t ext4 -L ROOT_EMMC -m 0 $PART_ROOT e2fsck -n $PART_ROOT echo "done." echo "Copying ROOTFS." #以读写方式挂载文件系统 ,将root分区挂载在安装目录,往安装目录写东西就相当于向root分区写东西 mount -o rw $PART_ROOT $DIR_INSTALL #切换顶级目录方便拷贝全系统 cd / echo "Copy BIN" # 怎么理解这句话呢,就是先打包bin文件夹,然后带着这些数据,切换到安装目录,然后解压(相当于cp+tar命令吧) tar -cf - bin | (cd $DIR_INSTALL; tar -xpf -) #echo "Copy BOOT" #mkdir -p $DIR_INSTALL/boot #tar -cf - boot | (cd $DIR_INSTALL; tar -xpf -) echo "Create DEV" mkdir -p $DIR_INSTALL/dev #tar -cf - dev | (cd $DIR_INSTALL; tar -xpf -) echo "Copy ETC" tar -cf - etc | (cd $DIR_INSTALL; tar -xpf -) echo "Copy HOME" tar -cf - home | (cd $DIR_INSTALL; tar -xpf -) echo "Copy LIB" tar -cf - lib | (cd $DIR_INSTALL; tar -xpf -) echo "Create MEDIA" mkdir -p $DIR_INSTALL/media #tar -cf - media | (cd $DIR_INSTALL; tar -xpf -) echo "Create MNT" mkdir -p $DIR_INSTALL/mnt #tar -cf - mnt | (cd $DIR_INSTALL; tar -xpf -) echo "Copy OPT" tar -cf - opt | (cd $DIR_INSTALL; tar -xpf -) echo "Create PROC" mkdir -p $DIR_INSTALL/proc echo "Copy ROOT" tar -cf - root | (cd $DIR_INSTALL; tar -xpf -) echo "Create RUN" mkdir -p $DIR_INSTALL/run echo "Copy SBIN" tar -cf - sbin | (cd $DIR_INSTALL; tar -xpf -) echo "Copy SELINUX" tar -cf - selinux | (cd $DIR_INSTALL; tar -xpf -) echo "Copy SRV" tar -cf - srv | (cd $DIR_INSTALL; tar -xpf -) echo "Create SYS" mkdir -p $DIR_INSTALL/sys echo "Create TMP" mkdir -p $DIR_INSTALL/tmp echo "Copy USR" tar -cf - usr | (cd $DIR_INSTALL; tar -xpf -) echo "Copy VAR" tar -cf - var | (cd $DIR_INSTALL; tar -xpf -) echo "Copy fstab" # 删除复制过去的fstab 信息 rm $DIR_INSTALL/etc/fstab # 使用最新的来代替 cp -a /root/fstab $DIR_INSTALL/etc/fstab #删除文件就不说了 rm $DIR_INSTALL/root/install.sh rm $DIR_INSTALL/root/fstab rm $DIR_INSTALL/usr/bin/ddbr rm $DIR_INSTALL/usr/bin/ddbr_backup_nand rm $DIR_INSTALL/usr/bin/ddbr_backup_nand_full rm $DIR_INSTALL/usr/bin/ddbr_restore_nand cd / # 写入硬盘 sync # 卸载root挂载 umount $DIR_INSTALL echo "*******************************************" echo "Complete copy OS to eMMC " echo "*******************************************" # 这里其实少了一个reboot ,直接重启就好了,可能怕不够灵活吧
2022年08月04日
24 阅读
0 评论
0 点赞
2022-08-04
Linux命令-dd(device driver)
dd,是 device driver 的缩写,它可以称得上是“Linux 世界中的搬运工”,它用来读取设备、文件中的内容,并原封不动地复制到指定位置。本文摘抄自(CSDN博主) 江湖有缘 当我们用 dd 命令读取 /dev/null 文件时,就可以创造出空洞文件,而如果你的磁盘足够大,你甚至可以创造出一个宇宙黑洞呢!一、备份磁盘并恢复之前看过一些介绍 dd 的文章,例子中基本都是使用 hda、hdb 这种 IDE 接口的硬盘,其实现在的主流硬盘已经是 SATA 接口的了,下面我要备份的硬盘是 dev/sda,它就是块 SATA 盘。dd if=/dev/sda of=/root/sda.img这个命令将 sda 盘备份到指定文件 /root/sda.img 中去,其中用到了如下两个选项:if=文件名:指定输入文件名或者设备名,如果省略“if=文件名”,则表示从标准输入读取。of=文件名:指定输出文件名或者设备名,如果省略“of=文件名”,则表示写到标准输出。通过上面的 dd 命令,我们得到了 sda.img 文件,它就是已经备份好了的磁盘映像文件,里面存储着 /dev/sda 整块硬盘的内容。在未来的某天,假如 /dev/sda 硬盘真的出现了故障,我们就可以将曾经备份的 sda.img 复制到另一台电脑上,并将其恢复到指定的 sdb 盘中去。dd if=/root/sda.img of=/dev/sdb如果能把目标硬盘直接连接到我们现在的电脑上,并让系统识别到这块新硬盘,例如识别成 /dev/sdc,那么我们可以直接使用 dd 命令将 sda 盘复制到 sdc 中去。这种用法既可以用来整盘备份,也可以用来快速复制系统环境。下面来看看具体的命令:dd if=/dev/sda of=/dev/sdc对 dd 来说,所有设备和文件都一视同仁,所谓的“备份”和“恢复”,dd 都认为是一种内容的复制。二、分区、内存、软盘一个都不能少如果只是想备份某一个分区的数据,操作如下:dd if=/dev/sda2 of=/root/sda_part1.img同理,将内存中的数据整体备份,照样可以如法炮制:dd if=/dev/mem of=/root/mem.img随着科技的飞速发展,无论是台式机还是笔记本,都已经取消了软驱和光驱设备,软盘和光盘也已经接近灭绝的边缘,很多九零后们应该都不知道软驱为何物了吧。所以接下来要介绍的软盘、光盘备份法:备份软盘dd if=/dev/fd0 of=/root/fd0.img count=1 bs=1440k备份光盘dd if=/dev/cdrom of=/root/cd.img对于 dd 命令来说,除了 if、of 两个选项之外,还应该掌握下面这两个重要选项:bs=N:设置单次读入或单次输出的数据块(block)的大小为 N 个字节。当然也可以使用 ibs 和 * obs 选项来分别设置。ibs=N:单次读入的数据块(block)的大小为 N 个字节,默认为 512 字节。obs=N:单次输出的数据块(block)的大小为 N 个字节,默认为 512 字节。count=N:表示总共要复制 N 个数据块(block)。所以这里备份的软盘大小是 1440kB,可以看出这是一块 3 寸盘,其大小为 1.44MB。全部选项#输入文件名,缺省为标准输入。 从file读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO) if=file #输出文件名,缺省为标准输出。 向file写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO) of=file #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 ibs=bytes #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 obs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs。如bs=8k 每次读或写的大小,即一个块的大小为8K。 bs=bytes # 一次转换 bytes 个字节,即转换缓冲区大小。 cbs=bytes #从输入文件开头跳过 blocks 个块后再开始复制。 skip=blocks #从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。 seek=blocks #仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 count=blocks #指定读的方式FLAGS,参见“FLAGS参数说明”oflag=FLAGS指定写的方式FLAGSflag=FLAGS #用指定的参数转换文件。 conv=conversion ascii:转换ebcdic为ascii ebcdic:转换ascii为ebcdic ibm:转换ascii为alternate ebcdic block:把每一行转换为长度为cbs,不足部分用空格填充 unblock:使每一行的长度都为cbs,不足部分用空格填充 lcase:把大写字符转换为小写字符 ucase:把小写字符转换为大写字符 swab:交换输入的每对字节 noerror:出错时不停止 notrunc:不截短输出文件 sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 flags参数 三、使用 /dev/zero 和 /dev/null 来测试磁盘本段落开始前,先介绍下面两个参数:/dev/null,也叫空设备,小名“无底洞”。任何写入它的数据都会被无情抛弃。/dev/zero,可以产生连续不断的 null 的流(二进制的零流),用于向设备或文件写入 null 数据,一般用它来对设备或文件进行初始化。我们可以观察下面两个命令的执行时间,来计算出硬盘的读、写性能:向磁盘上写一个大文件, 来看写性能dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file从磁盘上读取一个大文件, 来看读性能dd if=/root/1Gb.file bs=64k | dd of=/dev/null上面命令生成了一个 1GB 的文件 1Gb.file,下面我们配合 time 命令,可以看出不同的块大小数据的写入时间,从而可以测算出到底块大小为多少时可以实现最佳的写入性能。time dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file time dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file time dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file time dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file四、利用 /dev/urandom 进行格式化除了 /dev/null 和 /dev/zero 之外,还有一个很重要的文件,即 /dev/urandom,它是“随机数设备”,它的本领就是可以生成理论意义上的随机数。如果我们想清除硬盘里的某些机密数据,就可以使用 /dev/urandom 这个随机数生成器来产生随机数据,写到磁盘上,以确保将磁盘原始数据完全覆盖掉。dd if=/dev/urandom of=/dev/sda
2022年08月04日
57 阅读
16 评论
0 点赞
2022-08-04
Linux命令--压缩解压缩(tar,zip,rar)
tar一般Linux系统内,都是自带tar命令的,.gz .tar .tar.gz tar.bz2 tar.xz 都是可以用tar 命令行工具进行操作(打包,压缩,解压等);参数选项-c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 -z:有gzip属性的 -j:有bz2属性的 -J:具有xz属性的(注3) -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出常用命令//-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 # tar -cf all.tar *.jpg //这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。 # tar -rf all.tar *.gif //这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。 # tar -uf all.tar logo.gif //这条命令是列出all.tar包中所有文件,-t是列出文件的意思 # tar -tf all.tar //这条命令是解出all.tar包中所有文件,-x是解开的意思 # tar -xf all.tar 压缩code here...解压code here...zip.zip 压缩包是window下常见的,但是有些情况,需要window和linux 进行交互,所以Linux也会操作一些.zip 的文件。但是Linux系统一般是不默认安装zip的命令行工具的,所以需要手动安装;zip 用于压缩unzip 用于解压安装yum install -y zip unzip压缩//zip格式的压缩,需要先下载zip for linux zip jpg.zip *.jpg 解压//解压zip unzip file.zip rar下载wget https://www.rarlab.com/rar/rarlinux-x64-6.0.1.tar.gz (64位操作系统) wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz (32位操作系统)安装tar zxvf rarlinux-3.8.0.tar.gz cd rar make make install 压缩rar a etc.rar /etc //压缩内部的jpg格式的文件 rar a jpg.rar *.jpg 解压unrar e file.rar
2022年08月04日
16 阅读
0 评论
0 点赞
1
...
5
6
7
...
10