Linuxコマンド・bashの使い方実例

Linuxコマンド・bashの使い方の実例を紹介します。
管理人は某企業で、一応SEとして働かせていただいております(本業は組み込み系)。
まだまだ未熟者ですが、皆さんのお役に立てたら幸いです。

ちょっとした小ワザ(ってほどでもないのですが・・)、
特定のディレクトリ、あるいはファイルの、特定の行のみ出力する方法を記載します。 
下記のsedコマンドで、指定したファイルの指定した行を出力できます。 

sed -n [行数]p [ファイル名]

※-nオプションは、条件に含まれない行は出力させないオプションです。
※カッコ[]は含めないでください。

ディレクトリに含まれるファイル全てを対象に出力する場合は、
以下のようにfindコマンドと組み合わせます。

find [ディレクトリ] -type f -exec sed -n [行数]p {} ¥;

特定の拡張子のファイルを対象にする場合(例では拡張子が.c)、
findコマンドに-name '*.c'などのオプションでフィルターをかけることもできます。

find [ディレクトリ] -type f -name '*.c' -exec sed -n [行数]p {} ¥;

このようにgrepやfindやsedを組み合わせて使い慣れることで、
作業効率を格段に上げることができます。
Linux環境を使う方には必須のテクニックでしょう。 
スポンサードリンク
スポンサードリンク

vimコマンドとGNU GLOBALというツールを組み合わせて、Linux環境でのエディタ環境を構築します。
GNU GLOBALと組み合わせると、関数ジャンプや関数呼び出し一覧表示やジャンプができるようになり、ソースコードの解析が早くなります。
また、Linux環境でのエディタの使い方を覚えることで、解析以外の作業の効率化にも繋がります。
例えば、Linux系OSのサーバにあるコードの解析をする時、わざわざWindowsのローカルマシンにソースをコピーして、グラフィカルなエディタで解析をしている場合、
サーバからソースをダウンロード・アップロードする手間・時間が省かれ、サーバ上でソースを編集してすぐ実行できるようになります。

この記事では、環境構築と、使い方をまとめます。

環境構築:
1. vimコマンドのインストール
2. GNU GLOBALのソースコードをダウンロード(https://www.gnu.org/software/global/
3. GNU GLOBALのソースコードをmake(configureしてmake)
4. 「3」でできたglobalとgtagsをホームディレクトリのbin(~/bin)にコピー(パスが通っている場所ならどこにコピーしても問題なし)
5. 「3」でできたgtags.vimを~/.vim/plugin(無いならディレクトリを作成)へコピー 

初期設定(.vimrc):
.vimrcの設定は以下にする(あくまで私の設定です。慣れたらカスタマイズしましょう)
*先頭の数字は行番号なので無視してください
  1 map <C-h> :Gtags -f %<CR> ←関数一覧表示
  2 map <C-j> :GtagsCursor<CR> ←関数定義へジャンプ
  3 map <C-n> :cn<CR> ←関数呼び出しなどの別ウィンドウのリストで下に移動するため
  4 map <C-p> :cp<CR> ←関数呼び出しなどの別ウィンドウのリストで上に移動するため
  5 map <C-g> :Gtags ←Gtagsコマンド入力を楽にするため(後述の:Gtagsの入力をCtrl + gに置き換えることができます)
  6 set number ←常に行番号を表示するため

コマンド使い方: 
vim + GNU GLOBALコマンド一覧
コマンド説明
gtags -v解析するソースのトップディレクトリで実行する。これをしないと関数ジャンプができない。なお、vimでのコマンドではなく、vimコマンド実行前の前準備。
Ctrl + j関数定義へジャンプ。定義で使うと呼び出し一覧表示
Ctrl + oジャンプ元へ戻る
Ctrl + iジャンプ元へ戻るを戻る
Ctrl + n関数一覧などの別ウィンドウのリストの下へ移動
Ctrl + p関数一覧などの別ウィンドウのリストの上へ移動
Ctrl + h現在のファイルの関数一覧
G最終行へジャンプ
yyカーソル行をコピー
pペースト
uアンドゥ
*カーソル位置の単語を下へ検索
#カーソル位置の単語を上へ検索
n次の候補へ移動
N前の候補へ移動
:数字数字の行数へジャンプ
:Gtags 関数名関数ジャンプ
:Gtags -r 関数名関数呼び出し一覧
:Gtags -g 文字列文字列をgrep

RaspberryPiやUbuntuなどのLinux環境において、スクリプトからメールを送信する方法を紹介します。
この方法では、postfixなどでMTAを構築せずとも、メールを送信することができます。

前提:
・ここで紹介する方法は、Ubuntu、Raspbianで確認しました。その他のOS、ディストリビューションで正しく動作するかは未確認です。
・メール受信の方法についてはここでは紹介しません。
・使用するSMTPサーバの認証方式によっては、ここで紹介する.mailrcの設定以外に、必要な項目がある可能性があります。ここでは楽天メールを使用した場合の一例に留めます。


mailxコマンドのインストール:
メールを送るために、mailxコマンドを使用します。
mailxコマンドを使うことで、MTAを構築せずに、直接SMTPサーバへメールを転送することができます。
以下のコマンドでmailxコマンドをインストールしてください。
sudo apt-get install heirloom-mailx
なお、既にインストールされているかどうかは、下記のコマンドで確認してください。
sudo dpkg -l | grep mailx
ii  heirloom-mailx                        12.5-4                                    armhf        feature-rich BSD mail(1)
上記のように、 heirloom-mailx が出力された場合は、インストール済みなので不要です。

.mailrcの作成:
 スクリプトを実行するユーザーのホームディレクトリ(~)に、.mailrcを作成します。
内容は下記の通りです。
vim ~/.mailrc ←エディタはviでもnanoでも何でも良いです。
  1 set smtp=smtp://mail.gol.com:587 ←送信元smtpサーバの指定(この例は楽天メールの場合です)
  2 set from=xxxxxxx@gol.com ←送信元メールアドレス
  3 set smtp-auth-user=xxxxxxxx@gol.com ←SMTP認証のユーザ名
  4 set smtp-auth-password="xxxxxxxx" ←SMTP認証のパスワード

これらの設定値は各メールサービスによって異なるので、利用するメールサービスごとに読み替えて設定してください。

メール送信:
ここまでで準備は完了したため、あとはメールを送るだけです。
以下のコマンドでメールを送信してください。
mailx -s "SUBJECT" xxxxxxxx@hotmail.co.jp < /home/hoge/msg.txt 

SUBJECTがメールの件名です。
xxxxxxxx@hotmail.co.jpが宛先メールアドレスです。
/home/hoge/msg.txtの中身が本文です。

本文をファイルから入力しない場合、以下のようにパイプで渡すこともできます。
echo "HONBUN" | mailx -s "SUBJECT" xxxxxxxx@hotmail.co.jp

また、件名、宛先、本文を指定しなければ、対話モードでメールを作成します。この時、件名、宛先を入力した後のEnterで何も表示されなければ、本文入力の開始です。本文の入力の終了はCtrl+Dを入力します。

スクリプトでメールを作成する場合は、本文をテキストファイルで出力しておいて、mailxコマンドの入力にすることが多いでしょう。この時、cronなどでmailxコマンドを実行する場合は、ファイルの入出力は絶対パスで指定しないと、相対パスで意図しないパスを見てファイル入出力が正しく行われなかったりするので、気をつけましょう。
 

↑このページのトップヘ