在Linux命令模式下,可以将查询结果写入文件。大概有两种方式,增量写入和覆盖写入。
增量写入:
#iostat -m >> /tmp/iostat.txt
覆盖写入:
#iostat -m > /tmp/iostat.txt
在Linux命令模式下,可以将查询结果写入文件。大概有两种方式,增量写入和覆盖写入。
增量写入:
#iostat -m >> /tmp/iostat.txt
覆盖写入:
#iostat -m > /tmp/iostat.txt
转载于:https://www.cnblogs.com/zrp2013/p/3229325.html
基础练习:
1.将命令历史写入到root用户家目录的普通文件exercise中。
[root@localhost ~]# history 1 2 2 5 3 3 4 6 5 4 6 history [root@localhost ~]# history > exercise [root@localhost ~]# cat exercise 1 2 2 5 3 3 4 6 5 4 6 history 7 history > exercise [root@localhost ~]#
history : 命令历史
[root@localhost ~]# history | tee exercise 1 2 2 5 3 3 4 6 5 4 6 history 7 history > exercise 8 cat exercise 9 rm -f exercise 10 ll 11 history | tee exercise [root@localhost ~]#
管道符 | : 管道符左边命令的输出作为管道符右边命令的输入。
tee命令 : 在输出到文件的同时输出到屏幕
2.截取当前日期的年月日将其写入文件tim.txt中?[root@localhost ~]# date | cut -d ' ' -f 2,3,6 > time1.txt [root@localhost ~]# cat time1.txt Mar 20 2019 [root@localhost ~]#
————————————
[root@localhost ~]# date +%Y-%m-%d > time2.txt [root@localhost ~]# cat time2.txt 2019-03-20 [root@localhost ~]#
————————————
[root@localhost ~]# date +%y/%m/%d > time3.txt [root@localhost ~]# cat time3.txt 19/03/20 [root@localhost ~]#
3.统计当前系统有多少用户
[root@localhost ~]# wc -l /etc/passwd 44 /etc/passwd [root@localhost ~]#
文本统计:wc
显示文件行数、单词数、字节数和文件名:wc 文件名
统计当前目录下的文件数:wc -l
只显示单词数:wc -w 文件名
只显示字节数:wc -c 文件名
只显示行数:wc -l 文件名
只显示字符数:wc -m 文件名
显示最长的一行的字符数(不包括断行符):wc -L 文件名注:在UTF-8编码格式里面,显示时一个字符占一个字节,一个中文字占用3个字节
4.有一个文件叫lianxi.txt,文件内容为排序过的/etc/passwd内容的第三列和第三列的行数。
[root@localhost ~]# cut -d : -f 3 /etc/passwd | sort -n | tee lianxi.txt | wc -l >> lianxi.txt [root@localhost ~]# cat lianxi.txt 0 1 2 3 4 5 6 7 8 11 12 14 27 29 32 38 42 59 70 72 74 75 81 89 99 107 113 170 171 172 173 989 990 991 992 993 994 995 996 997 998 999 1000 65534 44 [root@localhost ~]#
排序显示(默认根据字符在ASCII码中的升序排序):sort 文件名
按照数值大小排序:sort -n 文件名
排序并去掉重复的:sort -u 文件名
逆序排序:sort -r 文件名进阶练习:
1.在/home下创建普通文件file1,在/下给它创建一个硬链接文件为file1.bak,在root用户的家目录下给file1.bak文件创建一个硬链接为file1.bak.bak,给file1.bak.bak创建一个软链接为f1。
[root@localhost ~]# touch /home/file1 [root@localhost ~]# ln /home/file1 /file1.bak [root@localhost ~]# ln /file1.bak file1.bak.bak [root@localhost ~]# ln -s file1.bak.bak f1 [root@localhost ~]# ll /home total 4 -rw-r--r--. 3 root root 0 Mar 20 23:50 file1 drwx------. 14 redhat redhat 4096 Mar 14 23:22 redhat [root@localhost ~]# ll / total 32 lrwxrwxrwx. 1 root root 7 Mar 6 05:26 bin -> usr/bin dr-xr-xr-x. 3 root root 4096 Mar 14 23:21 boot drwxr-xr-x. 19 root root 3240 Mar 20 23:49 dev drwxr-xr-x. 138 root root 8192 Mar 21 2019 etc -rw-r--r--. 3 root root 0 Mar 20 23:50 file1.bak drwxr-xr-x. 3 root root 31 Mar 20 23:50 home lrwxrwxrwx. 1 root root 7 Mar 6 05:26 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Mar 6 05:26 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 May 25 2015 media drwxr-xr-x. 2 root root 6 May 25 2015 mnt drwxr-xr-x. 3 root root 15 Mar 6 05:33 opt dr-xr-xr-x. 486 root root 0 Mar 21 2019 proc dr-xr-x---. 13 root root 4096 Mar 20 23:51 root drwxr-xr-x. 38 root root 1140 Mar 20 23:49 run lrwxrwxrwx. 1 root root 8 Mar 6 05:26 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 May 25 2015 srv dr-xr-xr-x. 13 root root 0 Mar 21 2019 sys drwxrwxrwt. 25 root root 4096 Mar 20 23:50 tmp drwxr-xr-x. 13 root root 4096 Mar 6 05:26 usr drwxr-xr-x. 20 root root 4096 Mar 21 2019 var [root@localhost ~]# ll total 8 -rw-------. 1 root root 1632 Mar 6 05:37 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 Mar 14 23:23 Desktop drwxr-xr-x. 2 root root 6 Mar 14 23:23 Documents drwxr-xr-x. 2 root root 6 Mar 14 23:23 Downloads lrwxrwxrwx. 1 root root 13 Mar 20 23:51 f1 -> file1.bak.bak -rw-r--r--. 3 root root 0 Mar 20 23:50 file1.bak.bak -rw-------. 1 root root 1725 Mar 5 21:46 initial-setup-ks.cfg drwxr-xr-x. 2 root root 6 Mar 14 23:23 Music drwxr-xr-x. 2 root root 6 Mar 14 23:23 Pictures drwxr-xr-x. 2 root root 6 Mar 14 23:23 Public drwxr-xr-x. 2 root root 6 Mar 14 23:23 Templates drwxr-xr-x. 2 root root 6 Mar 14 23:23 Videos [root@localhost ~]#
创建软链接文件 :ln -s 原文件 链接文件
软链接记录的是它所连接的文件的路径
————————————
创建硬链接文件 : ln 原文件 新文件
硬链接记录的是目标的inode2.找出root用户的家目录下以f开头的文件。
[root@localhost ~]# ls f* f1 file1.bak.bak [root@localhost ~]#
3.写出一个永久生效的命令别名为cha,该命令别名可以显示出以上四个文件的详细属性和inode号
[root@localhost ~]# vim ~/.bashrc alias cha='ll -i /home/file1 /file1.bak /root/file1.bak.bak /root/f1'
ls -i 显示文件索引节点号(inode)一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode
Esc ZZ [root@localhost ~]# source ~/.bashrc [root@localhost ~]# cha 19969981 -rw-r--r--. 3 root root 0 Mar 22 19:16 /file1.bak 19969981 -rw-r--r--. 3 root root 0 Mar 22 19:16 /home/file1 35700377 lrwxrwxrwx. 1 root root 13 Mar 20 23:51 /root/f1 -> file1.bak.bak 19969981 -rw-r--r--. 3 root root 0 Mar 22 19:16 /root/file1.bak.bak [root@localhost ~]#
4.将/etc/passwd的内容添加到file1.bak文件中,保留file1.bak文件中前9行的内容,删除其他行的内容。
[root@localhost ~]# head -9 /etc/passwd >> /file1.bak
head /etc/passwd :默认查看文件前10行
head -9 /etc/passwd :指定查看前9行[root@localhost ~]# cat -n /file1.bak
cat :连接并显示文件内容到标准输出
cat -n 文件名 :显示文件内容并显示行号1 root:x :0:0:root:/root:/bin/bash 2 bin:x :1:1:bin:/bin:/sbin/nologin 3 daemon:x :2:2:daemon:/sbin:/sbin/nologin 4 adm:x :3:4:adm:/var/adm:/sbin/nologin 5 lp:x :4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x :5:0:sync:/sbin:/bin/sync 7 shutdown:x :6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x :7:0:halt:/sbin:/sbin/halt 9 mail:x :8:12:mail:/var/spool/mail:/sbin/nologin [root@localhost ~]#
5.查找出file1.bak的路径。
[root@localhost ~]# find / -name file1.bak /file1.bak [root@localhost ~]#
6.将file1.bak文件的第一列和最后一列输入到文件/root/zuoye。
[root@localhost ~]# cat /file1.bak | cut -d : -f 1,7 >> /root/zuoye [root@localhost ~]# cat /root/zuoye root:/bin/bash bin:/sbin/nologin daemon:/sbin/nologin adm:/sbin/nologin lp:/sbin/nologin sync:/bin/sync shutdown:/sbin/shutdown halt:/sbin/halt mail:/sbin/nologin
cut -d 指定分隔符 -f 指定第几列 被切割文件
-f 1,3第一列和第三列
-f 1-3第一列到第三列
-c 1-4 指定第一到第四个字符7.将file1.bak.bak文件的第一行和最后一行输入到文件/test。
[root@localhost ~]# head -1 /root/file1.bak.bak >> /test && tail -1 /root/file1.bak.bak >> /test [root@localhost ~]# cat /test root:x :0:0:root:/root:/bin/bash mail:x :8:12:mail:/var/spool/mail:/sbin/nologin [root@localhost ~]#
默认查看后10行:tail /etc/passwd
查看后5行:tail -5 /etc/passwd8.有一个文件叫lianxi.txt,文件内容为排序过的file1.bak内容的第三列和第三列的行数。
[root@localhost ~]# cut -d : -f 3 /file1.bak | sort -n | tee lianxi.txt | wc -l >> lianxi.txt [root@localhost ~]# cat lianxi.txt 0 1 2 3 4 5 6 7 8 9 [root@localhost ~]#
在WINDOWS下编写的文本文件,换行符使用\r和\n两个字符表示,而在LINUX下使用\n表示,所以当WINDOWS下的文件上传到LINUX后,每一行会多出一个字符^M(也就是\r)。
将^M字符删除方法不少,这里列举两个:
1)将a.txt里的^M去掉并写入b.txt,则使用如下指令cat a.txt | tr -d "^M" > b.txt
2)使用vi编辑器替换,则如下操作,Esc进入命令模式,输入:%s/^M//g
注意:上述语句中的^M是通过ctrl+V, ctrl+M输入的,特指/r字符。
问题出现:windows底下编写文件直接拷到linux地下,都该文件进行读,写入另一文件具体问题:windows创建的文件是 \n\r结束的, 而linux,mac这种unix类系统是\n结束的。
所以unix的文本到windows会出现换行丢失(ultraedit这种软件可以正确识别); 而反过来就会出现^M的符号了
windows里用ultraedit,选16进制模式(hex mode)可以看到。解决方案: 因为我是测试代码 因此 我在Linux下建了一个文件,进行读写是没问题的正确解决dos2uni进行转换用途说明
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是 0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。常用参数
将DOS格式文本文件转换成Unix格式,最简单的用法就是dos2unix直接跟上文件名。
格式:dos2unix file
如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)
格式:dos2unix file1 file2 file3
格式:dos2unix -o file1 file2 file3
上面在转换时,都会直接在原来的文件上修改,如果想把转换的结果保存在别的文件,而源文件不变,则可以使用-n参数。
格式:dos2unix oldfile newfile
如果要保持文件时间戳不变,加上-k参数。所以上面几条命令都是可以加上-k参数来保持文件时间戳的。
格式:dos2unix -k file
格式:dos2unix -k file1 file2 file3
格式:dos2unix -k -o file1 file2 file3
格式:dos2unix -k -n oldfile newfile
注:unix2dos命令的使用方式与dos2unix命令的类似。使用示例
示例一 DOS格式文本文件在Linux下的表现
现在有一个脚本文件job.sh,是在Linux下用vi编辑的。
[root@jfht ~]# cat job.sh
#!/bin/sh
date >job.txt
现在把它转换成DOS格式文本文件。
[root@jfht ~]# unix2dos job.sh
unix2dos: converting file job.sh to DOS format ...
尝试着运行一下。
[root@jfht ~]# ./job.sh
-bash: ./job.sh: 权限不够
[root@jfht ~]# chmod +x job.sh
[root@jfht ~]# ./job.sh
-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录
DOS格式的脚本文件时无法解释执行的,因为脚本文件的第一行是用来指定解释器的,Linux系统认为解释器是/bin/sh^M,而不是/bin/sh。
我们来通过Linux下的一些命令来看一下DOS格式文件的真面目。
[root@jfht ~]# cat -v job.sh <== cat -v可以看到文件中的非打印字符,而不带-v参数的cat命令不行。
#!/bin/sh^M
^M
date >job.txt^M
^M
[root@jfht ~]# hexdump -C job.sh <== hexdump -C可以看到文件每个字节的十六进制表示。
00000000 23 21 2f 62 69 6e 2f 73 68 0d 0a 0d 0a 64 61 74 |#!/bin/sh....dat|
00000010 65 20 3e 6a 6f 62 2e 74 78 74 0d 0a 0d 0a |e >job.txt....|
0000001e
[root@jfht ~]# vi job.sh <== 使用vi打开时可以看到底下有[dos]的格式提示。有些版本vi显示的是行尾为^M。
#!/bin/sh
date >job.txt
~
~
"job.sh" [dos ] 4L, 30C
现在我们把DOS格式改回Unix格式的,看看效果。
root@jfht ~]# dos2unix job.sh
dos2unix: converting file job.sh to UNIX format ...
[root@jfht ~]# ./job.sh
可以执行了,不再报“-bash: ./job.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录”这个错了。
[root@jfht ~]#示例二 dos2unix -k和dos2unix -n的使用示例
[root@jfht ~]# cat <<EOF >1.txt
> 1
> 2
> 3
> EOF
[root@jfht ~]# file 1.txt
1.txt: ASCII text
[root@jfht ~]# ls -l 1.txt
-rw-r--r-- 1 root root 6 11-14 09:08 1.txt
[root@jfht ~]# date
2010年 11月 14日 星期日 09:28:42 CST
[root@jfht ~]# unix2dos -k 1.txt <== 保持文件时间戳
unix2dos: converting file 1.txt to DOS format ...
[root@jfht ~]# ls -l 1.txt
-rw-r--r-- 1 root root 9 11-14 09:08 1.txt
[root@jfht ~]# dos2unix -n 1.txt 2.txt <== 将1.txt转换到2.txt
dos2unix: converting file 1.txt to file 2.txt in UNIX format ...
[root@jfht ~]# ls -l 1.txt 2.txt
-rw-r--r-- 1 root root 9 11-14 09:08 1.txt
-rw-r--r-- 1 root root 6 11-14 09:30 2.txt
[root@jfht ~]# file 1.txt 2.txt
1.txt: ASCII text, with CRLF line terminators
2.txt: ASCII text
[root@jfht ~]# cat -v 1.txt
1^M
2^M
3^M
[root@jfht ~]# cat -v 2.txt
1
2
3
[root@jfht ~]#