信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    素敵だら! Linux コマンド ~ファイル内容の表示 その1~

    こんにちはうなぎです。IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。今回はファイル内容を表示する、読み取るコマンドをいくつかご紹介します。ぱっと思いつくだけでも、cat, less, tail, head, more などのコマンドがあり、また vi (vim) や emacs などのエディタを使用することもあります。コマンドごとに強みがあるので、用途に応じて使い分けられるようにしたいですね。■less, more引数にファイルを指定するか、標準出力に対してパイプを通すことで表示することができます。※less も more も基本操作性は変わらないので、機能が多い less を使うことをお勧めしますless, more いずれも一度にすべて読み込むわけでなく、一部だけを読み取って表示させるので、高速に動きます。表示中、`q` を押すことで終了します。less text.txt cat text.txt | less また、これは結構大事なことですが、これらのコマンドは読み取り専用なので、誤ってファイルを変更してしまったり、タイムスタンプを変えてしまったりすることがありません。less, more は開いたファイル中から特定の文字を検索することも可能です。※いずれもファイルを開いた状態で `/` に続いてキーワードを打ち込む※次の検索結果に移動するときは `n`ただ、ログのような巨大なファイルだと検索に時間がかかるので、そういう時には grep コマンドを使った方がよいです。grep による検索結果が多いようであれば上記のようにパイプを通せば、検索結果が流れることなく確認でき、かつその検索結果のなかからさらに検索することも可能です。
  • テクログ

    素敵だら! Linux コマンド ~diff~

    こんにちはうなぎです。IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。緊急事態宣言中に紹介するのは「diff」!■diffdiff はファイル同士の差分を教えてくれるコマンドです。まずは通常の使い方から。例えば、a.txt1 2 3 b.txt1 4 3 のようなファイルがあったとして、diff a.txt b.txt ※変更前、変更後、の順番で指定のように実行すると、2c2 < 2 --- > 4 ※一行目に表示されている英字はそれぞれ a(added)、d(deleted)、c(changed)を示しています※「2c2」は a.txt の二行目から b.txt の二行目に変更があることを示しています ※ `-c` や `-u` オプションを付けると、差分がより見やすい形式で表示されますのように差分箇所を確認することができます。プログラマーで、コード管理を Git や Subversion で行っていれば、ほぼ使う機会もない機能ですが、オプションの組み合わせによって、利用するシーンの幅が広がります。おすすめのオプション組み合わせは `-r` と `-q` と `--exclude` です。diff -rq --exclude=.git src src.back `-r` で複数のファイルを、再帰的に走査し、`-q` で差分のあるファイル名のみを取得し、 `--exclude` で走査不要なディレクトリ・ファイルを指定します。例えば、あまりないとは思いますが、デプロイツールを使わず、cli から直接反映させるようなときに、複数ファイルに渡って反映前後での差分確認に使うことができます。以上、知っておくと、いざという時に便利な diff でした!
  • テクログ

    素敵だら! Linux コマンド ~wget~

    こんにちはうなぎです。IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。年明け第一回目は「wget」!※つらいので今回から1コマンドずつ紹介することにしました。■wgetwget は何かをダウンロードしたいときに使うコマンド。ページを画像やCSSなども丸ごとダウンロードしたり、簡易的なクローリングもできちゃうパワフルなダウンローダーです。まずは通常の使い方から。wget http://example.com/ とすると、対象のページHTMLが `index.html` としてダウンロードされます。保存名を指定したいときにはwget http://example.com/ -O test.html `-O` オプションを使います。Linux で wget を使用するシーンとしては、.zip や .tar などの圧縮されたソースデータをダウンロードすることが多いのではないでしょうか。データが置いてあるホスティングサーバー上ではアクセスによる負荷を分散させるために、ダウンロードURLをミラーサイトにリダイレクトさせていることがあります。wget --trust-server-names https://sourceforge.net/projects/notepadplusplus.mirror/files/latest/download そんな時は、`--trust-server-names` を使えば正常にダウンロードできます。他にもWEB魚拓のように、あるサイトのページをまるっとダウンロードしたいときは、wget -k -p -w 3 http://abehiroshi.la.coocan.jp/ とすると、他のページや画像なども一緒にまとめてダウンロードしてくれます。`-k`  `--convert-links`ダウンロードしたHTMLやCSSのリンクを、ローカル内の相対パスに変換します。`-p` `--page-requisites`ページの表示に必要なファイルをすべてダウンロードします。`-w` `--wait`再帰的にダウンロードするとき、指定した秒数分間隔をあけて実行します。クローラー、スパイダー、すべてそうですが、再帰的なアクセス・ダウンロードするときには、必ず数秒の間隔をあけるなど、サーバーへの負荷を考慮してください!!!以上、2020年一発目は wget でした!
  • テクログ

    cURLのメモリリーク

    こんにちは、kaiです。最近新作ゲームをプレイ中に自宅PCのメモリ使用率が95%まで上がったことがあって(windows defenderの問題でした)、メモリリークって怖いな…と思う今日この頃ですが、それに関連して今回は担当していた案件で遭遇した問題について紹介します。取得したURLにPHPのcURL関数を用いてアクセスするプログラムを作成したところ、実行中、時間を追うごとにサーバーのメモリ消費量が増大していく現象が発生しました。プログラム側ではスタックし続けるような処理を実装していないので、調査したところ、curlの古いバージョンにはキャッシュを蓄積し続けるバグが存在しておりプログラム実行中にはメモリが解放されずに消費されていくことが分かりました。そこで暫定の対応ではありますが、curl利用部分を個別のプログラムとして切り出し、そこにURLを分割して渡すことでメモリ消費を抑える形に改修しました。追々バージョンアップや別の方法に変えたいところですね…まだ記事作成時点でテスト中ですが、結果や追加対応などはまた報告できればと。外部要因の不具合はなかなか出くわさなかったので個人的には良い経験になったと思います。ではまた。・参考URLhttps://qiita.com/digitalpeak/items/4b39fdcb8fae7d09f406https://blog.eviry.com/entry/2019/07/23/160715_1
  • テクログ

    AWS-CLIコマンドでEC2のメトリクスをいろいろ取りたい

    # aws-cliコマンドさくっと、EC2のインスタンスの情報をcliで取りたいときのコマンドです。##EC2のタグについてるサーバの名前を知りたい時aws ec2 describe-instances | jq -r '.Reservations[] .Instances[] .Tags[]|select(.Key=="Name")|.Value' #ステータスがrunning状態のTagsがKey=Nameのをインスタンスを取得aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" | jq -r '.Reservations[] .Instances[] .Tags[]|select(.Key=="Name")|.Value' #running状態かつ、 TagsがKey=NameのインスタンスIDとインスタンス名を取得aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" | jq -r '.Reservations[].Instances[] | {InstanceId, InstanceName: (.Tags[] | select(.Key=="Name").Value)}' #インスタンス名だけを抽出して、整形して出力aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" | jq -r '.Reservations[].Instances[] | {InstanceId, InstanceName: (.Tags[] | select(.Key=="Name").Value)}' | grep "InstanceName" | awk '{print $2}' | sed -e 's/"//g' -e 's/,//g' > hogeファイル #インスタンスIDだけを抽出して、整形して出力aws ec2 describe-instances --filter "Name=instance-state-name,Values=running" | jq -r '.Reservations[].Instances[] | {InstanceId, InstanceName: (.Tags[] | select(.Key=="Name").Value)}' | grep "InstanceId" | awk '{print $2}' | sed -e 's/"//g' -e 's/,//g' #EC2についてるEIPを取得aws ec2 describe-addresses --query '*[].PublicIp' --output text | tr '\t' '\n' #ローカルPCからAWSへ取得したEIPリストを使ってSSHして、コマンド叩く用のシェル#!/bin/bash aws ec2 describe-addresses --query '*[].PublicIp' --output text | tr '\t' '\n' > elastic_ip.lst export AWS_HOME=${HOME}/.aws export AWS_CONFIG_FILE=${AWS_HOME}/config export ELASTIC_IP=${HOME}/elastic_ip.lst cat ${ELASTIC_IP} | while read line do ssh -n user@$line -p 22 -i /xxxxxx/xxxxxx 'example-command' > result.txt done
  • テクログ

    素敵だら! Linux コマンド ~基本編 その3~

    こんにちはうなぎです。IT開発者にとって避けては通れない数ある Linux コマンドのうちから、厳選してご紹介する不定期コーナー“素敵だら! Linux コマンド”。今回も前回に引き続き「~基本編 その3~」です。■find私の一番好きなコマンド find。その名前からもわかる通り、ファイルやディレクトリなどを探すコマンドです。まずは基本的な使い方から。今いるディレクトリの中から admin ユーザーが作成した、test_{日付}.txt ファイルってどこにあったっけ?を調べるときはfind ./ -user admin -type f -name test*.txt のようにします。`-name` は探す対象の名前を指定するオプションで、ワイルドカードが使用できます。※ `-regex` を使えば正規表現も可能です`-type` は探す対象の種類を指定します。種類は以下の通りです。ファイル `f`ディレクトリ `d`シンボリックリンク `l`これだけでも結構便利なんですが、 `find` コマンドの肝はなんといっても `-exec` オプション。これを使えば検索した結果に対して、コマンドを実行できます。例えば先ほどの test.txt をすべて削除したいときは、find ./ -user admin -type f -name test*.txt -exec rm {} \; といった具合です。この例でいうと、 `{}` に検索結果のファイルが一つずつ置き換わり、 `rm` によって削除されます。末尾についている `\;` は何かというと、セミコロンが `-exec` オプションの終了を意味し、バックスラッシュはエスケープだそうです。   参考: https://stackoverflow.com/questions/20913198/why-are-the-backslash-and-semicolon-required-with-the-find-commands-exec-optio`\;` の代わりに `+` を使用することで、コマンドに渡していた検索結果を、一つずつではなく、まとめた形で渡すことができます。上記の例でいえば、 `\;` はrm test1.txt rm test2.txt rm test3.txt となり、`+` はrm test1.txt test2.txt test3.txt となります。他にも検索するディレクトリの階層の深さを指定する `-mindepth` `-maxdepth`特定のディレクトリ検索対象から除外する `-prune`更新日からファイルを探す `-mtime`など、機能がとても充実しています。以上、細かい要望にも応えてくれる素敵な `find` コマンドでした。