zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Shell_第一章_( alias、快捷键、bg,screen、重定向2>&1cat)

ampshell重定向 快捷键 第一章 Alias Screen BG
2023-09-11 14:21:27 时间

一、别名 alias

1、查看Linux 别名列表

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias perlll='eval `perl -Mlocal::lib`'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]#

2、临时设置别名

1、格式:alias 别名=‘设置的原数据’   
2、其中可以使用单引号,或者使用双引号,效果一样。
3、临时设置别名退出当前终端(shell)或者重启Linux,设置的别名消失
4、alias 别名命令,他的本质就是解决复杂的命令组合成一个命令,所以原数据中,如果带有命令,保留命令功能。

比如:设置tt = 你好  设置lt= ls -a

[root@localhost ~]# alias tt='echo nihao'
[root@localhost ~]# tt
nihao
[root@localhost ~]# alias lt='ls -a'
[root@localhost ~]# lt
.        .cshrc      jiankong.sh       .ssh

3、取消临时别名

比如:取消 tt 

[root@localhost ~]# tt
nihao
[root@localhost ~]# unalias tt
[root@localhost ~]# tt
bash: tt: command not found...
[root@localhost ~]#

 二、常用快捷键

(1)Tab补充命令
          不用输入完整的命令,输入命令前几个字母后Tab键,会自动补全命令提示。
(2)移动光标命令
          Ctrl+A:在命令行输入命令后,想把光标移动到开头
          Ctrl+E:在命令行输入命令后,想把光标移动到结尾
(3)剪切字符
          Ctrl+K:在命令行输入命令后,把当前光标位置到行尾的字符进行剪切
          Ctrl+U:在命令行输入命令后,把当前光标位置到行首的字符进行剪切
          Ctrl+W:执行向前删除,直到前一个字符是空格
          Ctrl+Y:将剪切的字符进行粘贴
(4)中断正在运行的命令行
          Ctrl+C
(5)退出当前Xshell,退出mysql 命令行界面等
          Ctrl+D   
(6)搜索命令行使用过的历史命令记录
         Ctrl+R:按快捷键后,出现(reverse-i-search)`': 在里面输入之前执行的命令的一部分,就会自动检索最近执行的相匹配命令,如果不符合,在继续按Ctrl+R,往上继续检索,直到找到按键盘的←→,命令行定格检索命令。期间如果还想追加查询,可直接继续输入命令,后ctrl+R
(7)清屏命令
         Ctrl+L:等价于命令行执行clean

(8)暂停命令
         Ctrl+Z:比如yum docker,在执行途中如果按ctrl+Z会被暂停,如果想继续输入bg继续

[root@localhost ~]# yum install -y docker
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker.x86_64.2.1.13.1-208.git7d71120.el7_9 将被 安装
--> 正在处理依赖关系 docker-common = 2:1.13.1-208.git7d71120.el7_9,它被软件包 2:docker-1.13.1-208.git7d71120.el7_9.x86_64 需要
^Z
[1]+  已停止               yum install -y docker
[root@localhost ~]# bg
[1]+ yum install -y docker &
[root@localhost ~]# --> 正在处理依赖关系 docker-client = 2:1.13.1-208.git7d71120.el7_9,它被软件包 2:docker-1.13.1-208.git7d71120.el7_9.x86_64 需要
--> 正在处理依赖关系 subscription-manager-rhsm-certificates,它被软件包 2:docker-1.13.1-208.git7d71120.el7_9.x86_64 需要
--> 正在检查事务
---> 软件包 docker-client.x86_64.2.1.13.1-208.git7d71120.el7_9 将被 安装
---> 软件包 docker-common.x86_64.2.1.13.1-208.git7d71120.el7_9 将被 安装

但是如果后期输入其他命令,导致bg不能继承ctrl+Z暂停任务,或者继续执行暂停的相同的命令,比如执行yum install -y rpm 就会提示已经被锁定,因为上一个任务没完成,需要手动删除上一个任务的配置文件

[root@localhost ~]# yum install -y docker
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
[1]+  已停止               yum install -y docker

[root@localhost ~]# yum install -y rpm
已加载插件:fastestmirror
/var/run/yum.pid 已被锁定,PID 为 1577 的另一个程序正在运行。
Another app is currently holding the yum lock; waiting for it to exit...
  另一个应用程序是:yum
    内存: 72 M RSS (402 MB VSZ)
    已启动: Tue Jan 11 19:12:47 2022 - 00:07之前
    状态  :跟踪/停止,进程ID:1577

解决方案:
[root@localhost ~]# rm -f /var/run/yum.pid
(9)锁屏,只针对图形界面有用
     Ctrl+S
(10)解除锁屏,只针对图形界面有用
     Ctrl+Q
(11) !! 执行上一条命令
(12) !$ 获取上一条命令的参数
     [root@localhost ~]# touch /root/test1
     [root@localhost ~]# ll !$
     ll /root/test1
     -rw-r--r-- 1 root root 0 1月  11 19:23 /root/test1

三、前后台作业控制bg,fg,jobs,screen

screen使用教程:

实现:screen能够开一个类似独立的xshell,在这里面操作如果不慎退出此xshell,里面执行的命令不会丢失,而且可以重新在进入此xshell

1、创建一个screen窗口,比如叫rpm
[root@localhost ~]# screen -S lnmp

2、输入你要执行的命令
[root@localhost ~]# yum install rpm
已加载插件:fastestmirror
.......
升级  1 软件包 (+3 依赖软件包)
Is this ok [y/d/N]: 

3、这时候直接关闭当前shell,然后在启动一个shell,通过命令能查看到screen rpm
[root@localhost ~]# screen -list
There is a screen on:
        1867.rpm       (Attached)
1 Socket in /var/run/screen/S-root.

4、进入screen rpm
[root@localhost ~]# screen -r 1867

四、输入输出重定向

重定向可以修改、创建、清空一个文件

1、>  >>  1>  2>  2>>  &>   1>&2   2>&1  

>  代表输出重定向,把左侧的文件内容输出重定向给右侧文件,注右侧文件原有的数据会被覆盖
>> 代表输出重定向,把左侧的文件内容输出追加重定向给右侧文件,注是在右侧文件末尾最追加内容
1> 跟>是一个东西(标准输出), >就是1> ,只不过省去了1
2> 也是代表输出,只不过代表标准错误输出,在Linxu中执行命令,没有报错就是正常,报错的内容通过2> 指定输出到一个文件或者其他位置
2>> 错误输出,追加重定向,在右侧文件末尾追加内容
&>  标准输出和标准错误输出都重定向到文件。标准输出和标准错误输出代表了所有。
1>&2  1代表正确信息,把正确信息的返回值传递给,2错误输出通道, &2表示2输出通道
2>&1  2代表错误信息,把错误信息的返回值传递给,1正确输出通道, &1表示1输出通道  

注:>只把命令正常的结果输出,所以报错的部分会而不再前端显示 
注:2>只把报错结果输出 ,所以正常的部分会在前端显示 
注:2>> 不管怎么样,不再前端显示
注:1>&2和2>&1中,& 是一个描述符,如果1或2前不加&,会被当成一个普通文件

实验:>

[root@localhost test]# yum install -y lnmp >1.txt
Error: Nothing to do

[root@localhost test]# cat 1.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.

说明>只能接受能运行的命令的正常运行的结果,报错(Error: Nothing to do)不会写入

实验:2> 

[root@localhost test]# yum install -y lnmp 2>2.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.

[root@localhost test]# cat 2.txt
Error: Nothing to do

说明2>只能接收报错的提示,不能接收命令正常运行的结果

实验:&>

[root@localhost test]# yum install -y lnmp &>3.txt

[root@localhost test]# cat 3.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.
Error: Nothing to do

说明&>能接所有产生的结果

 实验:1>  2>  

[root@localhost test]# yum install -y lnmp 1>4.txt 2>5.txt

[root@localhost test]# cat 4.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.

[root@localhost test]# cat 5.txt
Error: Nothing to do

将错误输出给错误的,将正常的命令输出的结果重定向给另一个文件,而不再前端显示 

实验:1>&2   2>&1 

1、[root@localhost test]# yum install -y lnmp >6.txt 2>&1

[root@localhost test]# cat 6.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.
Error: Nothing to do

讲解:执行命令后,有正常的输出、也有错误的报错,通过>6.txt,代表你把正确的信息传递给我,这时候程序还并未执行,在继续往后执行命令,发现2>&1,告诉程序你把2错误的信息,也输出到&1正确的输出管道。所以就把所有的信息传递给6.txt


2、[root@localhost test]# yum install -y lnmp >7.txt 1>&2
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.
Error: Nothing to do

[root@localhost test]# cat 7.txt

讲解:讲解:执行命令后,有正常的输出、也有错误的报错,通过>7.txt,代表你把正确的信息传递给我,这时候程序还并未执行,在继续往后执行命令,发现1>&2,告诉程序你把1正确的信息,也输出到&2错误的输出管道。导致原本正确的应该传递给7.txt,直接传递给&2,导致输出到界面上了

3、[root@localhost test]# yum install -y lnmp 2>8.txt 1>&2

[root@localhost test]# cat 8.txt
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package lnmp available.
Error: Nothing to do

讲解:讲解:执行命令后,有正常的输出、也有错误的报错,通过2>8.txt,代表你把错误的信息传递给我,这时候程序还并未执行,在继续往后执行命令,发现1>&2,告诉程序你把1正确的信息,也输出到&2错误的输出管道。

2、cat 重定向

  1、cat 命令无参数时,从标准输入(键盘)读取内容

[root@localhost ~]# cat    
123
123
[root@localhost ~]#

cat 回车后,输入123,返回123

  2、cat 后接参数,代表cat查看此参数,比如cat 1.txt,.txt是作为cat命令的参数。
  3、cat < 1.txt :加了输入< 重定向,从1.txt 读内容,跟cat 1.txt 结果一样

3、cat EOF

通过cat 创建文件,并写入内容。

[root@localhost ~]# cat >3.txt <<EOF
> NIHAO
> SHIJI
> EOF
[root@localhost ~]# cat 3.txt 
NIHAO
SHIJI
[root@localhost ~]# 

cat << EOF 内容 EOF : 通过此形式,把内容追加给cat。注(首先必须要说明的是EOF在这里没有特殊的含义,你可以使用FOE或OOO等(当然也不限制在三个字符或大写字符))
cat >3.txt:由于cat 已经有了内容,所以把cat的内容,重定向给3.txt