文件输入输出的管理
程序员文章站
2024-03-23 22:02:10
...
1.输入输出的定义
输入:
就是我们的键盘,鼠标和我们用这些硬件在系统录入的字符
输出:
就是系统接收到我们想要实现的功能字符后,经过进程的处理产生字符
输入会有两种出现:
编号1为正确输出
编号2为错误输出
默认这两种输出都会被系统定向到字符设备中
2.如何管理输入
(1)非交互式单行录入
echo + 录入内容 + >> 文件名
注:不用vim便可直接在文件中写东西
[root@localhost ~]# echo westos >> file1
[root@localhost ~]# cat file1
westos
(2)交互式多行录入
##以修改当前用户密码为例
#不能自动运行
vim C_pass.sh
#########
passwd
sh C_pass.sh
[root@foundation66 Desktop]# vim C_pass.sh
[root@foundation66 Desktop]# cat C_pass.sh
passwd
[root@foundation66 Desktop]# sh C_pass.sh
Changing password for user root.
New password: ##写入新密码
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
(3)非交互式多行录入
方法1:
##以修改当前用户密码为例
#可以自动运行避免交互
vim C_pass.sh
#########
passwd <<END
lee
lee
END
sh C_pass.sh
[aaa@qq.com Desktop]# vim C_pass.sh
##密码需要写两次 第二次是确认密码
[aaa@qq.com Desktop]# cat C_pass.sh
passwd <<END
lee
lee
END
[aaa@qq.com Desktop]# sh C_pass.sh
Changing password for user root.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.
方法2:
cat > 文件名 << EFO
录入内容
EFO
[root@foundation66 Desktop]# cat > file << EFO
> westos
> linux
> my love
> EFO
[root@foundation66 Desktop]# cat file
westos
linux
my love
3.如何管理输出
(1)重定向:
> #重定向正确输出
2> #重定向错误输出
&> #重定向所有输出
2>& #把错误输出的编号由2转换为1
请用student用户做以下实验:
find /etc/ -name passwd > file.out
find /etc/ -name passwd 2> file.out
find /etc/ -name passwd &> file.all
find /etc/ -name passwd > file 2>&1
##注意:重定向是会覆盖原文件内容
[kiosk@foundation66 ~]$ vim westos
[kiosk@foundation66 ~]$ cat westos
hello linux!
[kiosk@foundation66 ~]$ find /etc/ -name passwd > westos
[kiosk@foundation66 ~]$ cat westos
/etc/passwd
/etc/pam.d/passwd
(2)追加:
#保持原文件内容不变的情况下把输出追加到文件之后
>> ##追加正确输出
2>> ##追加错误输出
&>> ##追加所有输出
[kiosk@foundation66 ~]$ find /etc/ -name passwd >> westos
[kiosk@foundation66 ~]$ find /etc -name passwd 2>> westos
[kiosk@foundation66 ~]$ cat westos
[kiosk@foundation66 ~]$ find /etc -name passwd &>> files
[kiosk@foundation66 ~]$ cat files
##重定向与追加二者的区别:
追加可以在保持原文件内容不变的情况下把输出追加到文件之后而重定向会覆盖原文件的内容
(3)管道:
#把输出变成下一个程序的输入
#管道是用来组合多条命令的使用的
[kiosk@foundation66 ~]$ ls /bin | wc -l
2902
注意:通过管道后输出会变成输入,那么是无法保存在文件中的
(4)tee命令 ##复制输出到指定位置
[kiosk@foundation66 ~]$ ls /bin | tee file | wc -l
2902
[kiosk@foundation66 ~]$ cat file
练习1
1.显示当前时间 , 显示格式为 hh:mm:ss, 并保存到文件 time.txt文件中
[student@localhost ~]$ date --help
Usage: date [OPTION]... [+FORMAT]
..............
FORMAT controls the output. Interpreted sequences are:
..............
%H hour (00..23)
%M minute (00..59)
%S second (00..60)
[student@localhost ~]$ date +%H:%M:%S
08:09:29
[student@localhost ~]$ date +%H:%M:%S | tee time.txt
08:11:52
[student@localhost ~]$ cat time.txt
08:11:52
2.显示 /etc/passwd 文件的第 16-18 行内容
[student@localhost ~]$ cat --help
Usage: cat [OPTION]... [FILE]...
-b, --number-nonblank number nonempty output lines, overrides -n
[student@localhost ~]$ cat -b /etc/passwd
[student@localhost ~]$ cat -b /etc/passwd | head -n 18 | tail -n 3
16 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
17 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
18 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
3.显示 /bin 中文件包含大写字母的文件 , 保存到bin_westos_file.txt 文件中,并统计个数显示到屏幕
[aaa@qq.com ~]$ ls /bin/*[[:upper:]]*
/bin/amuFormat.sh /bin/Mail /bin/X /bin/Xorg /bin/Xvnc
[aaa@qq.com ~]$ ls /bin/*[[:upper:]]* | tee bin_westos_file.txt | wc -w
5
4.在 student 用户下查找 /etc 下 passwd 文件,屏蔽错误输出
## /dev/null是系统垃圾箱,我们可以将没用的东西放进其中。
[student@localhost ~]$ find /etc/ -name passwd 2> /dev/null
/etc/passwd
/etc/pam.d/passwd
5.在 student 用户下查找 /etc 下 passwd 文件,正确输出保存到 /tmp/westos.out错误输出保存到 /tmp/westos.err
##两个重定向中间无需添加任何连接字符
[aaa@qq.com ~]$ find /etc/ -name passwd > /tmp/westos.out 2> /tmp/westos.err[aaa@qq.com ~]$ cat /tmp/westos.out
/etc/passwd
/etc/pam.d/passwd
[aaa@qq.com ~]$ cat /tmp/westos.err
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/selinux/targeted/modules/active’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
6.在student用户下查找 /etc下passwd文件,显示命令输出并保存输出到/tmp/westos.all中
[student@localhost ~]$ find /etc/ -name passwd 2>&1 | tee /tmp/westos.all
[student@localhost ~]$ cat /tmp/westos.all