Linux下如何用grep命令只檢視配置檔案中未被註釋的有效配置行

linux.cn發表於2016-01-30

大多數的Linux和類Unix系統的配置檔案中都有許多的註釋行,但是有時候我只想看其中的有效配置行。那我怎麼才能只看到quid.conf或httpd.conf這樣的配置檔案中的非註釋命令列呢?怎麼去掉這些註釋或者空行呢?

我們可以使用 UNIX/BSD/OS X/Linux 這些作業系統自身提供的 grep,sed,awk,perl或者其他文字處理工具來檢視配置檔案中的有效配置命令列。

grep 命令系列:如何只檢視配置檔案中未被註釋的有效配置行

grep 命令示例——去掉註釋

可以按照如下示例使用grep命令:

$ grep -v "^#" /path/to/config/file
$ grep -v "^#" /etc/apache2/apache2.conf

示例輸出:

ServerRoot "/etc/apache2"

LockFile /var/lock/apache2/accept.lock

PidFile ${APACHE_PID_FILE}

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

AccessFileName .htaccess

<Files ~ "^/.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

DefaultType text/plain

HostnameLookups Off

ErrorLog /var/log/apache2/error.log

LogLevel warn

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

Include /etc/apache2/httpd.conf

Include /etc/apache2/ports.conf

LogFormat "%v:%p %h %l %u %t /"%r/" %>s %O /"%{Referer}i/" /"%{User-Agent}i/"" vhost_combined
LogFormat "%h %l %u %t /"%r/" %>s %O /"%{Referer}i/" /"%{User-Agent}i/"" combined
LogFormat "%h %l %u %t /"%r/" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

Include /etc/apache2/conf.d/

Include /etc/apache2/sites-enabled/

想要跳過其中的空行,可以使用 egrep 命令, 示例:

egrep -v "^#|^$" /etc/apache2/apache2.conf
## or pass it to the page such as more or less ##
egrep -v "^#|^$" /etc/apache2/apache2.conf | less

## Bash function ######################################
## or create function or alias and use it as follows ##
## viewconfig /etc/squid/squid.conf                  ##
#######################################################
viewconfig(){
   local f="$1"
   [ -f "$1" ] && command egrep -v "^#|^$" "$f" || echo "Error $1 file not found."
}

示例輸出:

grep 命令系列:如何只檢視配置檔案中未被註釋的有效配置行

圖 01: Unix/Linux Egrep 除去註釋行和空行

理解 grep/egrep 命令列選項

-v 選項,選擇出不匹配的命令列。該選項適用於所有基於posix的系統。正規表示式 ^$ 匹配出所有的非空行, ^# 匹配出所有的不以“#”開頭的非註釋行。

sed 命令示例

可以按照如下示例使用 GNU 上的 sed 命令:

$ sed '/ *#/d; /^ *$/d' /path/to/file
$ sed '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf

GNU 或 BSD 上的 sed 也可以修改配置檔案。下面的命令的作用是原地編輯檔案,並以特定(比如 .bak)備份檔案:

sed -i'.bak.2015.12.27' '/ *#/d; /^ *$/d' /etc/apache2/apache2.conf

更多資訊見參考手冊 – grep(1), sed(1)

相關文章