「ruby」と一致するもの

最強のLinuxコマンドは何?

  • 投稿日:
  • by
  • カテゴリ:

最強のコマンドって何だろう?と、最強のなんとかっていう見出しのある本を見かけて疑問に思ったので考えてみました。

まずは出場選手について考えてみたいと思います。

出場選手 ~ いかにも強そうなコマンド ~

どういうコマンドが強いんですかね。\ いかにも強そうな感じのするコマンドたちはこちら。

kill

殺し屋ですね。強そうです。

以下のオプションが特に強いです。実際に使うときは最後にpidを指定します。

kill -KILL

pid を調べるのが面倒という方のための killall というコマンドもあります。

rm

消しちゃうのでこれも強そうです。

以下のオプションが基本ですが、今どきのGNUの rm コマンドだと消せないことも多いです。

rm -rf /

そんなときはこちら。これでも消せないという噂もありますが、試していません。

rm -rf --no-preserve-root /

poweroff

電源落としちゃうので有無を言わせない感じですね。

shutdown コマンドも同じです。shutdown コマンドの場合は以下のような感じになります。

shutdown -h now

出場選手 ~ なんでもできちゃうコマンド ~

なんでもできちゃうコマンドはなんでもできちゃうから強いよね?

bash

シェルだけどコマンドでもあるのでこれはコマンド。 引数次第で何でも実行できちゃうので、いかにも強そうなコマンドたちも実行できちゃいます。

以下のような感じで使います。

bash -c 'poweroff'

perl

プログラミング言語のインタプリタも引数次第で何でもできちゃいます。

以下のような感じで使います。

perl -e "system('poweroff');"

他にもたくさんあります。

  • ruby
  • awk

find

findコマンドはファイルを探すだけじゃありません。\ コマンドも実行できちゃいます。

以下のような感じで使います。

find -exec poweroff \;

su

使い勝手は bash に似ています。

以下のような感じで使います。

su -c poweroff

sudo

/etc/sudoers の設定次第では何でもできます。

以下のような感じで使います。

sudo poweroff

出場選手 ~ エディタ ~

vim

エディタは便利です。外部コマンド実行機能があるので任意のコマンドを実行できちゃいます。

vim '+!poweroff'

出場選手 ~ bash ビルトインコマンド ~

echo

echoは厳密にはコマンドではないけれど、コマンドとして実装されているものもあります。\ /proc/sysrq-triggerに出力することでOSシャットダウンもできちゃいます。\ ただし、SysRq Keyが有効になっていないとこれは機能しません。

以下のようにしてシャットダウンします。

echo o > /proc/sysrq-trigger

まとめ

いかにも強そうなkill、rm、poweroffコマンドですが、これらのコマンドを自由自在に操れるシェルやプログラミング言語系のコマンドもありました。エディタも実はなんでもできました。これらは最終的にいかにも強そうなコマンドを実行できるのでほぼ互角。echoはできることが限られているものの、シャットダウンができるのでpoweroffと互角。 killもできるので、killとも互角。それどころかすべてのプロセスにシグナル送信できるのでkillコマンドより強そうです。ただし、ファイル削除はできません。 しかしながら、ビルトインコマンドのechoは実行時にプロセス生成しません。そのためメモリに余裕がない場合でも実行できます。OOM Killerによるプロセス停止の可能性が低いため、コマンド実行できる可能性が高いです。

ということで、どんな場合でも力を発揮できるechoは安定力で一番。killもpoweroffもできるので強いです。しかしながら、これらはOS起動により復旧できてしまう可能性があり、持続性はありません。 持続性が高いのはやはり rm です。しかしバックアップがあれば致命傷を与えることはできないかもしれません。

コマンドにおける最強ってなんでしょうね。

vagrant コマンドを実行すると以下のエラーが出て失敗しました。

/usr/lib/ruby/vendor_ruby/vagrant/environment.rb:858:in `chmod': Operation not permitted @ chmod_internal - /home/user/.vagrant.d/insecure_private_key (Errno::EPERM)
        from /usr/lib/ruby/vendor_ruby/vagrant/environment.rb:858:in `chmod'
        from /usr/lib/ruby/vendor_ruby/vagrant/environment.rb:858:in `copy_insecure_private_key'
        from /usr/lib/ruby/vendor_ruby/vagrant/environment.rb:152:in `initialize'
        from /usr/bin/vagrant:169:in `new'
        from /usr/bin/vagrant:169:in `<main>'

environment.rbを見てみると、chmod で 0600 にしようとして失敗しているようです。 /home/user/.vagrant.d/insecure_private_key はvagrantコマンドを実行するユーザのオーナーになっていなかったために失敗していたので、オーナーを変更することでエラーなく実行できるようになりました。

msys2にrbenv-buildでruby 2.6.3をインストール(失敗)

  • 投稿日:
  • by
  • カテゴリ:

msys2にrbenv-buildでruby 2.6.3をインストールしようとして失敗してあきらめた話。 どうもmsys2でrubyをコンパイルしようとするとうまくいかないという話がちらほらあるらしいといくつか聞いたのであきらめることにした。 そもそもrbenvが動作しない。bin/rbenv を libexec/rbenv へのリンクにするととりあえず動作する。 rbenv install 2.6.3 すると、ダウンロードの途中で止まったようになり、Installing というメッセージが表示されない。 Ctrl-zで中断したときかfgで再開したときに以下のメッセージが出る。 何度か同じメッセージが出るのを確認して、ここで諦めた。

rbenv install 2.6.3
Installing ruby-2.6.3...

BUILD FAILED (MSYS_NT-10.0 3.0.6(0.338/5/3) using ruby-build 20190401-11-geee8a47)

Inspect or clean up the working tree at /tmp/ruby-build.20190423210704.9867
Results logged to /tmp/ruby-build.20190423210704.9867.log

Last 10 log lines:
/tmp/ruby-build.20190423210704.9867 ~

bzip2: I/O or other error, bailing out.  Possible reason follows.
bzip2: No error
        Input file = (stdin), output file = (stdout)
/where/to/path/.rbenv/plugins/ruby-build/bin/ruby-build: 353 行:  9912 Stopped                 tar $tar_args "$package_filename"
/tmp/ruby-build.20190423210704.9867/ruby-2.6.3 /tmp/ruby-build.20190423210704.9867 ~
/where/to/path/.rbenv/plugins/ruby-build/bin/ruby-build: 行 589: ./configure: No such file or directory

msys2でrbenv

  • 投稿日:
  • by
  • カテゴリ:

msys2を使ってみることにして、とりあえずvimのビルドしようと思ったらrubyがなかったので、rbenvを入れようとしたらなぜか動かない。

$ ~/.rbenv/bin/rbenv init
.rbenv/bin/rbenv: 行 1: ../libexec/rbenv: No such file or directory

ファイルは存在しているのに無いと言われてしまう。 同じ悩みを持つひとは、これをシンボリックリンクに変えて対処したようだ。こちら参照。 同じようにシンボリックリンクにしてみると確かに動く。 .rbenv/bin/rbenvの中身は確かに1行しかなくて、これを実行するだけなのでリンクに置き換えても問題なさそう。 問題は相対パスで書かれたものを実行できないということなのか。

切り分けのために、rbenvの中身を絶対パスに変更してみると。。

うん。動く。と思ったら引数が渡らない。 リンクのように振舞っているということか?相対パスの始まりが、コマンド実行時のカレントディレクトリになっているみたい。 試しに ~/.rbenv/bin に移動してから実行するとやはり動く。 相対パスの解釈の仕方が問題のようだ。 でも、この後の調べ方がわからない。相対パスを実行しようとするのは誰なのか。bashか? bash -xで見ても特に何も出ない。