linux 的常见命令(对以前的补充)

本文详细介绍了od命令的功能及使用方法,包括输出文件的八进制、十六进制等格式编码的字节,特别适用于查看二进制文件中的值。此外,还介绍了eval命令的用法,演示如何将字符串作为命令执行。

od 命令用于输出文件的八进制,十六进制或其他格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符.

常见的文件为文本文件和二进制文件.此命令主要用来查看保存在二进制文件中的值.比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数.这些记录存放在一个文件中,如果想查看下这个数据,这时候 od 命令就派生用场了.个人认为:od 命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释.不管是 IEEE754 格式的浮点数还是 ASCII 码,od 命令都能按照需求输出他们的值.

语法:od [选项] [参数]

选项:

  • -a:此参数的效果和同时指定“-ta”参数相同;
  • -A:<字码基数>:选择以何种基数计算字码;
  • -b:此参数的效果和同时指定“-toC”参数相同;
  • -c:此参数的效果和同时指定“-tC”参数相同;
  • -d:此参数的效果和同时指定“-tu2”参数相同;
  • -f:此参数的效果和同时指定“-tfF”参数相同;
  • -h:此参数的效果和同时指定“-tx2”参数相同;
  • -i:此参数的效果和同时指定“-td2”参数相同;
  • -j<字符数目>或--skip-bytes=<字符数目>:略过设置的字符数目;
  • -l:此参数的效果和同时指定“-td4”参数相同;
  • -N<字符数目>或--read-bytes=<字符数目>:到设置的字符树目为止;
  • -o:此参数的效果和同时指定“-to2”参数相同;
  • -s<字符串字符数>或--strings=<字符串字符数>:只显示符合指定的字符数目的字符串;
  • -t<输出格式>或--format=<输出格式>:设置输出格式;
  • -v或--output-duplicates:输出时不省略重复的数据;
  • -w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数;
  • -x:此参数的效果和同时指定“-h”参数相同;
  • --help:在线帮助;
  • --version:显示版本信息。

参数:
文件:指定要显示的文件

案例:
准备一个 test 文件
$ echo abcdef g >test
$cat test
abcdef g
使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节
$ od -b test
0000000 141 142 143 144 145 146 040 147 012

0000011

----------------------------------------------------------------------------------------------------------------------------------------------------------

eval 语句
shell 中的 eval 这个命令很神奇,他能把字符串当做命令来执行.PS:这个字符串必须是可执行的 bash 命令才可以.
案例:
eval “ls” #输出当前目录的所有文件

语法: eval [参数]
补充说明:eval 可读取一连串的参数,然后再依惨呼本身的特性来执行.
参数:不限数目,彼此之间用分号隔开.
案例:我有一个文件test.txt
命令:cat test.txt
输出:hello world
命令:myfile="cat test.txt"
命令:echo $myfile
输出:cat test.txt
命令:eval $myfile
输出:hello world
eval $myfile这条命令可以看出,eval 进行了变量替换,将字符串中属于 bash 的命令执行了.
把拼接起来的字符串当作命令执行,这就是 eval 的神奇之处.

subShell 与代码块
subShell 是一群被括在圆括号里的命令,这些命令会在另外的进程中执行.当你需要让一小组的命令在不同的目录下执行时,这种方式可以让你不必修改主脚本的目录,直接处理这种情况.
例如:tar -cf -.| (cd /tmp;tar -xpf -)
左边的 tar 命令会产生当前目录的 tar 打包文件,将他传送给标准输出.这份打包文件会通过管道传递给走遍的 subShell 里的命令.开头的 cd 命令会先切换到新目录,也就是让大宝文件在此目录下解开.然后,走遍的 tar 将从打包文件中解开文件.注意,执行此管道的 shell(或脚本)并未更改他的目录.

代码块概念上与 subShell 雷同,只不过他不会建立新的进程.代码块里的命令以花括号({})括起来,且对主脚本的状态会造成影响(例如他的当前目录).一般来说,花括号被视为 shell 关键字,意即他们只有出现在命令的第一个符号时会被识别.实际上:这表示你必须将结束花括号放置在换行字符或分号之后.例如:

 cd /home/directory||{  
echo could not change to /home/directory!>&2  
echo you lose !>&2  
exit1  
}  

I O重定向也可以套用 subShell 与代码块里.在该情况下,所有的命令会从重定向来源读取它们的输入或传送他们的输出.

                  subShell与代码块

结构

定界符

认可的位置

另外的进程

SubShell

()

行上的任何位置

代码块

{}

在换行字符,分号或关键字之后

注意:代码块里的 exit 会终止整个脚本.
我们通常在 shell 中运行一个脚本只需要简单的调用./[script_name]即可,这种方式下,shell 会启动一个子进程来运行该脚本,称为 subShell,当 subShell 运行完成,子进程结束.父进程的环境不会有任何改变.
案例:bash 代码

 #!/bin/bash  
cd /var/cache  
testname="fine"  

分别在 shell 中运行

  1. ./test.sh;echo $testname 会发现还是位于原来的目录中,$testname 的值书粗话为 null.
  2. source ./test.sh;echo $testname 这里就不一样了,现在你位于/var/cache 中,$testname 的值也变成了 fine

用 source 命令来运行脚本,不会产生子进程,脚本在 shell 的进程空间中执行,所以运行重定义的变量,执行的操作,都会在 shell 的运行环境中保留下来.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值