web-dev-qa-db-ja.com

fstabエントリを簡単に整列する方法

テキストエディタで/ etc/fstabを編集すると、すべての間隔がずれてしまいます。ファイルを調べてスペースを挿入/削除してすべてを並べることはできますが、より自動化されたソリューションを探しています。理想的には、自分のfstabを挿入してすべてを「きれいに」整列させることができるオンラインのJavaScriptページがあるはずです。次に、最終結果をコピーしてファイルに貼り付けることができます。

これに類似した、またはより良い解決策はありますか?

編集:
デスクトップでLinuxを使用していますが、fstabを編集するためだけにviやemacsの信仰に加わろうとしているのではありません。 Emacsは一部の人にとってはより良い解決策かもしれませんが、他の人にとってはそれはより良い解決策ではありません。

EDIT2:
これは、タブを使用したfstabのスニペットの例です。列が整列していません。

proc    /proc   proc    nodev,noexec,nosuid 0   0
/dev/disk/by-label/Linux    /   ext4    errors=remount-ro   0   1
/dev/disk/by-label/Home /home   ext4    defaults    0   0

スペースで自動的にフォーマットされ、次のようになりたいです。

proc                        /proc   proc    nodev,noexec,nosuid 0   0
/dev/disk/by-label/Linux    /       ext4    errors=remount-ro   0   1
/dev/disk/by-label/Home     /home   ext4    defaults            0   0
6
Sepero

columnコマンドを-tオプションとともに使用して、列を素敵なテーブルに揃えるのが好きです。

column -t /etc/fstab
proc                      /proc  proc  nodev,noexec,nosuid  0  0
/dev/disk/by-label/Linux  /      ext4  errors=remount-ro    0  1
/dev/disk/by-label/Home   /home  ext4  defaults             0  0
6
user13742
#!/bin/bash
# usage: fstabalign [FILE]

# This script will output fstab or other file as column aligned.
# It will not alter blank lines or #hash comments.

if [ -z "$1" ]; then
    FILE=$(cat /etc/fstab)
else
    FILE=$(cat "$1")
fi

# Separate the file contents into aligned and unaligned parts.
OUT_ALIGNED=$(echo "$FILE" | sed 's/^\s*#.*//' | nl -ba | column -t)
OUT_UNALIGNED=$(echo "$FILE" | sed 's/^\s*[^#].*//' $src | nl -ba)

# Remerge aligned and unaligned parts.
while read; do
    line_aligned="$REPLY"
    read -u 3; line_unaligned="$REPLY"
    line_aligned=$(  echo "$line_aligned"   | sed 's/\s*[0-9]*\s*//')
    line_unaligned=$(echo "$line_unaligned" | sed 's/\s*[0-9]*\s*//')
    echo "$line_aligned$line_unaligned"
done < <(echo "$OUT_ALIGNED") 3< <(echo "$OUT_UNALIGNED")
2
Rucent88

私は実際にはアライメントをまったく好まない(1つのスペースだけ)。しかし、それは興味深い問題です。なぜcolumnにこれに対するオプションがないのか、完璧なユースケースのように思えます...

特別なオプションを備えたファイルシステムがいくつかあり、ディスクごとのデバイスパスも非常に長いため、少なくとも私の場合は、fstab全体を整列させると非常に長い行になります。そこで、各セクション(空の行またはコメント行で分割)を個別に配置するスクリプトを作成しました。

./fstab.sh /etc/fstabの使用:

#!/bin/bash

function Push() {
    buffer="$buffer"$'\n'"$1"
}

function pop() {
    if [ "$buffer" != "" ]
    then
        echo "$buffer" | column -t
        buffer=""
    fi
}

buffer=""

while read line
do
    if [ "$line" == "" -o "${line:0:1}" == "#" ]
    then
        pop
        echo "$line"
    else
        Push "$line"
    fi
done < "$1"

pop

前:

# /etc/fstab: static file system information.
# <fs> <mountpoint> <type> <opts> <dump/pass>

# --- SPECIAL ---

none /dev/shm tmpfs nosuid,nodev,noexec,noatime 0 0
none /tmp tmpfs noatime,nosuid,nodev 0 0
none /var/tmp/portage tmpfs noatime,mode=0750,gid=portage,uid=portage 0 0

# --- INTERNAL ---

# SSD
UUID=fa15678f-7e7e-4a47-8ed2-7cea7a5d037d / xfs noatime 0 0
UUID=529cc283-53bc-4acc-a4d3-f35278d3f2f9 /home xfs noatime 0 0

# HDD
UUID=d7562145-654c-48bb-b8d2-1552a69186f5 /home/TV xfs noatime 0 0
UUID=952b5dee-8d2a-40b2-85f9-5e5092bc1e75 /home/Steam xfs noatime 0 0
UUID=4dcb18c3-f3a5-4b03-8877-063c5cd836e4 /home/jn xfs noatime 0 0
UUID=c735614a-f5f3-4232-911f-8a17cb033521 /var/www xfs noatime 0 0
/dev/HDD/windows7 /mnt/windows7 ntfs-3g offset=105906176,noauto,noatime 0 0

# HDD (OLD)
UUID=23deb461-bab5-45b7-9dca-9c2c4cdb4f50 /mnt/HDD/OLD-home xfs noauto,noatime 0 0
UUID=dd1e1eef-b548-4c94-8ebe-99dd7a648cb0 /mnt/HDD/OLD-music xfs noauto,noatime 0 0
UUID=2ae11a11-db04-4d27-a79e-d9b07dd19650 /mnt/HDD/OLD-opt xfs noauto,noatime 0 0
UUID=2abb2a27-2183-488e-8c24-e195ab3dcb5d /mnt/HDD/OLD-portage xfs noauto,noatime 0 0
UUID=3d0030f0-92da-4e66-8e60-369dfc586df7 /mnt/HDD/OLD-portage_tmp xfs noauto,noatime 0 0
UUID=89200c49-2fc2-45ed-81c8-e244b95db7ce /mnt/HDD/OLD-root xfs noauto,noatime 0 0
UUID=caebfb75-6a1c-4ed6-ad2f-d84d80221dc3 /mnt/HDD/OLD-schrott xfs noauto,noatime 0 0
UUID=cabddcee-cf07-4526-b3a3-9270edc9d171 /mnt/HDD/OLD-src xfs noauto,noatime 0 0
UUID=a2e4df4e-8c6d-4217-8889-6f483e872190 /mnt/HDD/OLD-tmp xfs noauto,noatime 0 0
UUID=4dd484f6-4142-45b3-b504-48625de1ab5c /mnt/HDD/OLD-var xfs noauto,noatime 0 0

# ODD
/dev/sr0 /mnt/cdrom auto user,noauto,ro 0 0

# --- EXTERNAL ---

# USB-Boot-Stick
LABEL="boot_key" /boot ext2 noauto,noatime 0 0
LABEL="boot_dos" /mnt/boot/dos vfat noauto,noatime 0 0
LABEL="boot_iso" /mnt/boot/iso ext2 noauto,noatime 0 0
LABEL="live0" /mnt/boot/live0 ext2 noauto,noatime 0 0
LABEL="live1" /mnt/boot/live1 ext2 noauto,noatime 0 0

# iriver Story HD
/dev/disk/by-id/usb-iriver_Story_EB07_3230204E6F76-0:0 /mnt/iriver/knv auto user,noauto,noatime 0 0
/dev/disk/by-id/usb-iriver_Story_SD_3230204E6F76-0:1 /mnt/iriver/ext auto user,noauto,noatime 0 0

# Sandisk Sansa CLIP
UUID=C65F-1E04 /mnt/mp3 auto user,noauto,noatime 0 0

# Eltern-Fernseher
UUID=115BF67A31CB6C02 /mnt/wdtv ntfs-3g locale=en_US.utf8,user,noauto 0 0
UUID=D27A-7C74 /mnt/pvr vfat user,noauto,noatime 0 0

後:

# /etc/fstab: static file system information.
# <fs> <mountpoint> <type> <opts> <dump/pass>

# --- SPECIAL ---

none  /dev/shm          tmpfs  nosuid,nodev,noexec,noatime                0  0
none  /tmp              tmpfs  noatime,nosuid,nodev                       0  0
none  /var/tmp/portage  tmpfs  noatime,mode=0750,gid=portage,uid=portage  0  0

# --- INTERNAL ---

# SSD
UUID=fa15678f-7e7e-4a47-8ed2-7cea7a5d037d  /      xfs  noatime  0  0
UUID=529cc283-53bc-4acc-a4d3-f35278d3f2f9  /home  xfs  noatime  0  0

# HDD
UUID=d7562145-654c-48bb-b8d2-1552a69186f5  /home/TV       xfs      noatime                          0  0
UUID=952b5dee-8d2a-40b2-85f9-5e5092bc1e75  /home/Steam    xfs      noatime                          0  0
UUID=4dcb18c3-f3a5-4b03-8877-063c5cd836e4  /home/jn       xfs      noatime                          0  0
UUID=c735614a-f5f3-4232-911f-8a17cb033521  /var/www       xfs      noatime                          0  0
/dev/HDD/windows7                          /mnt/windows7  ntfs-3g  offset=105906176,noauto,noatime  0  0

# HDD (OLD)
UUID=23deb461-bab5-45b7-9dca-9c2c4cdb4f50  /mnt/HDD/OLD-home         xfs  noauto,noatime  0  0
UUID=dd1e1eef-b548-4c94-8ebe-99dd7a648cb0  /mnt/HDD/OLD-music        xfs  noauto,noatime  0  0
UUID=2ae11a11-db04-4d27-a79e-d9b07dd19650  /mnt/HDD/OLD-opt          xfs  noauto,noatime  0  0
UUID=2abb2a27-2183-488e-8c24-e195ab3dcb5d  /mnt/HDD/OLD-portage      xfs  noauto,noatime  0  0
UUID=3d0030f0-92da-4e66-8e60-369dfc586df7  /mnt/HDD/OLD-portage_tmp  xfs  noauto,noatime  0  0
UUID=89200c49-2fc2-45ed-81c8-e244b95db7ce  /mnt/HDD/OLD-root         xfs  noauto,noatime  0  0
UUID=caebfb75-6a1c-4ed6-ad2f-d84d80221dc3  /mnt/HDD/OLD-schrott      xfs  noauto,noatime  0  0
UUID=cabddcee-cf07-4526-b3a3-9270edc9d171  /mnt/HDD/OLD-src          xfs  noauto,noatime  0  0
UUID=a2e4df4e-8c6d-4217-8889-6f483e872190  /mnt/HDD/OLD-tmp          xfs  noauto,noatime  0  0
UUID=4dd484f6-4142-45b3-b504-48625de1ab5c  /mnt/HDD/OLD-var          xfs  noauto,noatime  0  0

# ODD
/dev/sr0  /mnt/cdrom  auto  user,noauto,ro  0  0

# --- EXTERNAL ---

# USB-Boot-Stick
LABEL="boot_key"  /boot            ext2  noauto,noatime  0  0
LABEL="boot_dos"  /mnt/boot/dos    vfat  noauto,noatime  0  0
LABEL="boot_iso"  /mnt/boot/iso    ext2  noauto,noatime  0  0
LABEL="live0"     /mnt/boot/live0  ext2  noauto,noatime  0  0
LABEL="live1"     /mnt/boot/live1  ext2  noauto,noatime  0  0

# iriver Story HD
/dev/disk/by-id/usb-iriver_Story_EB07_3230204E6F76-0:0  /mnt/iriver/knv  auto  user,noauto,noatime  0  0
/dev/disk/by-id/usb-iriver_Story_SD_3230204E6F76-0:1    /mnt/iriver/ext  auto  user,noauto,noatime  0  0

# Sandisk Sansa CLIP
UUID=C65F-1E04  /mnt/mp3  auto  user,noauto,noatime  0  0

# Eltern-Fernseher
UUID=115BF67A31CB6C02  /mnt/wdtv  ntfs-3g  locale=en_US.utf8,user,noauto  0  0
UUID=D27A-7C74         /mnt/pvr   vfat     user,noauto,noatime            0  0
1
frostschutz

Vimは動作するか、emacsで動作するはずです。 nanoでさえfstabを正しく表示するはずです。テキストエディタのGUIを使用したい場合は、geditを試すことができます。本当にfstabをオンラインエディタに配置したい場合は、Googleドキュメントを使用できます(その後、コピーして貼り付けます)。

単一のスペースではなく、タブを使用してfstabのスペースを空けていることを確認してください。これは、特に両方を少し使用している場合に、不整合を引き起こす可能性があります。

シェルウィンドウがテキスト全体を行に収めるのに十分な大きさではないため、ファンキーに見える可能性があります。

0
Jeight