看完就懂 Linux shell中2>&1的含义

VSole2021-10-11 06:38:14

11和2在Linux中代表什么

在Linux系统中0 1 2是一个文件描述符

从上表看的出来,我们平时使用的

echo "hello" > t.log 

其实也可以写成

echo "hello" 1> t.log

2关于2>&1的含义

关于输入/输出重定向本文就不细说了

  • 含义:将标准错误输出重定向到标准输出
  • 符号>&是一个整体,不可分开,分开后就不是上述含义了。
  • 比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?
  • 如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了
  • 写成2&>1也是不可以的

3为什么2>&1要放在后面

考虑如下一条shell命令

nohup java -jar app.jar >log 2>&1 &

(最后一个&表示把条命令放到后台执行,不是本文重点,不懂的可以自行Google)

为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中?

我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

  1. 本来1----->屏幕 (1指向屏幕)
  2. 执行>log后, 1----->log (1指向log)
  3. 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

再来分析下

nohup java -jar app.jar 2>&1 >log &
  1. 本来1----->屏幕 (1指向屏幕)
  2. 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
  3. 执行>log后, 1----->log (1指向log,2还是指向屏幕)

所以这就不是我们想要的结果。简单做个试验测试下上面的想法:

public class Htest {
    public static void main(String[] args) {
        System.out.println("out1");
        System.err.println("error1");
    }
}

javac编译后运行下面指令:

java Htest 2>&1 > log

你会在终端上看到只输出了"error1",log文件中则只有"out1"

4>log 2>&1太麻烦,能简写吗?

有以下两种简写方式

&>log
>&log

比如上面小节中的写法就可以简写为:

nohup java -jar app.jar &>log &

上面两种方式都和">log 2>&1"一个语义。

那么 上面两种方式中&>和>&有区别吗?

语义上是没有任何区别的,但是第一种方式是最佳选择,一般使用第一种。

linux系统log
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,安全厂商发现一个最新的后门程序正在网络上传播,企图感染尚未修补Log4j漏洞的Linux装置。 自去年被安全研究人员揭露后,Log4j漏洞已经被Elknot、Gafgyt、Mirai、Tsusnami/Muhstik等各种恶意程序用来发动攻击。今年2月,安全厂商的诱捕系统又拦截到利用Log4j漏洞传播的恶意ELF文件。基于其使用的文件名、XOR加密算法和20 字节的 RC4 算法密钥长
本文章盘点了 Linux 运维必备 150 个命令,请配合下面的网站使用。定位你需要使用的命令,然后去这个网站查询详细用法即可。 地址:wangchujiang.com/linux-command/
内网渗透合集(一)
2023-01-28 09:31:07
dmesg | grep Linuxls /boot | grep vmlinuz正在运行的服务ps auxps -eftopcat /etc/service哪些服务具有root权限ps aux | grep rootps -ef | grep root安装了哪些程序,版本,以及正在运行的ls -alh /usr/bin/ls -alh /sbin/dpkg -lrpm -qals -alh /var/cache/apt/archivesOls -alh /var/cache/yum/服务的配置文件cat /etc/syslog.conf?cat /etc/apache2/apache2.confcat /etc/my.confcat /etc/httpd/conf/httpd.confcat /opt/lampp/etc/httpd.confls -aRl /etc/ | awk '$1 ~ /^.*r.*/工作计划crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root网络配置cat /etc/resolv.confcat /etc/sysconfig/networkcat /etc/networksiptables -Lhostnamednsdomainname其他用户主机与系统的通信?
如果手工测试无果后再用代理手法扫描网站,必要的时候设置二级代理。什么站能扫什么站不能扫,心里一定要有点 b 数!浅蓝的渗透测试导图以及小工具这里有一个更加详细的导图,可以做一个大致的方向参考,跟着方向逐一测试, 期间也可以巩固基础。
docker run -it -d -p 13443:3443 -p 8834:8834 leishianquan/awvs-nessus:v1. 如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含,远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等验证码与邮箱以及token的返回泄露,以及后台为校验从而可删除的参数。从某个成功请求中捕获数据包观察cookie或者token是否存在规律或加密。token的key参数解密构建获取真实user密钥,可拼接、规律、时间戳……winodws桌面:TeamViewerQS单文件windows下载文件;certutil -urlcache -split -f?
当企业发生网络安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时还需进一步查找入侵来源,还原入侵事故过程,给出解决方案与防范措施,为企业挽回或减少经济损失。 常见的网络安全事件:
secure 是应急中最常用的文件,主要记录系统存取数据的文件,如 POP3、ssh、telnet、ftp 等相关记录,从日志中可看出系统服务是否遭受到安全威胁,从如下日志中可看到 SSH 服务一直在被破解。lastlog 命令,用于显示系统中所有用户最近一次登录信息。可以使用 lastlog 命令检查某特定用户上次登录的时间,并格式化输出上次登录日志 /var/log/lastlog 的内容。
Linux系统基线检查
2023-03-21 15:55:16
1查询系统信息1. Linux 查看内核版本(I级)uname -acat /proc/version. 检查并修改如下内容:PASS_MAX_DAYS 90 #一个密码可使用的最大天数PASS_MIN_DAYS 0 #两次密码修改之间最小的间隔天数PASS_MIN_LEN 8 #密码最小长度PASS_WARN_AGE 7 #密码过期前给出警告的天数。daytime 服务:使用TCP 协议的 Daytime 守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能。rlogin服务的认证体系相当简单而易受攻击,攻击者可以通过该服务远程暴力穷举猜测用户名、口令,也可以监听其它授权用户的通信过程以获取口令明文。
拿到一台 linux 主机普通权限之后,如何获取更高的 root 权限?0x01 查看操作系统信息,内核版本等查看操作系统类型:cat /etc/issue?ls /boot | grep vmlinuz-可以看到当前系统是 64 位。
VSole
网络安全专家