Linux cmp命令用于比较两个文件是否有差异,使用参数可以对文件部分内容进行比较。
$ cmp --help
用法: cmp [选项]... 文件1 [文件2 [跳1 [跳2]]]
逐字节比较两个文件。
<跳1> 和 <跳2> 分别是每个文件要略过的字节数。
长选项的必需参数也是相应短选项的必需参数。
-b --print-bytes 打印出内容相异的字节
-i, --ignore-initial=SKIP 两个输入内容都略过前 SKIP 字节
-i, --ignore-initial=跳1:跳2 略过 <文件1> 的前 <跳1> 个字节和文件 <文件2>
的前 <跳2> 个字节。
-l, --verbose 输出所有相异字节的字节数和内容
-n, --bytes=限制 最多比较 <限制> 个字节
-s, --quiet, --silent suppress all normal output
--help 显示此帮助信息并退出
-v, --version 输出版本信息并退出
<跳> 值可以加上以下的单位:
kB=1,000、K=1,024、MB=1,000,000、M=1,048,576、GB=1,000,000,000、G=107,374,182,
还有 T、P、E、Z、Y,如此类推。
如果文件是 “-” 或没给出,则从标准输入读入内容。
如果输入相同,则退出状态为 0;1 表示输入不同;2 表示有错误产生。
命令示例
比较两个文件是否相同,并查看返回值
$ cmp 6M00.bin 6MFF.bin
6M00.bin 6MFF.bin 不同:第 1 字节,第 1 行
$ echo $?
1
$ cmp 6M00.bin 6M00.bin
$ echo $?
0
特殊用法,指定偏移位置,指定比较数量。
$ cmp -i 0:102 6M00.bin 6MFF.bin -n 100
6M00.bin 6MFF.bin 不同:第 1 字节,第 1 行
$ echo $?
1
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
$ tr --help
用法:tr [选项]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.
-c, -C, --complement use the complement of SET1
-d, --delete delete characters in SET1, do not translate
-s, --squeeze-repeats replace each sequence of a repeated character
that is listed in the last specified SET,
with a single occurrence of that character
-t, --truncate-set1 first truncate SET1 to length of SET2
--help 显示此帮助信息并退出
--version 显示版本信息并退出
SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:
\NNN 八进制值为NNN 的字符(1 至3 个数位)
\\ 反斜杠
\a 终端鸣响
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
字符1-字符2 从字符1 到字符2 的升序递增过程中经历的所有字符
[字符*] 在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
[字符*次数] 对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,不包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:punct:] 所有的标点字符
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数
[=字符=] 所有和指定字符相等的字符
Translation occurs if -d is not given and both SET1 and SET2 appear.
-t may be used only when translating. SET2 is extended to length of
SET1 by repeating its last character as necessary. Excess characters
of SET2 are ignored. Only [:lower:] and [:upper:] are guaranteed to
expand in ascending order; used in SET2 while translating, they may
only be used in pairs to specify case conversion. -s uses the last
specified SET, and occurs after translation or deletion.
将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:
cat testfile |tr a-z A-Z
示例将ab转化为AB
# echo abc |tr ab AB
ABc
本文讲解了linux创建文件命令:dd。使用dd这个linux命令可以创建一定大小文件。
linux创建文件命令:dd命令
把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换。语法:
$ dd --help
用法:dd [操作数] ...
或:dd 选项
Copy a file, converting and formatting according to the operands.
bs=BYTES read and write up to BYTES bytes at a time
cbs=BYTES convert BYTES bytes at a time
conv=CONVS convert the file as per the comma separated symbol list
count=N copy only N input blocks
ibs=BYTES read up to BYTES bytes at a time (default: 512)
if=FILE read from FILE instead of stdin
iflag=FLAGS read as per the comma separated symbol list
obs=BYTES write BYTES bytes at a time (default: 512)
of=FILE write to FILE instead of stdout
oflag=FLAGS write as per the comma separated symbol list
seek=N skip N obs-sized blocks at start of output
skip=N skip N ibs-sized blocks at start of input
status=LEVEL The LEVEL of information to print to stderr;
'none' suppresses everything but error messages,
'noxfer' suppresses the final transfer statistics,
'progress' shows periodic transfer statistics
N and BYTES may be followed by the following multiplicative suffixes:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M,
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
Each CONV symbol may be:
ascii from EBCDIC to ASCII
ebcdic from ASCII to EBCDIC
ibm from ASCII to alternate EBCDIC
block pad newline-terminated records with spaces to cbs-size
unblock replace trailing spaces in cbs-size records with newline
lcase change upper case to lower case
ucase change lower case to upper case
sparse try to seek rather than write the output for NUL input blocks
swab swap every pair of input bytes
sync pad every input block with NULs to ibs-size; when used
with block or unblock, pad with spaces rather than NULs
excl fail if the output file already exists
nocreat do not create the output file
notrunc 不截断输出文件
noerror 读取数据发生错误后仍然继续
fdatasync 结束前将输出文件数据写入磁盘
fsync 类似上面,但是元数据也一同写入
FLAG 符号可以是:
append 追加模式(仅对输出有意义;隐含了conv=notrunc)
direct 使用直接I/O 存取模式
directory 除非是目录,否则 directory 失败
dsync 使用同步I/O 存取模式
sync 与上者类似,但同时也对元数据生效
fullblock 为输入积累完整块(仅iflag)
nonblock 使用无阻塞I/O 存取模式
nocache Request to drop cache. See also oflag=sync
noctty 不根据文件指派控制终端
nofollow 不跟随链接文件
binary 使用二进制I/O 存取模式
text 使用文本I/O 存取模式
count_bytes treat 'count=N' as a byte count (iflag only)
skip_bytes treat 'skip=N' as a byte count (iflag only)
seek_bytes treat 'seek=N' as a byte count (oflag only)
Sending a USR1 signal to a running 'dd' process makes it
print I/O statistics to standard error and then resume copying.
Options are:
--help 显示此帮助信息并退出
--version 显示版本信息并退出
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告dd 的翻译错误
Full documentation at: <http://www.gnu.org/software/coreutils/dd>
or available locally via: info '(coreutils) dd invocation'
实例:
创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1
以上是linux创建文件命令:dd的用法。
shell脚本中使用ls和awk命令组合获取文件大小,改进版本适用cygwin。
以较长格式列出文件信息显示如下:
$ ls -l pad10*
-rwxrwx---+ 1 Administrators Domain Users 1024 8月 18 15:58 pad1024.bin
-rwxrwx---+ 1 Administrators Domain Users 10240 8月 17 22:17 pad10240.bin
-rwxrwx---+ 1 Administrators Domain Users 102400 8月 18 15:35 pad102400.bin
隐藏用户组之后显示如下
$ ls -lG pad10*
-rwxrwx---+ 1 Administrators 1024 8月 18 15:58 pad1024.bin
-rwxrwx---+ 1 Administrators 10240 8月 17 22:17 pad10240.bin
-rwxrwx---+ 1 Administrators 102400 8月 18 15:35 pad102400.bin
因用户组可能是一个字符串,也可能是两个字符串,隐藏用户组具有更强的适用性。
在以上基础上,获取文件大小具有更高的实用性。不受可能带空格的用户组名称影响。
在较长格式命令下获取文件大小
$ ls -l pad10* | awk '{print $6}'
1024
10240
102400
隐藏用户组后,获取文件大小
$ ls -lG pad10* | awk '{print $4}'
1024
10240
102400
脚本语言有很多种,比如bat脚本、shell-bash脚本、shell-dash脚本、python脚本、perl脚本。
这些脚本的语法有相似性,但又有差异。总结其中的差异,以进行快速工具开发。
脚本类型 | bat脚本 | shell脚本 | python脚本 | perl脚本 |
执行环境 | window | |||
打印语句 | echo 123456 | |||
参数获取 | set testpara1=%1% | |||
变量赋值 | set vartest=123456 | |||
if判断语句 |
if vartest == 1 ( ) |
|||
循环语句 | ||||
退出语句 | @exit /b 100 | |||
外部调用及返回值 |
if %errorlevel% == 0 ( echo invoke return ok ) |
|||
注释语句 | ||||
函数调用 | ||||
因为MBR分区有大小限制2.1T,所以我们采用GPT分区格式。
在大于2T硬盘上安装系统centos 步骤
1、进入第二个控制台(选语言界面)
2、按ctrl+alt+f2 进入shell环境中
3、运行:/usr/sbin/parted -s /dev/sda mklabel gpt
4、使用fdisk -l 可以查看更改前后的差别
5、按ctrl+alt+f6返回安装界面
6、继续安装系统
ps:如果磁盘大于12T,其中一个大分区大于11T,这个分区使用ext4格式将报错,需要改成使用xfs格式。
grep 后面带上-A -B -C 参数可以多显示几行内容
grep -A 5 可以显示匹配内容以及后面的5行内容
grep -B 5 可以显示匹配内容以及前面的5行内容
grep -C 5 可以显示匹配内容以及前后面的5行内容
这个在某些时候是非常有用的。
比如在sg_ses中只查看电压相关信息
sg_ses /dev/sgX -p 0x02 | grep -B 5 Voltage
使用以下语句报错,通过修改json文件的单引号为双引号解决
#!/usr/bin/python
import json
tfile=open('2.json','r')
jinfo=json.load(tfile)
print(jinfo)
执行报错
Traceback (most recent call last):
File "./gerritreview.py", line 24, in <module>
jinfo=json.load(tfile)
File "/usr/lib/python2.7/json/__init__.py", line 290, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
将json文件内容从单引号修改为双引号解决
"{'age':'12','dtest':'13'}"
修改为
{"age":"12","dtest":"13"}