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
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
ファイルの内容を直接クリップボードにコピーしたり、クリップボードからファイルにペーストしたいことがある。
$ cat ~/Desktop/memo.text | pbcopy
$ pbpaste > ~/Documents/memo.text
ファイルの中身を置換する必要があったので 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 [探すディレクトリ] -name 'ファイルの条件'
これだけは覚えとけ、と。
find . -name '*.swp' -ok rm {} \;
見つけたファイルをそのまま次のコマンドに受け渡す -ok
オプションもたまには使えるかも知れない。
以前 初めての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 の実体はシェルスクリプトである
すんなりインストールできるかと思いきや普段の CentOS に入れるのに手こずってしまった
どうやら Ubuntu との相性が良いようなので Vagrant で 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 %}
$ 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で借りたサーバーにmongoDBが入っていなかったのでインストールした手順
パッケージ管理システムである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
インストール完了
Ruby on Railsを使ってみたいと思い、AWSにインストールした手順。
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 チュートリアル)
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
に自動生成されるドキュメントである ri
と rdoc
の自動生成を抑制する設定をする
$ vim .gemrc
$ cat .gemrc
install: --no-rdoc --no-ri
update: --no-rdoc --no-ri
いよいよRailsをインストールする
$ gem install rails --version 4.0.5
インストール完了。 以下のコマンドで確認する
$ rails -v
Rails 4.0.5
Railsがインストールされたことを確認できた
Ruby on Railsを使ってみたいと思い、調べてみるとRails4ではRubyのバージョンは1.9以降が必須のようである。
自分がさくらで借りているサーバーではRubyのバージョンが1.8.7だったのでこれを新しくしてみた。
新しい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のインストールに必要なパーツを調べ、無ければインストールする。 以下のコマンドで必要なものをピックアップしインストールまで行ってくれる。
$ 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に移行して $ 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
インストール完了。
AWSでWebサーバーを借りた。このサーバーにag
をインストールした際の手順。
ソースコードから特定のwordを検索する際に使うコマンドgrep
がより賢く改良されたのがack
コマンド。
このack
をさらに改良し、検索を高速化させたのがag
コマンド(正式名称:The Silver Searcher)である。
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
対象のサーバーはまっさらな状態でコンパイラなどもなかったため、それぞれインストールする。
前述の通り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のWebサーバーレンタルサービスはEC2と呼ばれる。
サーバーをレンタルするには様々あるサービス群からEC2を選択し、Launch Instance
ボタンを押してInstanceの立ち上げを開始する。
上記のほとんどの設定は後から変更できる。AMIの選択がしっかりできれば問題なさそう。
最後まで完了すると秘密鍵(hogehoge.pem)が発行される。これは絶対になくしてはいけない。
立ち上げた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でログイン
ssh
の-i
オプションを使って秘密鍵を指定してログイン(秘密鍵を指定しないと~/.ssh/id_rsaが使われる)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
の権限にも気をつける[sojiro@local ~]$ ssh sojiro@xx.xx.xx.xxx # ログインできればOK
localのrsa鍵でログインできることを確認できれば完了。
この操作で必要なユーザーを適宜作成する。