モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

運用時に大活躍する必須コマンド

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/05/26
最終更新最終更新
2021/10/07
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Software Engineer @ Tokyo

    0
    ステッカーを贈るとは?

    ファイル内容を再帰的に検索 (grep)

    find コマンドはファイル名についてディレクトリを再帰的に検索します。ファイルの内容について指定したディレクトリ以下を再帰的に検索するためには grep に -r オプションを付与します。その際 -n および -i オプションも付与しておくと便利です。未来創発 NRI grep です。

    $ grep -nri "pattern" dir
    
    • -n (--line-number) 検索結果がファイルの何行目であったかを表示
    • -r (--recursive) ディレクトリ以下を再帰的に検索
    • -i (--ignore-case) 正規表現の大文字小文字を区別しない

    特定のディレクトリを除外するためには --exclude-dir を指定します。.gitlog ディレクトリを除外して example.com という文字列が含まれるファイルを検索する例は以下のようになります。

    $ grep -nri 'example.com' . --exclude-dir './.git' --exclude-dir './log'
    

    高速な grep (silver → Ag)

    インストール (macOS, debian)

    brew install the_silver_searcher
    sudo apt install silversearcher-ag
    

    ディレクトリ以下を検索 (grep -nr)

    ag 'xxx' .
    

    gz 圧縮を展開して検索 (zgrep)

    ag -z 'xxx' .
    

    いい感じに無視している .git や隠しファイルを無視せずに検索

    ag -u 'xxx' .
    

    ファイル名だけ表示 (grep -l)

    ag -l 'xxx' .
    ag -L 'xxx' . # マッチしなかったファイル
    

    ファイル名に対して検索

    ag -g 'filename' .
    

    インクリメンタルサーチ grep (peco)

    OS に応じたバイナリファイルをダウンロードして使います。設定ファイルのカスタマイズがなされていない状況であっても、ログ閲覧時に grep や less の代用として有用です。

    sudo cat /var/log/messages | peco
    

    特定のディレクトリを除外してファイル名を検索 (find)

    .gitlog ディレクトリを除外して *.log ファイルを検索する例は以下のようになります。-o は「または (or)」の意味です。-prune を使用する必要はありません。

    $ find . -not \( -path './.git/*' -o -path './log/*' \) -name '*.log'
    

    高速な find (locate)

    インストール (macOS、CentOS、Debian)

    brew install findutils
    
    sudo yum install mlocate
    rpm -ql mlocate
    
    sudo apt install mlocate
    dpkg -L mlocate
    

    インデックスの更新

    sudo gupdatedb
    
    sudo rm /var/lib/mlocate/mlocate.db
    sudo updatedb
    

    cron によるインデックス更新

    less /etc/cron.daily/mlocate
    

    検索 (-r 正規表現)

    glocate xxxx.txt
    locate -r xxxx.txt$
    

    タイムスタンプ順に並べる (ls)

    • -t 変更日時順に並べます
    • -r 逆順に並べます

    新しい順

    $ ls -lt /etc/
    ...
    -rw-r--r--.  1 root root    233  1月 12 22:28 2010 printcap
    -rw-r--r--.  1 root root   6455  1月 12 22:28 2010 protocols
    -rw-------.  1 root root    122  1月 12 22:28 2010 securetty
    -rw-r--r--.  1 root root    767 11月 30 23:04 2009 netconfig
    -rw-r--r--.  1 root root    148  5月 15 05:53 2009 asound.conf
    -rw-r--r--.  1 root root    662  8月 29 16:19 2007 logrotate.conf
    

    古い順

    $ ls -ltr /etc/
    ...
    drwxr-xr-x.  2 root root   4096  3月 28 21:50 2015 bash_completion.d
    drwxr-xr-x.  2 root root   4096  3月 28 21:50 2015 default
    -rw-r--r--.  1 root root  26141  3月 28 21:50 2015 ld.so.cache
    drwxr-xr-x.  2 root root   4096  3月 28 21:51 2015 profile.d
    drwxr-xr-x.  2 root root   4096  4月 16 22:50 2015 logrotate.d
    drwxr-xr-x.  7 root root   4096  4月 16 22:50 2015 sysconfig
    

    gzip 圧縮されたファイルを閲覧 (zless)

    以下の二つのコマンドは同等の効果をもたらします。似たコマンドに zcat, zdiff, zgrep などがあります。

    $ zcat file.txt.gz | less
    $ zless file.txt.gz
    

    gzip 圧縮されたファイルを解凍 (gunzip)

    $ gunzip file.txt.gz
    (or $ gzip -d file.txt.gz)
    

    マルチコアで高速に gzip 圧縮/解凍 する (pigz, unpigz)

    インストール

    sudo yum install epel-release
    sudo yum --enablerepo=epel install pigz
    

    圧縮

    pigz somefile.txt
    

    解凍

    unpigz somefile.txt.gz
    pigz -d somefile.txt.gz
    

    less で閲覧中に tailf モードに切り替える (Shift f)

    less コマンドで閲覧中に Shift f すると tailf モードの切り替わります。

    $ less file.txt
    

    つまり以下のコマンドと同等の効果が得られます。

    $ tailf file.txt
    $ tail -f file.txt
    

    終了するためには Ctrl-C を押します。通常の閲覧モード less に戻ります。

    その他 less オプション

    ログファイル等に ANSI カラーのエスケープシーケンスが含まれている場合は -R を付与すると色付きで閲覧できます。

    less -R /path/to/ansi-color-logfile.txt
    

    長い一行を折り返さずに切り捨てて閲覧するためには -S を付与します。

    less -S /path/to/long-lines-logfile.txt
    

    JVM のプロセスを調査 (jps)

    jdk に含まれる jps (Java Virtual Machine Process Status Tool) コマンドを利用すると JVM に限定して ps コマンドのような処理を実行できます。

    $ jps -m
    3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
    3102 sun.tools.jstatd.jstatd -p 2002
    
    • -m : 実行時に渡された引数を表示

    条件に合致した行以降も表示する (grep)

    sample.txt

    AAA 1
    BBB 2
    CCC 3
    DDD 4
    EEE 5
    

    実行例

    $ grep -A 2 'BBB' sample.txt
    BBB 2
    CCC 3
    DDD 4
    

    条件に合致した "BBB 2" だけでなく、それより後 (After) の二行も表示されました。

    数秒毎にコマンドを定期実行 (watch)

    1秒毎に "date" コマンドを実行し、その差異をハイライトして出力するためには以下のように "watch" コマンドを利用するとよいです。

    $ watch -d -n 1 date
    

    表示例

    Every 1.0s: date                           Sun Oct 19 23:49:01 2014
    
    2014年 10月 19日 日曜日 23:49:01 JST
    

    DNSの情報を調査する (dig)

    インストール例

    $ sudo yum install bind-utils
    

    実行例

    $ dig yahoo.co.jp
    

    実行結果例

    ...(略
    ;; ANSWER SECTION:
    yahoo.co.jp.            79      IN      A       182.22.59.229
    yahoo.co.jp.            79      IN      A       183.79.135.206
    ...(略
    

    Windows 版は BIND を管理維持している ISC (Internet Systems Consortium) のサイトの Downloads → BIND からダウンロードできます。BIND 9.10.2 Documentation によると nslookup よりも dig を利用することが推奨されています。しかしながら、ちょっとした調査目的であればわざわざ dig をインストールしなくても Windows には標準で nslookup が用意されています。

    $ nslookup yahoo.co.jp
    権限のない回答:
    サーバー:  aterm.me
    Address:   192.168.179.1
    
    名前:      yahoo.co.jp
    Addresses: 183.79.135.206
               182.22.59.229
    

    dig は既定では /etc/resolv.conf に記載の search を利用せずに名前解決します。search を有効にするためには以下のようにします。

    dig +search yahoo.co.jp
    

    ユーザをグループに所属させる (usermod/id)

    コマンド id で現在の所属グループを表示できます。

    $ id username
    uid=500(username) gid=500(username) 所属グループ=500(username)
    

    コマンド usermod で所属グループを追加します。

    $ sudo usermod -aG wheel username
    $ id username
    uid=500(username) gid=500(username) 所属グループ=500(username),10(wheel)
    

    所属グループを削除するためには append (-a) オプションを外します。自分のグループ username だけに所属させます。以下の例で一つ目 username はグループ名です。

    $ sudo usermod -G username username
    $ id username
    uid=500(username) gid=500(username) 所属グループ=500(username)
    

    ターミナルとファイルの両方に出力する (tee)

    標準出力のみファイルにも出力するためには以下のようにします。

    $ echo '123' | tee log.txt
    

    リダイレクションによって標準エラー出力もファイルに出力できます。

    $ echo '123' 2>&1 | tee log.txt
    

    ファイルに追記するためには -a オプションを追加します。

    $ echo '123' 2>&1 | tee -a log.txt
    

    フォーマットされた時刻の文字列を得る (date)

    $ date -d 'yesterday' +'%Y-%m-%d %H:%M:%S' -u
    2015-05-29 23:38:02
    

    オプション -u は UTC を指定したい場合に付与します。

    UNIX 時間の値と日付を相互変換する (date)

    $ date -d '@1430681351'
    2015年  5月  4日 月曜日 04:29:11 JST
    $ date -d '2015-05-04 04:29:11' +'%s'
    1430681351
    

    HTTP の疎通確認を行う (curl)

    プログレス情報を非表示

    $ curl http://www.example.com/ -s
    

    ヘッダー情報の表示

    $ curl http://www.example.com/ -I
    

    認証

    $ curl http://www.example.com/ -u username:password
    $ curl http://www.example.com/ -u username
    Enter host password for user 'username':
    
    $ curl http://username:password@www.example.com/
    

    オレオレ証明書などの承諾 (--insecure)

    $ curl https://www.example.com/ -k
    

    別のサーバを経由 (HTTP ではなく TCP でのプロキシサーバの場合は nc 等を併用します)

    $ curl http://www.example.com/ -x http://proxy.abc.com/
    

    別のサーバを経由しないで強制的に直接アクセス

    $ curl http://www.example.com/ --noproxy www.example.com
    

    リダイレクト (301, 302 など) が返されたら、その内容で再度リクエストを行う

    $ curl -L http://www.example.com/
    

    HTTP POST の実行 (パラメータ指定の方法がいくつかあります)

    $ curl http://www.example.com/ -XPOST -d 'key=value'
    
    $ cat file.txt
    key=value
    $ curl http://www.example.com/ -XPOST -d @file.txt
    
    $ echo 'key=value' | curl http://www.example.com/ -XPOST -d @-
    

    タイムアウトの設定

    • --connect-timeout 10 接続までのタイムアウト秒
    • --max-time 10 レスポンスが完了するまでのタイムアウト秒

    HTTP ステータスコードを処理 (curl -w)

    bashで HTTP 2xx でない場合に exit 1 する例は以下のようになります。

    #!/bin/sh
    STATUS_CODE=$(curl -sS -w '%{http_code}' www.example.com -o /dev/null)
    if [[ ! "${STATUS_CODE}" =~ 2[0-9]{2} ]]; then
        echo "Got ${STATUS_CODE}"
        exit 1
    fi
    

    /etc/hosts を書き換えずに curl

    curl --resolve my.example.com:80:93.184.216.34 http://my.example.com
    

    ソート (sort)

    sample.txt

    1 CCC=y
    2 BBB=z
    3 AAA=x
    

    空白区切り二列目でソート

    $ cat sample.txt | sort -k2
    3 AAA=x
    2 BBB=z
    1 CCC=y
    

    = 区切り二列目でソート

    $ cat sample.txt | sort -k2 -t'='
    3 AAA=x
    1 CCC=y
    2 BBB=z
    

    find exec のように '{}' の場所を xargs で指定する (-I オプション)

    echo -e '1\n2\n3' | xargs -I{} touch '{}.txt'
    

    find -exec で複数回数 {} を指定する

    /bin/bash を exec することで実現できます。

    find . -type f -exec /bin/bash -c "basename {} && dirname {}" \;
    

    起動した後でバックグラウンドに処理を移す (bg)

    コマンドを実行した後で、時間がかかることに気づいたとします。

    $ sleep 10
    

    Ctrl-z を押して一時中断します。

    $ jobs
    [1]+  停止                  sleep 10
    

    バッググラウンドで起動します。

    $ bg 1
    $ jobs
    [1]+  実行中               sleep 10 &
    

    行を文字で区切る (awk)

    単純な例

    $ echo -e '1 2\n3 4' | awk '{ print $1 }'
    1
    3
    $ echo -e '1 2\n3 4' | awk '{ print $2 }'
    2
    4
    

    四則演算

    $ echo -e '1 2\n3 4' | awk '{ print $1 + $2 }'
    3
    7
    

    区切り文字を指定

    $ echo -e '1,2\n3,4' | awk -F, '{ print $1 }'
    1
    3
    $ echo -e '1\t2\n3\t4' | awk -F'\t' '{ print $1 }'
    1
    3
    

    書式指定

    $ echo -e '1,2\n3,4' | awk -F, '{ printf("%s,%s\n",$2,$1) }'
    2,1
    4,3
    

    同じような処理は後述の perl や cut でも実現できます。

    cut コマンド

    $ echo -e '1 2\n3 4' | cut -d' ' -f1
    1
    3
    

    ワンライナー (perl)

    xargs 等では表現できない複雑なパイプ処理においては Perl ワンライナーが便利です。Perl がインストールされている環境は多く、また挙動が環境に依存しないため、汎用的なコマンドが作成できます。複数オプションの最後に e を指定することに注意します。

    e → 引数文字列を Perl スクリプトとして評価します。

    perl -e 'print "hi\n"'
    hi
    

    l$_ の末尾の改行文字が除去 (chomp) されます。また、すべての print 関数で改行文字が自動付与されます。

    echo -e '1 2\n3 4' | perl -lne 'print $_'
    1 2
    3 4
    echo -e '1 2\n3 4' | perl -ne 'chomp($_); print $_'
    1 23 4
    

    n → パイプで渡された標準入力からの文字列を $_ に格納します。

    echo -e '1 2\n3 4' | perl -lne 'print $_'
    1 2
    3 4
    

    p → パイプで渡された標準入力からの文字列を $_ に格納します。明示的に print を記述していなくても $_ が print されます。ワンライナーでは一般に n または p のどちらかを利用します。

    echo -e '1 2\n3 4' | perl -lpe '$_ .= "xxx"'
    1 2xxx
    3 4xxx
    

    a → 前述 AWK のような挙動になります。$_-F の区切り文字で分割 (split) した結果が @F に格納されています。$_ の値が必要なため n または p のどちらかと併用します。-Fa よりも前に指定します。

    echo -e '1 2\n3 4' | perl -lape '$_ = $F[0]'
    1
    3
    echo -e '1,2\n3,4' | perl -F, -lape '$_ = $F[0]'
    1
    3
    

    s → 環境変数を利用することができます。

    MY_ENV="aaa"
    perl -se 'print "$MY_ENV\n"' -- -MY_ENV=$MY_ENV
    aaa
    

    xargs の代用

    qq{} でダブルクォーテーションを表現できます。

    echo -e '1 2\n3 4' | perl -lne 'system qq{echo $_}'
    1 2
    3 4
    

    nkf の代用

    -M でモジュールを use できます。

    cat sjis.txt | perl -MEncode -lne 'print Encode::encode("UTF-8", Encode::decode("Shift_JIS", $_))' > utf8.txt
    

    systemctl

    サービス一覧

    systemctl list-unit-files --no-pager -t service | grep nginx
    

    自動起動の有無

    systemctl is-enabled nginx.service
    

    自動起動の設定変更

    sudo systemctl enable nginx.service
    sudo systemctl disable nginx.service
    

    サービス操作

    systemctl status nginx.service
    sudo systemctl stop nginx.service
    sudo systemctl start nginx.service
    sudo systemctl restart nginx.service
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Software Engineer @ Tokyo

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • 使い所が難しいマイナーな運用コマンド
        コマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin /...
        けんちゃんけんちゃん12/1/2022に更新
        いいねアイコン画像0
      • ipコマンドの基本的な使い方
        ネットワーク関連のコマンドはたくさんあります。しかしながら、その一部は ip コマンドに集約できます。 基本形 ("man ip" より抜粋) $ ip OBJECT COMMAND OBJECT: link, neigh, addr, route (等) COMMAND: show, add, delete (等) データリンク層のネットワークデバイス情報 (ifconfigコマンドの代用) M...
        こもれびさんこもれびさん3/8/2017に更新
        いいねアイコン画像0
      • プロセス関連のコマンド
        サムネイル画像-7b5901f600
        プロセスID関連 (ps, pgrep, pkill) 全プロセスを表示するためには $ ps ax とすればよく、その表示を見やすくするためには "u" と "w" を追加して $ ps auxw とすればよいです。表示件数自体は同じです。そのうち特定のコマンドのプロセスIDだけを表示したい場合は $ ps ax | grep 'my_script' | grep -v grep | awk '...
        kenken12/27/2021に更新
        いいねアイコン画像0
      • rpmとyumのチートシート
        サムネイル画像-f69c6665b8
        rpm (RedHat Package Manager または RPM Package Manager) はRedHat系のパッケージ管理ツールで、yum (Yellowdog Updater Modified) は内部的にrpmを実行するメタパッケージ管理ツールです。rpmには柔軟性がありyumには利便性があります。 rpmは "rpmパッケージファイル" があれば何でもインストールできますが、...
        まるたんまるたん3/2/2022に更新
        いいねアイコン画像0
      • メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識
        メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 $ free total used free shared buffers cached Mem: 510824 ...
        しおまめしおまめ9/30/2017に更新
        いいねアイコン画像0