Linux

Linux入門「はじめてのコマンドライン」- Part.5

※この記事は専門学校の講義用に作成されたものです

今回はLinuxを利用する上で避けては通れない「パーミション」について取り上げます。

今後Linux上でプログラミングを行ったり、サーバ運用をする場合には必ずこのパーミションを意識して行う必要が出てくるためです。もしいい加減なパーミションの設定をしていると、コマンドを間違えて実行した際の被害の拡大を招くだけではなく、悪意のある第三者に攻撃の糸口を与えてしまいかねません。

パッと見は地味ですが非常に重要な項目と言えます。
続きを読む

Linux入門「はじめてのコマンドライン」- Part.2

※この記事は専門学校の講義用に作成されたものです

前回はLinuxでの基本的なコマンドラインの操作方法、ファイルやディレクトリの扱い方について練習しました。今回はディレクトリ(フォルダ)の「移動方法」について学習します。
続きを読む

Linux入門「はじめてのコマンドライン」- Part. 1

※この記事は専門学校の講義用に作成されたものです

LinuxにはWindowsやmacOSと同じ様にGUIを利用した操作ができる「XWindow」という仕組みもありますが、遠隔地にあるサーバを操作する場合には「コマンド」を入力して実行する方法が一般的です。

今回は初めてコマンドを操作する方を対象に、基本的な操作方法を取り上げます。

続きを読む

SSHで接続できない「Can’t assign requested address」エラーが発生した場合

小ネタです。
なぜか特定のサーバにSSHで接続できない現象が発生しました。他のサーバにはいつも通りに接続でき、DNSやサーバ自体の設定も特に変更していません。

$ ssh ec2-user@example.com -p 10022
ssh: connect to host example.com port 10022: Can't assign requested address

どうやらOpenVPNのクライアントを貧弱なネットワーク環境で使用したり、推奨されない操作をすると「ルーティングテーブル」がぶっ壊れることがちょいちょいあるようです。……思いっきり心当たりがあるw ちょうどこの現象が起こるちょっと前にフリーズしてkill -9 (OpenVPNクライアントのPID)したのでした。

というわけでルーティングテーブルをリセット(flush)します。

$ sudo ifconfig en0 down
$ sudo route flush
$ sudo ifconfig en0 up

これで無事につながるようになりました。めでたしめでたし。

続きを読む

[Linux] yumで一度利用したパッケージをキャッシュする

小ネタです。
AnsibleのPlaybookを作成していたのですが、何度もyumで同じパッケージのインストールを繰り返していると、処理に時間はかかるしネットワーク利用量(利用料)もバカになりません。

そこで一度でも利用したパッケージはローカルにキャッシュするよう設定します。
続きを読む

[Linux] 最低限覚えておきたいTerminalのショートカット一覧

LinuxやmacOSのTerminalのショートカットは様々な物が用意されていますが、一度に全部は覚えられませんw 特におっさんになってくると脳みそが受け付けてくれないのでここでは必要最小限の物をリストアップします。一度覚えてしまえばbashやzshであれば同じ感覚で利用できます。
続きを読む

[Linux] bashで超簡易的な改ざん検知を行いSlackに投げる

小ネタが続いてますが、今回も小ネタですw
Webサイトの改ざん検知を手軽にパパッと行いたい場合、単純にcurlなどで取得したファイルをdiffで比較するだけでも実現できます。

というわけで以下がコード。ここでは最終的にSlackに通知しています。

#!/bin/bash

#
# 簡易的な改ざん検知からのSlack投稿
#

# 対象ページ
TARGET_URL='https://blog.katsubemakito.net/'

# 投稿先のSlack URL
WEB_HOOK_URL='https://hooks.slack.com/services/xxxxxxxx/xxxxxxxx/xxxxxxxxxxxxxxxxxx'

# 保存先ディレクトリ
STORE_DIR='/home/katsube/'


#-----------------------------------
# 最新のHTMLを取得
#-----------------------------------
cd $STORE_DIR
curl -s $TARGET_URL -o current.html

if [ $? -ne 0 ]; then
  echo "Can not get TARGET_URL: $TARGET_URL" >&2
  exit 1
fi

#-----------------------------------
# 前回のファイルと比較する
#-----------------------------------
if [ -f ./prev1.html ]; then
  result=`diff prev1.html current.html`

  if [ -z ${result} ]; then
    text="変化はありません"
  else
    text="<!channel> 変化がありました"
  fi


  # Slackに投げる
  curl -X POST --data-urlencode "payload={\"text\": \"${text}\"}" $WEB_HOOK_URL

  if [ $? -ne 0 ]; then
    echo "Can not post Slack, diff is ${result}" >&2
    exit 1
  fi
fi

#-----------------------------------
# 今回取得したファイルの名称変更
#-----------------------------------
# 1世代残す
if [ -f ./prev1.html ]; then
  mv prev1.html prev2.html
fi
mv current.html prev1.html

非常に簡易的な物ですので、実際に利用する場合は要件に応じてカスタマイズしてください。
続きを読む

[Linux] Bashでファイル一覧を順番に処理したい

Bashで特定のファイルを順番に処理したい場合、配列をforでぐるぐる回してやるのがお手軽です。ここでは配列listで定義した3つのファイルを順番に指定ディレクトリへコピーしています。

#!/bin/bash

# 対象のファイル一覧
list=(
  /tmp/foo.txt
  /tmp/bar.txt
  /tmp/hoge.txt
);

# 順番に処理する
for file in ${list[@]}; do
  echo "copy ${file} to /home/foo"
  cp $file /home/foo
done

続きを読む

[Linux] Bashでlsやfindの実行結果を1件ずつ処理したい

Bashでlsなどコマンドの実行結果を順番に処理したい場合は以下のようにforでぐるぐる回してやるだけです。

#!/bin/bash

for file in `ls /tmp/*.json`; do
  echo "copy ${file} to /home/foo"
  cp $file /home/foo
done

ここでは「/tmp」ディレクトリ配下にある拡張子が.jsonのファイルを順番に指定ディレクトリへコピーしています。対象のファイルが存在しない場合は何もしません。
続きを読む

[Linux] Bashで一定件数以上のファイルを削除する

日次バッチなどを作っていると、例えばバックアップファイルは最新30件だけ保存し、それ以上古いファイルは削除したいといった気持ちになりますよね。そんな時に利用するのが次のワンライナー。

$ cd backup/
$ rm -f `ls -t . | tail -n+31`

これだと30日前の日付を計算して毎回削除するといった処理を書かなくて済みます。厳密にn日分確保する必要がある場合は日付の計算を行った方が良いでしょうが、念の為一定期間取っておきたいくらいのゆるい要件であれば十分でしょう。

  • 保存しておきたいファイル数に「+1」することをお忘れなく。
  • ディレクトリを削除する場合はrmに-rをつけてください。

続きを読む

[Linux] ファイルの行数や文字数をカウントする – wc

ファイルの文字数や行数を簡単にカウントできるのがwcコマンドです。
恐らく「Word Count」の略称で、ワールドカップでもトイレでもありませんw

以下のように調査したいファイルのパスを渡すと、ファイルの行数、単語数、バイト数を表示してくれます。

$ wc Linux*.md
      45      86    2384 Linuxの使い方.md
     392    1223   12589 Linuxコマンド.md
      17      17     343 Linux上のアカウント.md
     454    1326   15316 total

注意点として、ファイルの文字コードはUTF-8、改行コードをLFにしておくと安全に(正しく)集計が行えます。

続きを読む

[Linux] ディレクトリをツリー状に表示する – tree

今回は以下のようにディレクトリやファイルをツリー状に表示してくれるtreeコマンドです。

$ tree .
.
├── LICENSE.txt
├── README.md
├── bin
│   └── gpwd.js
├── coverage
│   ├── clover.xml
│   ├── coverage-final.json
│   └── lcov.info
├── index.js
├── package-lock.json
├── package.json
└── test
    └── genPassword.test.js

続きを読む