あいしんくいっと

ありきたりだけど、少しだけ役に立つことをありのままに書こうと思う。

Linuxで知っておくと便利で役に立つコマンド5つ

time 2016/03/28

どもども。あいしんくいっと(@ithinkitnet)です。

今回はLinuxを扱う上で知っておくと便利なコマンドを5つほど紹介します。
ワンライナーで使えるので、覚えておくと何かと役に立つかも知れません。

sponsored link

Linuxで知っておくと便利で役に立つコマンド5つ

grepで”grep ○○”行を表示しない

grepで検索する際に、検索結果に「grep ○○」行って出ますよね。
例えば、こんな感じ。

# ps -ef | grep ssh
root      1240     1  0 11:33 ?        00:00:00 /usr/sbin/sshd
root      1367  1240  0 11:55 ?        00:00:00 sshd: ec2-user [priv]
ec2-user  1369  1367  0 11:55 ?        00:00:00 sshd: ec2-user@pts/0
root      1838  1240  0 12:16 ?        00:00:00 sshd: ec2-user [priv]
ec2-user  1840  1838 19 12:16 ?        00:01:02 sshd: ec2-user@notty
root      1961  1502  0 12:21 pts/0    00:00:00 grep ssh ← 不要なgrep行

一番下の行ですが、正直不要です。いらんです(笑)
なので、たぶんこんな感じにすると思います。

# ps -ef | grep ssh | grep -v grep
root 1240 1 0 11:33 ? 00:00:00 /usr/sbin/sshd
root 1367 1240 0 11:55 ? 00:00:00 sshd: ec2-user [priv]
ec2-user 1369 1367 0 11:55 ? 00:00:00 sshd: ec2-user@pts/0
root 1838 1240 0 12:16 ? 00:00:00 sshd: ec2-user [priv]
ec2-user 1840 1838 18 12:16 ? 00:01:27 sshd: ec2-user@notty

こうすることで「grep ○○」行は確かに消えるんですけどね、スマートじゃないです。
なのでこうします。

# ps -ef | grep [s]sh
root 1240 1 0 11:33 ? 00:00:00 /usr/sbin/sshd
root 1367 1240 0 11:55 ? 00:00:00 sshd: ec2-user [priv]
ec2-user 1369 1367 0 11:55 ? 00:00:00 sshd: ec2-user@pts/0
root 1838 1240 0 12:16 ? 00:00:00 sshd: ec2-user [priv]
ec2-user 1840 1838 18 12:16 ? 00:01:37 sshd: ec2-user@notty

どうでしょう。不要なgrep行が消えました。
先頭の1文字目を[]で括ることによって無駄な「grep ○○」行を出さないようにできます。
これ知っておくと、「おっ」てなる人がいるかも知れませんw

コマンド実行をループさせる

何秒かおきにコマンドを実行させ続けたい時ってあると思うのですが、
私はいつも下記の方法を使用します。

# while true; do <実行させたいコマンド>; done

例)「ls -l」を3秒おきに実行させる

# while true; do ls -l;sleep 3; done
total 20
drwxr-xr-x 2 root root 4096 Sep 13 12:39 hoge
drwxr-xr-x 2 root root 4096 Sep 13 12:38 bk
-rwxr-xr-x 1 root root 145 Sep 19 18:04 rds.sh
-rw-r--r-- 1 root root 371 Sep 17 16:32 test.sh
total 20
drwxr-xr-x 2 root root 4096 Sep 13 12:39 hoge
drwxr-xr-x 2 root root 4096 Sep 13 12:38 bk
-rwxr-xr-x 1 root root 145 Sep 19 18:04 rds.sh
-rw-r--r-- 1 root root 371 Sep 17 16:32 test.sh
total 20
drwxr-xr-x 2 root root 4096 Sep 13 12:39 hoge
drwxr-xr-x 2 root root 4096 Sep 13 12:38 bk
-rwxr-xr-x 1 root root 145 Sep 19 18:04 rds.sh
-rw-r--r-- 1 root root 371 Sep 17 16:32 test.sh

上記のコマンドで3秒置きにコマンドが実行されます。
また、最新の結果のみ表示させたい場合は「clear」コマンドを追加します。

# while true; do ls -l;sleep 3; clear; done
total 20
drwxr-xr-x 2 root root 4096 Sep 13 12:39 hoge
drwxr-xr-x 2 root root 4096 Sep 13 12:38 bk
-rwxr-xr-x 1 root root 145 Sep 19 18:04 rds.sh
-rw-r--r-- 1 root root 371 Sep 17 16:32 test.sh

これで3秒おきに最新の結果だけ表示させることが出来ます。

ファイルやフォルダを100個作成

テストに使用するため等にファイルやフォルダを作りたいときには
下記のコマンドで簡単に作成することが出来ます。

# touch {1..<任意の個数>}

例)ファイルを100個作成

# touch {1..100}
# ls
1 14 2 25 30 36 41 47 52 58 63 69 74 8 85 90 96
10 15 20 26 31 37 42 48 53 59 64 7 75 80 86 91 97
100 16 21 27 32 38 43 49 54 6 65 70 76 81 87 92 98
11 17 22 28 33 39 44 5 55 60 66 71 77 82 88 93 99
12 18 23 29 34 4 45 50 56 61 67 72 78 83 89 94
13 19 24 3 35 40 46 51 57 62 68 73 79 84 9 95

上記で空ファイル100個を作成することが出来ます。
ディレクトリの場合は「touch」を「mkdir」に変えて実行して下さい。

# mkdir {1..100}
# ls
1 14 2 25 30 36 41 47 52 58 63 69 74 8 85 90 96
10 15 20 26 31 37 42 48 53 59 64 7 75 80 86 91 97
100 16 21 27 32 38 43 49 54 6 65 70 76 81 87 92 98
11 17 22 28 33 39 44 5 55 60 66 71 77 82 88 93 99
12 18 23 29 34 4 45 50 56 61 67 72 78 83 89 94
13 19 24 3 35 40 46 51 57 62 68 73 79 84 9 95

また、ファイル名もある程度指定可能です。
例えばこんな感じ、

# touch hoge{1..100}
# ls
hoge1 hoge18 hoge27 hoge36 hoge45 hoge54 hoge63 hoge72 hoge81 hoge90
hoge10 hoge19 hoge28 hoge37 hoge46 hoge55 hoge64 hoge73 hoge82 hoge91
hoge100 hoge2 hoge29 hoge38 hoge47 hoge56 hoge65 hoge74 hoge83 hoge92
hoge11 hoge20 hoge3 hoge39 hoge48 hoge57 hoge66 hoge75 hoge84 hoge93
hoge12 hoge21 hoge30 hoge4 hoge49 hoge58 hoge67 hoge76 hoge85 hoge94
hoge13 hoge22 hoge31 hoge40 hoge5 hoge59 hoge68 hoge77 hoge86 hoge95
hoge14 hoge23 hoge32 hoge41 hoge50 hoge6 hoge69 hoge78 hoge87 hoge96
hoge15 hoge24 hoge33 hoge42 hoge51 hoge60 hoge7 hoge79 hoge88 hoge97
hoge16 hoge25 hoge34 hoge43 hoge52 hoge61 hoge70 hoge8 hoge89 hoge98
hoge17 hoge26 hoge35 hoge44 hoge53 hoge62 hoge71 hoge80 hoge9 hoge99

カレントディレクトリのファイル/ディレクトリ名一括変更

カレントディレクトリのファイル名を一括で変更する場合、
下記のコマンドが使えます。

# for i in $(ls); do mv ${i} ${i}_bk; done

※ カレントディレクトリで実行しすること(lsでフルパス指定でも可)

例)カレントディレクトリにある全てのファイル名に「_bk」を付ける

# ls
hoge1 hoge2 hoge3 hoge4 hoge5

# for i in $(ls); do echo "mv ${i} ${i}_bk"; done
mv hoge1 hoge1_bk
mv hoge2 hoge2_bk
mv hoge3 hoge3_bk
mv hoge4 hoge4_bk
mv hoge5 hoge5_bk

# for i in $(ls); do mv ${i} ${i}_bk; done

# ls
hoge1_bk hoge2_bk hoge3_bk hoge4_bk hoge5_bk

上記で変更することが可能です。
ただ、一括変換系のコマンドを実行する場合は必ず事前確認したほうがいいでしょう。

直前の戻り値以外も取得

コマンドを連結して実行した場合の戻り値は基本、直前のものしか取得出来ないです。
例)$?を確認した場合

# exit 1 | exit 2 | true | false
# echo $?
1

直前の「false」コマンドの結果しか取得出来ない。
でも、下記の変数を参照することで直前以外の戻り値も取得することが出来ます。

# exit 1 | exit 2 | true | false
# echo ${PIPESTATUS[@]}
1 2 0 1

シェルスクリプトの処理で何かの役に立つかもしれません。

どうですか。
使えそうなコマンドはあったでしょうか?
また、ネタが出来たら書きたいと思います。

以上、あいしんくいっとでした(゚Д゚;)

sponsored link

down

コメントする




*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

sponsored link

Author

あいしんくいっと

あいしんくいっと

あいしんくいっとの中の人。

ありきたりだけど、自分なりの視点で少しでも人の役に立つ記事をありのままに書くをモットーに。 たまには役立つことが書けると良いかな。

サイトポリシーはこちら

聞きたいことがあれば、気軽にツイートください♪可能な範囲でお答えします。
follow us in feedly

Twitter

オススメ記事

アーカイブ