创建/查看/编辑文本文件

创建/查看/编辑文本文件

在这里插入图片描述

将输出重定向到文件和程序

标准 输入/输出/错误

运行的程序需要从某个位置读取输入并将输出写入某位置。从shell提示符运行的命令通常会从键盘读取输入,并将输出发送到其终端窗口。

进程通过使用文件描述符的通道编号获取输出并发送输出。所有进程开始时至少三个文件描述符。标准输入0 从键盘读取输入。标准输出1发送到终端,标准错误2发送至终端。如果需要打开连接至其他文件的单独链接,则可能使用更大文件描述符。
在这里插入图片描述

输出重定向到文件

> file  #重定向stdout覆盖文件
>> file #重定向stdout附加到文件
2 > file #重定向stderr覆盖文件
2> /dev/null #将stderr重定向到/dev/null,从而将其丢弃
>file 2>&1   #重定向stdout和stderr覆盖同一个文件
&>file 

>>file 2>&1   #重定向stdout和stderr附加同一个文件
&>>file 

重定向实例

保存时间戳

[root@servera ~]# date > /tmp/timestamp
[root@servera ~]# cat /tmp/timestamp
Sun Jul 16 06:44:01 EDT 2023

将某日志文件最后10行复制到另一个文件

[root@servera log]# tail -n 10 /var/log/boot.log  > /tmp/last-10-msg
[root@servera log]# cat /tmp/last-10-msg
         Starting Enable periodic update of entitlement certificates....
         Starting Dynamic System Tuning Daemon...
         Starting Network Manager Wait Online...
         Starting Hostname Service...
[  OK  ] Started Enable periodic update of entitlement certificates..
[  OK  ] Started OpenSSH server daemon.
[  OK  ] Started Permit User Sessions.
[  OK  ] Started Command Scheduler.
         Starting Terminate Plymouth Boot Screen...
         Starting Hold until boot process finishes up...

以下命令会生成所悟消息,将错误重定向到文件

[root@servera ~]# cat /etc/notexist 2> /tmp/errors
[root@servera ~]# cat /tmp/errors
cat: /etc/notexist: No such file or directory

构建管道

管道时一个或多个命令的序列,使用|分隔。管道将一个命令的标准输出连接到下一个命令的标准输入。

[root@servera ~]# ls -t /usr/bin | head -n 5 > /tmp/five-last-changed-files
[root@servera ~]# cat /tmp/five-last-changed-files
unversioned-python
lsgpio
lsiio
page_owner_sort
powernow-k8-decode

此管道中head 将ls -t输出内容的前5行并重定向到文件中

当重定向与管道组合时,shell会先设置整个管道,然后重定向输出/输入。如果在管道中使用输出重定向,输出将转至文件,而不是流向管道中下一个命令。


[root@servera ~]# ls / > /tmp/output | less

[root@servera ~]# cat /tmp/output
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

tee命令克服了这个现在,将标准输入复制到标准输出中,还能将标准输出重定向到指定为命令参数的文件。

[root@servera ~]# ls -l | tee /tmp/output |less

如果在管道尾使用tee命令,可以保存命令最初输出并同时输出到终端

[root@servera ~]# ls -t / | head -n 5 | tee /tmp/changed-files
tmp
etc
run
root
boot
[root@servera ~]# cat /tmp/changed-files
tmp
etc
run
root
boot

从shell提示符编辑文本文件

更改shell环境

shell变量对于特定的shell会话是唯一的。如果打开了两个终端,或通过两个独立的登录会话登录同一远程服务器。运行shell,每个shell都有自己的一组变量值。

使用以下语法将值分配给shell变量:

VARIABLENAME=value
[root@servera ~]# COUNT=40
[root@servera ~]# first_name=rkun
[root@servera ~]# file1=/tmp/abc
[root@servera ~]# _ID=RH123

这样的更改仅仅影响在其中运行命令的shell,而不影响其他shell。

可以使用set命令列出当前设置所有shell值

[root@servera ~]# set | head -n 5
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=()

使用变量扩展检索值

使用变量扩展来指代已设置的变量值。为比哪里名称前加入$

[root@servera ~]# echo $COUNT
40

使用环境变量配置程序

shell提供了一个环境,用来在该shell中运行程序。

使用shell中定义的任何变量设置为环境变量,方法使用export命令导出。

[root@servera ~]# EDITOR=vi
[root@servera ~]# export EDITOR

重要的环境变量PATH包含一个含有程序的目录的冒号分隔列表

[root@servera ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

当运行ls等命令,shell会从这些目录找到可执行文件ls的位置

取消变量命令

unset

取消导入但不取消设置

export -n 

猜你喜欢

转载自blog.csdn.net/weixin_51882166/article/details/131762929