shell中>/dev/null 2>&1是什么鬼?

2016-11-8 杜世伟 Linux

背景
我们经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段命令背后的“玄机”。

shell重定向介绍
就像我们平时写的程序一样,一段程序会处理外部的输入,然后将运算结果输出到指定的位置。在交互式的程序中,输入来自用户的键盘和鼠标,结果输出到用户的屏幕,甚至播放设备中。而对于某些后台运行的程序,输入可能来自于外部的一些文件,运算的结果通常又写到其他的文件中。而且程序在运行的过程中,会有一些关键性的信息,比如异常堆栈,外部接口调用情况等,这些都会统统写到日志文件里。

shell脚本也一样,但是我们一般在使用shell命令的时候,更多地还是通过键盘输入,然后在屏幕上查看命令的执行结果。如果某些情况下,我们需要将shell命令的执行结果存储到文件中,那么我们就需要使用输入输出的重定向功能。

文件描述符
当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们使用:

阅读全文>>

标签: linux shell dev

评论(0) 浏览(9754)

Linux下9 个使用前必须再三小心的命令

2016-10-14 杜世伟 Linux

Linux Shell/terminal 命令非常强大,即使一个简单的命令就可能导致文件夹、文件或者路径文件夹等被删除。

在一些情况下,Linux 甚至不会询问你而直接执行命令,导致你丢失各种数据信息。

一般来说在 Web 上推荐新的 Linux 用户执行这些命令,当然,也有人哪些写过这代码的人不这么想,因为这玩意你一写下去就不是玩笑了。

这里我收集了一些对系统有危害的 Linux 代码,帮助你避免他们。请记住:这些代码非常危险,甚至可以经过修改,变得更加有危害性。

还有一些事情需要注意:一些命令只在 Ubuntu 中有 sudo 前缀时是有危害的。其他发行版本的 Linux,则是在作为根目录命令时会有危害。



1. Linux Fork Bomb Command

: (){ :: & };: 以 Fork Bomb 闻名,是一个拒绝服务攻击的 Linux 系统。: (){ :: & };: 是一个 bash 函数。只要被执行,他会不断重复,直到系统被冻结。

你只能重启系统解决这个问题。所以当你在 Linux 界面执行这个命令时一定要注意。

阅读全文>>

标签: mv tar shell linux.rm fork

评论(0) 浏览(6004)

linux 内存清理/释放命令

2016-10-11 杜世伟 Linux

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。

Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存

知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

阅读全文>>

标签: linux cache Buffer

评论(0) 浏览(1871)

linux中快速清空文件内容的几种方法

2016-5-26 杜世伟 Linux

linux中快速清空文件内容的几种方法

: > filename 

> filename 

echo "" > filename 

echo > filename 

cat /dev/null > filename

cp /dev/null >filename

标签: linux cat cp

评论(0) 浏览(16818)

sed命令详解

2016-4-4 杜世伟 Linux

1)简介
sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
2)命令详解

阅读全文>>

标签: linux sed

评论(0) 浏览(14460)

Linux运维人员必会开源运维工具体系

2016-3-9 杜世伟 Linux

Linux运维人员必会开源运维工具体系

说明:不同的技术人员,在不同的阶段确定知识边界非常重要,否则,虽然是千里马,但是不知道终点在哪,最终累死也达不到目标。

新手必会用深黄色标记,老鸟必会深黄色+浅蓝色标记

==============================================

操作系统:Centos,Ubuntu,Redhat,suse,Freebsd

网站服务:nginx,apache,lighttpd,php,tomcat,resin
数据   库:MySQL,MariaDB,PostgreSQL

阅读全文>>

标签: linux rpm yum shell python go

评论(0) 浏览(7437)

Linux csplit 命令用于分割文件

2016-2-9 杜世伟 Linux

Linux csplit命令用于分割文件。
将文件依照指定的范本样式予以切割后,分别保存成名称为xx00,xx01,xx02...的文件。若给予的文件名称为"-",则csplit指令会从标准输入设备读取数据。
语法
csplit [-kqsz][-b<输出格式>][-f<输出字首字符串>]
[-n<输出文件名位数>][--help][--version][文件][范本样式...] 
csplit(选项)(参数)
参数:
-b<输出格式>或--suffix-format=<输出格式> 预设的输出格式其文件名称为xx00,xx01...等,您可以通过改变<输出格式>来改变输出的文件名。
-f<输出字首字符串>或--prefix=<输出字首字符串> 预设的输出字首字符串其文件名为xx00,xx01...等,如果你指定输出字首字符串为"hello",则输出的文件名称会变成hello00,hello01...等。
-k或--keep-files 保留文件,就算发生错误或中断执行,也不能删除已经输出保存的文件。
-n<输出文件名位数>或--digits=<输出文件名位数> 预设的输出文件名位数其文件名称为xx00,xx01...等,如果你指定输出文件名位数为"3",则输出的文件名称会变成xx000,xx001...等。
-q或-s或--quiet或--silent 不显示指令执行过程。
-z或--elide-empty-files 删除长度为0 Byte文件。

阅读全文>>

标签: linux cat csplit

评论(0) 浏览(3918)

Linux du命令查看文件夹大小并按降序排列

2016-2-3 杜世伟 Linux

1. df -lh

2. du -s /usr/* | sort -rn

这是按字节排序

3. du -sh /usr/* | sort -rn

这是按兆(M)来排序

4.选出排在前面的10个

du -s /usr/* | sort -rn | head

5.选出排在后面的10个

du -s /usr/* | sort -rn | tail
du -h –-max-depth=0 user
du -sh –-max-depth=2 | more

总结du常用命令

阅读全文>>

标签: linux du

评论(0) 浏览(14923)

linux ps 详解

2016-2-1 杜世伟 Linux

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了.
注意:ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

阅读全文>>

标签: linux ps

评论(0) 浏览(16751)

Linux程序编译问题cc1: warnings being treated as errors

2016-1-29 杜世伟 Linux

AM_CFLAGS = -Wall -g $(MATCHBOX_PANEL_CFLAGS) \
        -I$(top_srcdir) -I$(top_builddir) -Werror 

把上面的 -Werror去掉,不把warnning当作error处理

阅读全文>>

标签: linux warnings

评论(0) 浏览(4544)

Powered by emlog 沪ICP备2023034538号-1