コンテンツにスキップ

Linux

Unix timeの扱い

Unix time を日付及び時刻に変換したいこと、日付及び時刻を Unix time に変換したいことがある。

Unix time からの変換

$ date -r 616388399
1989年 7月14日 金曜日 11時59分59秒 JST

日付からの変換

$ date -jf '%Y-%m-%d %H:%M:%S' '1989-07-14 11:59:59' +%s
616388399

sed コマンドで置換

ファイルの中身を置換する必要があったので sed コマンドを使った。

使うオプション

今回使うのは

  • 変換処理の条件式を指定するための e オプション
  • 変換してそのままファイルを上書きする i オプション

やってみる

今回はこんな感じ

sed -ie '条件式' ファイル名
$ cat test
testtesttest

$ sed -ie 's/test/hoge/g' test

$ cat test
hogehogehoge

$ ls
test teste

指定したファイルは条件に沿って置換されているが、オリジナルの内容を持ったファイルも生成されている

オリジナルの内容を持ったファイルは使う sed コマンド(OS)によって元のファイル名に 'e' が付いたり '-e' が付いたりする

find コマンドの使い方

いつまでも find コマンドの使い方を覚えられないアホなのでメモしておく。。。

基本的に

find [探すディレクトリ] -name 'ファイルの条件'

これだけは覚えとけ、と。

たまには

find . -name '*.swp' -ok rm {} \;

見つけたファイルをそのまま次のコマンドに受け渡す -ok オプションもたまには使えるかも知れない。

xdg-open コマンドとは

以前 初めてのYeoman (Grunt/Bowerを使ってみる) というエントリで Grunt を実行したときに

Warning: Command failed: /home/sojiro/yeoman/angular_fullstack/node_modules/open/vendor/xdg-open: line 584: xdg-mime: コマンドが見つかりません

と怒られたことがあったので xdg-open コマンドについて少し調べてみます

xdg-open コマンドのインストール

xdg-open の実体はシェルスクリプトである

すんなりインストールできるかと思いきや普段の CentOS に入れるのに手こずってしまった

どうやら Ubuntu との相性が良いようなので Vagrant で Ubuntu を立ち上げてそこでインストールしてみる

Ubuntu のセットアップ

Vagrant で Ubuntu 環境をセットアップする

まずは box のインストールから

$ vagrant box add ubuntu http://goo.gl/8kWkm
==> box: Adding box 'ubuntu' (v0) for provider: 
   box: Downloading: http://goo.gl/8kWkm
==> box: Successfully added box 'ubuntu' (v0) for 'virtualbox'!
$ vagrant box list
centos64 (virtualbox, 0)
ubuntu   (virtualbox, 0)

box がセットアップできたら立ち上げまで行ってしまう

$ mkdir ubuntu
$ cd ubuntu/
$ vagrant init ubuntu
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ ls
Vagrantfile
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu_default_1432117537476_54763
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
   default: Adapter 1: nat
==> default: Forwarding ports...
   default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...

立ち上がったら以下のコマンドで Ubuntu 環境に入り、インストールの準備が完了する

$ vagrant ssh
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-generic x86_64)

* Documentation:  https://help.ubuntu.com/

 System information as of Wed May 20 07:30:10 BRT 2015

 System load:  0.0               Processes:           73
 Usage of /:   11.7% of 7.87GB   Users logged in:     0
 Memory usage: 1%                IP address for eth0: 10.0.2.15
 Swap usage:   0%

 Graph this data and manage this system at https://landscape.canonical.com/

New release '14.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

インストール

ここからいよいよ Ubuntu に xdg-open をインストールしていく

最初から入ってたらラッキーだなーと思いつつ打ってみる

$ xdg-open
The program 'xdg-open' is currently not installed.  You can install it by typing:
sudo apt-get install xdg-utils

思いがけず大ヒントが返ってきたので従う

xdg-utils は xdg-open を内包するパッケージである

$ sudo apt-get install xdg-utils
Reading package lists... Done
Building dependency tree
...
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

エラーになってしまった

しかしまたヒントがあるので従う

$ sudo apt-get install xdg-utils --fix-missing
Reading package lists... Done
Building dependency tree
...
Extracting templates from packages: 100%
Preconfiguring packages ...
Selecting previously unselected package ttf-dejavu-core.

晴れてインストール完了

使ってみる

  • テキストファイル: 普通に開ける
  • 画像ファイル: 開けるメソッドがなくエラー(環境立ち上げたばかりなので)

ディレクトリを指定

$ mkdir test
$ touch test/file
$ xdg-open test/

{% img /images/xdg_open/directory.png %}

URL を指定してみる

$ xdg-open http://blog.sojiro.me

{% img /images/xdg_open/blog.png %}

$ xdg-open http://google.com

{% img /images/xdg_open/google.png %}

ブラウザはないが URL を指定すると CUI 上で Web ページが開ける

参照

AWSのLinuxにMongoDBをインストール

AWSで借りたサーバーにmongoDBが入っていなかったのでインストールした手順

YUMの設定

パッケージ管理システムであるYUMにmongoDB用の設定を追加する

$ sudo vim /etc/yum.repos.d/mongodb.repo

``` bash /etc/yum.repos.d/mongodb.repo [mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1

これでYUMにmongoDBのリポジトリが追加される

<!-- more -->

## mongoDBのインストール
今回は何も考えず最新のバージョンをインストールするので以下のコマンドで実行する
``` bash
$ sudo yum install mongodb-org
読み込んだプラグイン:priorities, update-motd, upgrade-helper
...
============================================================================================================================================================================================================
 Package                                                  アーキテクチャー                             バージョン                                       リポジトリー                                   容量
============================================================================================================================================================================================================
インストール中:
 mongodb-org                                              x86_64                                       2.6.6-1                                          mongodb                                       4.9 k
依存性関連でのインストールをします:
 mongodb-org-mongos                                       x86_64                                       2.6.6-1                                          mongodb                                       6.8 M
 mongodb-org-server                                       x86_64                                       2.6.6-1                                          mongodb                                       9.0 M
 mongodb-org-shell                                        x86_64                                       2.6.6-1                                          mongodb                                       4.3 M
 mongodb-org-tools                                        x86_64                                       2.6.6-1                                          mongodb                                        90 M

トランザクションの要約
============================================================================================================================================================================================================
インストール  1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 110 M
インストール容量: 277 M
Is this ok [y/d/N]: y
Downloading packages:
...
完了しました!

確認

$ mongo --version
MongoDB shell version: 2.6.6

インストール完了

参照

LinuxにRuby on Railsをインストールする

Ruby on Railsを使ってみたいと思い、AWSにインストールした手順。

Ruby version 2.0.0 を RVMを使ってインストール

Linuxに最新のRubyをインストールするを参照

gemsetの作成

Rubyをインストールしたら、Railsのアプリケーションを実行するために必要な他のソフトウェア向けにシステムを構成する必要があります。通常、これはgemのインストールに関連します。gemとは自己完結型のRubyコードのパッケージです。バージョン番号の異なるgem同士がコンフリクトすることがあるため、一連のgemを自己完結的にまとめたgemsetというものを作成してバージョンを使い分けるのが便利です。 (引用: Ruby on Rails チュートリアル

以下のコマンドでgemsetを作成する。

$ rvm use 2.0.0@railstutorial_rails_4_0 --create --default

上のコマンドを実行すると、Ruby 2.0.0に関連付けられたrailstutorial_rails_4_0というgemsetを作成し (--create)、その場でgemsetを有効にし (use)、gemsetをデフォルトに設定 (--default) します。これにより、ターミナルウィンドウを開いたときに2.0.0@railstutorial_rails_4_0というRubyとgemsetの組み合わせが常に選択されるようになります。 (引用: Ruby on Rails チュートリアル

RubyGemsのインストール

AWSには始めからgemがインストールされていて、PATHは以下。

$ which gem
/usr/bin/gem

RVMでRubyをインストールするとPATHが上書きされる。

$ which gem
~/.rvm/rubies/ruby-2.0.0-p594/bin/gem

今回はチュートリアルに合わせてgemのバージョンを更新する

$ gem update --system 2.0.3

gemの設定ファイルである .gemrc に自動生成されるドキュメントである rirdoc の自動生成を抑制する設定をする

$ vim .gemrc
$ cat .gemrc
install: --no-rdoc --no-ri
update:  --no-rdoc --no-ri

Railsをインストールする

いよいよRailsをインストールする

$ gem install rails --version 4.0.5

インストール完了。 以下のコマンドで確認する

$ rails -v
Rails 4.0.5

Railsがインストールされたことを確認できた

参照

Ruby on Rails チュートリアル

Linuxに最新のRubyをインストールする

Ruby on Railsを使ってみたいと思い、調べてみるとRails4ではRubyのバージョンは1.9以降が必須のようである。

自分がさくらで借りているサーバーではRubyのバージョンが1.8.7だったのでこれを新しくしてみた。

RVMのインストール

新しいRubyをインストールする前にRVM(Ruby Version Manager)をインストールする。これはRubyをバージョンごとに管理するツール

$ curl -L https://get.rvm.io | bash -s

このコマンドで自分のホームディレクトリ以下に .rvm/ が作られ、ここにRVMがインストールされる。

そして .profile .bashrc .zshrc にPATHを通す記述が追加される。

また、 .bash_profile .zlogin にRVMをロードする記述が追加される。

RVMのインストールが完了したらロードする。ここではbashを使っているので以下のようにする。

$ source .bash_profile

Rubyのインストール

さくらのレンタルサーバーでの失敗

まずはRubyのインストールに必要なパーツを調べ、無ければインストールする。 以下のコマンドで必要なものをピックアップしインストールまで行ってくれる。

$ rvm requirements
/your/home/directry/.rvm/scripts/functions/support: line 314: rvm_debug: command not found
Checking requirements for freebsd.
Installing requirements for freebsd.
Updating system.
Installing required packages: automake, bison, readline, libyaml...
Error running 'requirements_freebsd_libs_install automake bison readline libyaml',

ここでErrorが発生。内容は必要なパッケージがインストールできなかったということ。 そこでFreeBSDのパッケージ管理コマンドである pkg コマンドを使ってインストールを試みる。

が、サーバーの設定的に自分でパッケージを追加することができなかったのでさくらのサーバーを断念してAWSに移行した。

AWSに移行

AWSに移行して $ rvm requirements までを実行する。(AWSは始めからRubyのバージョンが2.0.0だったが構わず実行) ここでも $ rvm requirements が転ける。

そこで今度はCentOSだったので yum を使ってインストールを試みる。以下のコマンドは $ rvm requirements が教えてくれる。Errorの原因が sudo で実行していなかったことなので sudo 付きで実行する。

sudo yum install -y patch libyaml-devel libffi-devel glibc-headers autoconf gcc-c++ glibc-devel patch readline-devel zlib-devel openssl-devel automake libtool bison

これで成功。

$ rvm requirements
Checking requirements for amazon.
Requirements installation successful.

$ rvm requirementsも成功。

このサーバーではすでにバージョン2.0.0のRubyがインストールされていたが、RVMの配下に新たにバージョン2.0.0のRubyをインストールする。

$ rvm install 2.0.0 --with-openssl-dir=$HOME/.rvm/usr

インストール完了。

参考

Ruby on Rails チュートリアル

Amazon Linux AMIにagをインストールした手順

AWSでWebサーバーを借りた。このサーバーにagをインストールした際の手順。

agとは

ソースコードから特定のwordを検索する際に使うコマンドgrepがより賢く改良されたのがackコマンド。

このackをさらに改良し、検索を高速化させたのがagコマンド(正式名称:The Silver Searcher)である。

Amazon Linux AMIへのインストール

MacにはHomebrewを使ってbrew install the_silver_searcherとするだけで簡単に入れることができた。

AWSで借りたサーバーはAmazon Linux AMIという独自のイメージだったが、yumが使えるのでCentOSと同じ以下の手順で入れることができた。

ディレクトリの作成とソースのダウンロード

ソースをダウンロード、インストールするディレクトリを作成し、gitからagのソースを持ってくる

$ mkdir -p $HOME/local/source
$ cd $HOME/local/source
$ git clone https://github.com/ggreer/the_silver_searcher

ソースをmakeするための準備

対象のサーバーはまっさらな状態でコンパイラなどもなかったため、それぞれインストールする。

前述の通りAmazon Linux AMIではyumを使うことができる

$ sudo su -
yum -y groupinstall "Development Tools"
yum -y install pcre-devel xz-devel
exit

インストール

コンパイルしてインストールする

$ cd $HOME/local/source/the_silver_searcher
$ ./build.sh
$ sudo make install

パスを通す

$ cd
$ vim .bashrc
$ cat .bashrc
...
export PATH=$HOME/local/bin:$PATH
...
$ source .bashrc

これでagが使えるようになった

参考

AWSに複数のユーザーを設定した手順

AWSでサーバーを借りて複数人で共同開発することになった。 それに伴い、借りたサーバーに各々がアクセスできるようユーザーの設定をした際の手順メモ。

AWSでWEBサーバーを借りる

AWSのWebサーバーレンタルサービスはEC2と呼ばれる。 サーバーをレンタルするには様々あるサービス群からEC2を選択し、Launch Instance ボタンを押してInstanceの立ち上げを開始する。

  • AMI(Amazon Machine Image)の選択
    • 借りるマシンの種類を選ぶ。用途によって様々な種類がある(WordPressが既に設定されているものなど)
  • Instance Typeの選択
    • マシンのスペックを選ぶ。メモリやストレージのサイズなど
  • Instanceの詳細設定
  • Storageの設定
  • Instanceへのtag付け
  • Security Groupの選択
    • アクセスを許可するプロトコルやIPなどを指定してその設定をグループとして扱う

上記のほとんどの設定は後から変更できる。AMIの選択がしっかりできれば問題なさそう。

最後まで完了すると秘密鍵(hogehoge.pem)が発行される。これは絶対になくしてはいけない。

立ち上げたInstanceに複数ユーザーを設定する

立ち上げたInstanceにアクセスする。 今回はWebサーバーとして立ち上げるのでSecurity GroupにはHTTPとSSHでのアクセスを許可するよう設定しておく。

秘密鍵でアクセスする

まずはInstance立ち上げ時に発行された秘密鍵でアクセスする

[sojiro@local ~]$ chmod 600 hogehoge.pem  # 秘密鍵の権限を設定(厳しすぎても甘過ぎても使えない)
[sojiro@local ~]$ ssh -i hogehoge.pem ec2-user@xx.xx.xx.xxx  # ec2-userでログイン
  • ダウンロード直後の秘密鍵は権限が適切ではない可能性がある。その場合は600に設定する。
  • ssh-iオプションを使って秘密鍵を指定してログイン(秘密鍵を指定しないと~/.ssh/id_rsaが使われる)
    • 最初は初期設定されているec2-userというユーザーでログインする
    • コマンドはEC2のメニューバーからInstancesページに行き、Instanceを選択してページ上部のConnectボタンを押すと表示される

ユーザーの作成

Instanceにログインできたら早速ユーザーを作成していく

[ec2-user@ip-hogehoge ~]$ sudo su -  # rootユーザーになる
[root@ip-hogehoge ~] adduser sojiro  # ユーザー(sojiro)を作成
[root@ip-hogehoge ~] passwd sojiro   # sojiroにパスワードを設定
[root@ip-hogehoge ~] vim /etc/sudoers  # sojiroに権限を設定

ユーザーを作り、ユーザーに権限を付与する。今回は大雑把にrootと同じことができる権限を付与。

[root@ip-hogehoge ~] cat /etc/sudors
...
root    ALL=(ALL)       ALL
sojiro  ALL=(ALL)       ALL
...

公開鍵の登録

作成したユーザーにlocalからアクセスするための公開鍵を設定する。 (鍵のペアはlocalで予めssh-keygen -t rsaで作成しておく)

[root@ip-hogehoge ~] su sojiro
[sojiro@ip-hogehoge root]$ cd  # sojiroのホームディレクトリに移動
[sojiro@ip-hogehoge ~]$ mkdir .ssh
[sojiro@ip-hogehoge ~]$ vim .ssh/authorized_keys  # 公開鍵を置く(今回はlocalのid_rsa.pubをコピペした)
[sojiro@ip-hogehoge ~]$ chmod 700 .ssh
[sojiro@ip-hogehoge ~]$ chmod 600 .ssh/authorized_keys
  • 公開鍵を置くファイルの名前は.sshディレクトリ配下のauthorized_keysと決まっている
  • .sshディレクトリとauthorized_keysの権限にも気をつける

作成したユーザーでInstanceにログインできることを確認

[sojiro@local ~]$ ssh sojiro@xx.xx.xx.xxx  # ログインできればOK

localのrsa鍵でログインできることを確認できれば完了。

この操作で必要なユーザーを適宜作成する。

参考

新規に作成した鍵でEC2インスタンスにSSH接続する