タグ

Linuxとunixに関するzetamattaのブックマーク (71)

  • install(1)コマンドが便利だった件

    はじめに install(1)という、cpとmkdirとchmodを同時に行うような便利コマンドがあることを知りました。 (忘れちゃいましたが、何かのMakefileを見ているときに存在に気付きました) これを使うと、プロビジョニングなどのスクリプトが簡潔に書けるようになりそうです。 ……というわけで使い方のメモがてらまとめてみます。 manの内容まとめ installはBSD版とGNU版があるようですが、ここではGNU版について書きます。 BSD版ではいくつかのオプションが使用できません。(-D はなかったと思う) ちなみにmacの場合は標準でBSD版のinstallが入っており、Coreutilsを入れるとGNU版のinstallが使えるようになります。 4種類の使い方 install [OPTION]... [-T] SOURCE DEST SOURCEをDESTにコピーする。-Tを

  • bashの組込みコマンド自作によるスクリプトの高速化 - Qiita

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - Qiita
    zetamatta
    zetamatta 2017/01/18
    へー。共有ライブラリを使うのか
  • bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌

    @hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/

    bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化する - 双六工場日誌
  • Just another Ruby porter, 2014-2-c

    ■ cygwin: ~/.ssh/configでControlPathを指定するとエラー cygwinでもsshで多重接続してみたらなぜかエラーになるので調べたら、 なんかいろいろと未実装ということらしい。 Corinna Vinschen - Re: Can not make port forwarding from Cygwin when ControlMaster/ControlP 残念。 ■ AmazonのURLを単純に 今までは javascript:location.href='http://www.amazon.co.jp/dp/'+document.getElementById("ASIN").value; というbookmarkletを使っていたが、どうも最近これだと変換されないときがあって調べてみると、 確かにid="ASIN"がない場合があった。ないときはname="

    zetamatta
    zetamatta 2014/03/15
    GNU grep はそろそろ爆発していいんじゃないかな!
  • Just another Ruby porter, 2014-3-a

    ■ コード美人 これって anarchy golf - A005836なんだよねえ。 zshの解は これをちょっと変更して % repeat 100 a=$[[#2]++i]&&echo $[${a/2/3}] となる。変数を使わないなら % repeat 100 echo $[${${:-$[[#2]++i]}/2/3}] と書けるが、奇しくもサイズは同じだ。 ■ bashの1文字オプションと長いオプション まあ、bashなんてオプションつけて手で動かすことはほとんどないと思うが、 なぜか必要に迫られたりする。 sshでログイン先もzshなんだけど、ちょっとbashを使いたいななんてときに % ssh host bash とするとbashはインタラクティブだと思ってくれないのでプロンプトが出ない。 そこで-iをつけて実行してみると % ssh host bash -i bash: 端末プ

    zetamatta
    zetamatta 2014/03/15
    ほほう>「date +'%Y-%m-%d' -d "-1day month `date +'%Y%m01'`"」
  • test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、15日目の記事です。 書くのが遅れ、ネタは尽きかけ、 マニアックさやニッチさが足りなくなってきているような気がします。 ふつうの内容ですみません。 今日は test, [, [[ コマンドの違いについてざっくり紹介します。 [[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです。 [ は慎重に使わないと様々な罠にかかるため危険です。 (翌日のネタも併わせてどうぞ) test と [ の違い どちらもシェルの組込みコマンドです。名前が違うのと [ は最後の引数を ] にしなければいけない縛りがある以外、 動作まった

    zetamatta
    zetamatta 2014/01/21
    「[[」コマンドを使うべきらしいですよ
  • 私が他人のシェルスクリプトから学んだこと | Yakst

    私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、SSHサーバの2要素認証を簡単にするためのauthy-sshスクリプトに出会った。このスクリプト群を見まわしていて、みんなと共有したいたくさんのクールなことを見つけた。 出力に色付けする 出力文字列を、成功した時は緑に、失敗した時は赤に、警告は黄色に色づけしたいと思うことはたくさんあるだろう。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { e

    私が他人のシェルスクリプトから学んだこと | Yakst
    zetamatta
    zetamatta 2013/08/22
    クールという言葉も、もう死語になりつつあるな
  • PNGの最適化ツールを探して - jarp,

    ■ 久し振りのGWの谷間出勤 諸般の事情により出勤しているんだけど、電車の一旦ドア閉め乗車がなかったり、 夕の社がなかったりといろいろと新鮮だ。 ■ Ruby 1.4の頃の-eの実装とirb 昨日までのirbはこんな感じになっていた(すでに変更された)。 require "irb" if __FILE__ == $0 IRB.start(__FILE__) else # check -e option if /^-e$/ =~ $0 IRB.start(__FILE__) else IRB.setup(__FILE__) end end この-eオプションのチェックはなんか意味不明なことになってるが、 元々Ruby 1.4の時代はsample/irb.rbでこうなっていた。 require "irb/main" if __FILE__ == $0 IRB.start(__FILE__)

    zetamatta
    zetamatta 2013/05/11
    bashなら「echo $'\u6211\u3005'」 とかいう風に $'~' とやればいいのか。/usr/bin/printf もあり。ちぃ、覚えた
  • 作業効率化!PHPログを確認するシェルスクリプトを作ってみた。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作

    こんにちは。卓司です。 前回のサーバーの負荷を手軽に確認するシェルスクリプトを作ってみた。や、前々回の特定のファイルを一つのディレクトリに移動させるでは、皆様からのあたたかいご指導・ご鞭撻、誠にありがとうございました。 今回もまた、性懲りもなくシェルスクリプトについてまとめさせていただきますので、何かお気づきの点などありましたら大変お手数ではありますが、ご指摘いただけるととても嬉しいです。 1. 経緯 今PHPでプログラミングしてるんです。その時になんかの間違えでERRORが出たり、WARNINGが出たり、NOTICEが出たり。。。 出さないよう出さないよう組んではいるのですが、忘れた頃にポロッと。。。 実装に集中してしまうと中々ログまで気がまわらなくなってしまうんですよね。。。 毎日一回でいいから、ログの中身を見て、最低でもERRORとWARNINGは取り除きたいなって思うんです。。。

    作業効率化!PHPログを確認するシェルスクリプトを作ってみた。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作
    zetamatta
    zetamatta 2012/12/13
    mailコマンドでメールを送信できる環境が必要ですね
  • IDEA * IDEA

    ドットインストール代表のライフハックブログ

    IDEA * IDEA
    zetamatta
    zetamatta 2012/12/01
    直前に打ったコマンドをエディターで開く「fc」は知らなかったな。
  • Just another Ruby porter, 2012-11-b

    ■ How to automatically source zshrc in all open terminals : commandline これは素晴らしい。 trap "source ~/.zshrc" USR1 とすることで開いているすべての端末へ~/.zshrcを読ませることができるわけだ。 コメントにcronでinotifywaitについて書かれているが、 それよりはincronを使ったほうがよさげ。 ■ convertで1ドットずらして重ね合わせる X方向に1ドットずらして重ねると太くなる。 % convert foo.png \( -clone 0 -roll +1+0 \) -compose multiply -composite x: Y方向も重ねたほうがいいか。 % convert foo.png \( -clone 0 -roll +1+0 \) \( -clone

    zetamatta
    zetamatta 2012/11/12
    曰く『trap "source ~/.zshrc" USR1 とすることで開いているすべての端末へ~/.zshrcを読ませることができる』 ― zsh 以外でも使えそうですね!
  • 地雷だらけのrsyncを理解する。 - こせきの技術日記

    rsync -avz --exclude-from=pattern-file --delete SRC/ DEST SRCの末尾に/をつける。たいてい必要。 SRCスラッシュの有無は、mv SRC DEST と mv SRC/* DEST の違いと一緒。スラッシュの後ろに*が省略されているものと考える。 DESTのスラッシュの有無は関係なし。 --dry-run(-n)をつけて試す。 SRC、DESTともローカルのディレクトリを指定して試す。 DESTはまず空ディレクトリで試す。DESTが同期済みだと何が更新されるのか正確にわからないので。 --list-onlyをつけてファイル一覧を得る。 DESTを省略してファイル一覧を得る。 --list-onlyと同じ? --deleteはDESTのファイルを根こそぎ削除する可能性がある。注意。 --delete-excludedは使わない。--d

    地雷だらけのrsyncを理解する。 - こせきの技術日記
    zetamatta
    zetamatta 2012/10/05
    転送先のディレクトリは空にしといた方が安全だよなー
  • cp (UNIX) - Wikipedia

    cpはUNIXのシェル上で入力するコマンドの一種で、ファイルをある場所から別の場所へコピーする。異なるファイルシステム間でもコピーできる。元のファイルはそのまま残り、新しいファイルは同じ名前の場合もあるし、別の名前をつけることもできる。 項目ではPOSIXに定められている仕様を解説する。多くのLinuxシステムで使用しているGNU Core Utilitiesのcpには追加のオプションがある[1]。 使用法[編集] 1つのファイルを別のファイルにコピーする。 cp [ -f ] [ -H ] [ -i ] [ -p ][ -- ] SourceFile TargetFile ファイルをディレクトリにコピーする。 cp [ -f ] [ -H ] [ -i ] [ -p ] [ -r | -R ] [ -- ] SourceFile ... TargetDirectory ディレクトリを別

    zetamatta
    zetamatta 2012/09/10
    Wikipedia はゴミタメとか言う人もいるけど、POSIX での cp の定義とかも書いてあったりするので、なんだかんだ言って便利っすよ
  • 本を読む シェルスクリプトでテンポラリファイルの後始末

    プログラム中でテンポラリファイルを作ったときには、最後に削除します。シェルスクリプトだとこんな感じです。 tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX) # ここに処理いろいろ rm "$tmpfile" が、この方法には、「正常終了以外ではテンポラリファイルが削除されない」「シェルスクリプトの終了ステータスが、処理体のものでなく、rm -fのものになる」という2つの弱点があります。 で、シグナル処理とかいろいろなパターンがあるんですが、いまどきだとtrapコマンドで疑似シグナルのEXIT(シグナル0)に後始末処理を入れるのが、正常系でも異常系でも処理できて簡単かと思います。 trap 'rm -f "$tmpfile"' EXIT tmpfile=$(mktemp /tmp/tmp.XXXXXXXXXX) # ここに処理いろいろ 正常終了での終了ステータスは

    zetamatta
    zetamatta 2012/08/27
    trap コマンドはいいね!
  • tarコマンドを負荷制御(bwlimit指定)して実行する方法

    cstream - direct data streams, with bandwidth limiting, FIFO, audio, duplication and extended reporting support. ざっくり言うとデータストリームの制御とかできるよ!っていうコマンドっぽいです。オーディオアプリケーションのデータレートのエミュレーションとかで利用されているそうです。オプションではcstreamコマンドの-tを使うのですが、以下がmanでの内容になります。 -t num    Limit the throughput of the data stream to num bytes/second. Limiting is done at the input side, you can rely on cstream not accepting more than thi

    zetamatta
    zetamatta 2012/08/15
    なるほど、「tar zcfp - source_dir | cstream -t $((${BW}*1024*1024)) > target_file.tar.gz」か。ちぃ、覚えた
  • crontab -e は「絶対に」使ってはいけない - ろば電子が詰まつてゐる

    今までナチュラルにcrontab -eでcron編集をしていたのだけど、実はこれはとてつもなく危ないやり方だった。ということを、今さら知った。 crontab -rの恐怖 crontabコマンドにはrオプション(Remove)があり、これを実行すると何の警告もなく全てが消え失せる。 macbook:~ ozuma$ crontab -l 15 * * * * /home/ozuma/bin/hoge.sh 0 9 1 * * /home/ozuma/bin/piyo.sh > /dev/null 2>&1 */5 * * * * /home/ozuma/bin/fuga.sh > /dev/null 2>&1 macbook:~ ozuma$ crontab -r macbook:~ ozuma$ crontab -l crontab: no crontab for ozuma macbo

    crontab -e は「絶対に」使ってはいけない - ろば電子が詰まつてゐる
    zetamatta
    zetamatta 2012/07/23
    ワシは「crontabは-eを禁止して、常に外部ファイルを読み込ませればいいよ派」
  • はじめてのにき(2012-07-12) - scons

    _ scons http://blog.64p.org/entry/2012/07/11/224008 via https://plus.google.com/102550604876259086885/posts/AnEoGQexUcG scons なんて始まってもいねえよ! ってのが僕の感覚だなあ、たいしてしらないけど、必要じゃない機能ばっか充実しているという mukai さんのイメージに賛成する感じ。 scons に関していつも言ってる悪口に、ファイルが当に変更された時にだけ依存関係をビルドしなおしてくれるという便利な機能がある。 これはどういうことかというと、 hello.c から hello.o と hello を作ったあと、 hello.c を touch してもビルドしなおしてくれないと。 stdio.h とか書きかえた時とか、そういう特殊なことしてるからわざわざ touc

    zetamatta
    zetamatta 2012/07/14
    曰く 「scons なんて始まってもいねえよ」― 確かに touch してもリビルドしてくれないというのは糞仕様だなぁ。しかも遅いと聞く
  • disk fullでどこに大量のファイルがあるのかと思ったらumountしたディレクトリにあった - Humanity

    ハマった。 「sudo du -cksh /*」*1しても「du -S / | sort -rn | head」*2しても見つからないし、どこにあるのかと思ってふと思い出してsudo umount /mnt/dirしたらそこにあった。 スクリプトで一時的にmountしてそこにファイルをコピーみたいなことしてたらスクリプトのバグでmountしてないのにコピーしちゃったらしい。てへぺろ。(真顔) 皆さんもお気を付けください(アホか) *1:これだと/procも読むので刺さるので注意 *2:sortが一時ファイルを作るので確認できなかったけど、これも/procで刺さるような

    disk fullでどこに大量のファイルがあるのかと思ったらumountしたディレクトリにあった - Humanity
    zetamatta
    zetamatta 2012/05/06
    なるほどマウントしちゃうと、マウントポイントにあったファイルは見えなくなるからねぇ
  • Apache CVE-2012-0883 - どさにっき 2012年4月18日(水)

    2012年4月14日(土) ■ BIND + SoftHSM _ 雨ってイヤね。 _ SoftHSM をインストール。手順略。 _ openssl の pkcs#11 engineをインストール。freebsd なので ports/security/engine_pkcs11 を入れるだけ。テスト。 % openssl engine dynamic -pre SO_PATH:/usr/local/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/libsofthsm.so -t (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/local/lib/engine

    zetamatta
    zetamatta 2012/04/19
    「(shでは)$PATH で空ディレクトリはカレントディレクトリとみなす」「PATH だけでなくて LD_LIBRARY_PATH も同様に空文字列をカレントディレクトリとみなす仕様」
  • bash&zshでシングルクォートのエスケープ - ボクノス

    ハマったのでメモ。 bash&zshでシングルクォートのエスケープをする場合はちょっとしたテクニックが必要らしい。 ダメダメ例 ダメダメなエスケープ。 % echo 'tanaka\'s OS' quote>残念ながら'tanaka\'で終わってしまう。 回避する。 エスケープするにはちょっとしたテクが必要。 % echo 'tanaka'\''s OS' tanaka's OS'\''という意味不明なエスケープをする。 何故か? 分解してみる。 % echo 'tanaka' \' 's OS' tanaka ' s OSシングルクォートの中で\'というエスケープが出来ないので、一旦文字列を終了し、\'を入力。もう一度文字列を再開する。 まとめ シングルクォートのエスケープはかなり面倒。 shも同様なので、シェルスクリプトを書く際は要注意。 ダブルクオートなら"tanaka's OS"だ

    bash&zshでシングルクォートのエスケープ - ボクノス
    zetamatta
    zetamatta 2012/02/24
    ×'tanaka\'s OS' ○ 'tanaka'\''s OS' ― むむーん