それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

curl で ファイルダウンロード名を自動的につける(disposition 名にする)

ファイルダウンロードURLをcurl した時に、名前が・・・

curl -L -o  'https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download'

つらい・・・

takuya@:~$ ls uc\?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA\&export=download
-rw-rw-r-- 1 takuya takuya 7805504 2016-07-07 17:02 uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download

こんなファイル名いらない・・・・

ファイル名を自動でつけて欲しい

ダウンロード時には Content-disposition ヘッダでファイル名を指定されているのでソレを使ってファイルを使うことにする。

-vLJO   --remote-header-name

これで平和になる。

curl -LOJ  'https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download'

参考資料

[curl/wget]Content-Dispositionのファイル名でダウンロードする | Siguniang's Blog

google drive を コマンドから使うgdrive が早くて便利

Google Drive 使ってますか?

はい、私はほぼ無限容量を持っているので、Google Drive が大活躍しています。

Google DriveにログだのVMだの殆どをバックアップ出来て便利。

google drive をコマンドから使いたい

fuse なども色々有りますが、ocamlfuse の google dirve なども試しました。

go で書かれた gdrive が1番使いやすかった

github.com

!!2020-01-28 更新!!

この記事は古いです。

この目的の場合、rclone 使ってください。

rclone については次の記事に書いてあります。

rclone コマンドで google ドライブにデータを転送する(rcloneインストール方法と使い方) - それマグで!

rclone よりgdrive コマンドより使いやすいです。

インストール

macOS X の場合

brew install gdrive 

linux の場合、curl して chmod する

curl -JLO https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download 
chmod +x gdrive-linux-x64
mv gdrive-linux-x64 /usr/local/bin
alias gdrive=gdrive-linux-x64

使い方:OAuth キーの取得

とにかく最初に list する

gdrive list 

すると、認証URLを放ってくれるので、URLにアクセスして、認証トークンを頂いてくる

主な機能

  • アップロード
  • ダウンロード
  • フォルダ毎同期

とくに、フォルダ同期が便利で、fsevent に貼り付けてgdrive 起動したら、DropBoxイラネ!ってなる。

macOS X のlaunchdなら手軽にフォルダ監視スクリプトを登録できるから、DroboxやGoogleDriveの機能を手軽に作ることが出来る。

速度が早い

OcamlFuseを使ってたんだけど、gdriveの方が転送速度が早いので、主にコッチを使うことになると思います。

初回起動後のOAuth設定

初回起動し、OAuthを設定したら、ファイルが生成される

~/.gdrive/token_v2.json

これがトークンのファイル。ファイルを消せばもう一度初期設定からやり直せる。

基本的な操作方法

GoogleDriveのファイルの一覧

gdrive list 

list コマンドで、ファイルの一覧をだせる。この結果からわかるのがGoogleDrive特徴です。ドライブではファイルはID管理されていて、KVSになっているという点ですね。つまり、単純なファイルのキーの一覧になりますね。フラットな感じ。

ダウンロード

gdrive download XXxxxXXXXX

Id を指定してダウンロードする。

ディレクトリのダウンロード

ディレクトリのIDを指定して、GoogleDriveディレクトリをダウンロードするには、recursive オプションが必要でした。

gdrive download XXXXXX --recursive

カレントディレクトリにダウンロードできる。ディレクトリの中身がまるっと出てくるので楽チン

アップロード

gdrive upload my-file.rb 

GoogleDrive側のファイルを削除

gdrive delete XXXXXXXXXXXXXXX

目的のファイルが見つからないよ。。。

list してもファイルが見つからないことのほうが多いですよね。 query 使います。

gdrive list -q 'name contains "word" '

詳しくはここ。https://developers.google.com/drive/search-parameters

でも、マニュアル読んでもよくわからないですよね。

とりあえず、最初にこれ

  • name contains 'keyword'
  • modifiedTime >= '2016-07-24'
  • fullText contains 'keyword'
  • trashed = false

を覚えておいて。

この条件を and で繋げばいいんですよ。

とくに、ダウンロードするには trashed = false をつけないと、ゴミ箱のファイルを取り出しちゃうので注意が必要だった。

まとめてダウンロードしたい

検索結果をまとめて取出すには

gdrive list --no-header | cut  -d ' ' -f 1 | xargs ...

--no-header オプションと組み合わせると嬉しい感じ。

sync 同期 アップロード

ローカル→GoogleDriveへの同期アップロードも出来ます。

SyncするにはSync専用のディレクトリが必要なようです。空のディレクトリを作ります。

mkdir my-test
gdrive upload my-test
gdrive list 'name contains "my-test"'

ここで作られたIDを元に、同期したいディレクトリをサーバーへ転送します。

gdrive sync src ID_XXXXXXXXXXX

同期用に指定した空のディレクトリやファイルにはappPropertiesでフラグがたつらしい。このフラグを使って同期対象を識別し、同期処理を行うのに利用するみたいですね。

アップロード上限について

自分のAPIキーを入れることで帯域幅が確保できます。

gdrive 諦めた

gdrive はちょっとくせがあるので、 rclone に移行した

rclone コマンドで google ドライブにデータを転送する(rcloneインストール方法と使い方) - それマグで!

2016-12-21 追記

Google Drive は有料課金するとストレージ容量が無制限になるので、かなり遊べますよ

2019/03/28

追記

2022-04-06

追記

macOS Xのopen や cygwin/cygstart をlinuxでやる

open コマンド便利すぎてヤバイ

mac 使ってると open コマンド便利すてヤバイ

cygwin なら cygstart

alias open='cygstart'

linuxならどうするの

デスクトップで入れてるXのシステムによりますが

gnome 系が多いので

alias open='gnome-open'

または

alis open='xdg-open'

でできる。Openで開くのまじ便利。

/home を別パーティションに動かす

/homeを別パーティションに動かすことにした

linux の /home を別パーティションに動かすことにしてマウントの管理方法を変えた

パーティションをLVMで作成

パーティションの確保には、今回はLVMを使った

sudo lvcreate -L 50G -n my-home VGNAME

作ったパーティションをフォーマット

sudo mkfs.ext4 /dev/mapper/VGNAME-my-home

/homeをコピー

Permissionを維持したままCOPYするのはrsync が便利なので rsync

作業用にマウントする

sudo mount /dev/mapper/VGNAME-my-home /mnt/new-home

/home/USER/内部でさらに mount してたらヤヤコシイので umount もしておく

umount /home/*
sudo find /home/ -type d -exec umount {} \;

コピーするファイルを確認する。

sudo rsync -nav /home/ /mnt/new-home

rsync する場合は必ず自前にチェックすることが大事

チェックして大丈夫ならコピーする

sudo rsync -av /home/ /mnt/new-home

古い/home はマウント切り替えたらアクセスできなくなるのでディレクトリ名を変えておく

sudo mv /home /home.old

fstab を変更する

sudo vim /etc/fstab

fstab でマウントポイントを指定する

# / was on /dev/sdb6 during installation
UUID=xxxxx-f5c0-4456-b31c-xxxxxxx /               ext4    noatime,nodiratime,discard 0       1
UUID=xxxxx-2274-4a63-83cd-xxxxxx /home       ext4    noatime,nodiratime,discard 0       2 # 追加

作業が終わったのでreboot する

sudo reboot

再起動して、問題なければ古いやつを消す

sudo rm -rf /home.old

まとめ

/homeを別パーティションに動かすときは、色々と面倒くさい

なにより、ログインしてる状態では /homeを使っているので、起動中の切替は本当に面倒くさい

/homeは、たくさんのユーザのPermissionが混在するのでPermissionを意識しないとダメだった。

マウントポイントで上書きされちゃうので元パーティションの/homeにアクセスできなくなってしまうので、名前の変更を忘れると削除できないのでチュウが必要だった。

/home はファイルがどんどんたまるので、別ボリュームにしておくほうが管理がやっぱり楽だなぁ

MacでApple ID でトラブって死にかけた時の対処法

icloud や iMessage にログイン出来なくなった。

2016-07-03 iMessageやFactime に iCloud にログイン出来なくなった

現在サインイン出来ません

icloud にログインしようとして、現在サインインできませんばかり。

f:id:takuya_1st:20160703025148p:plain

もちろん iCloud のステータスはグリーン

f:id:takuya_1st:20160703025612p:plain:w300

Appleクラウドサービスの稼働状況はオールグリーンで問題ない。

その他のエラー

Message.app でiMessageにログインしようとしたら、パスワードをアップデートしろと通告が出てくる。

f:id:takuya_1st:20160703025145p:plain

しかしもちろん、問題ない

apple id のサイトや、icloud.com 、itunesMac AppStore 、iOS App Storeは問題なくログインできるし、パスワードの更新を促されることもなかった。

iOS ・WEBサイトでは問題なくログインができる。

しかしMacだけがエラーになる。

f:id:takuya_1st:20160703025152p:plain

原因はコレだと思う。

iCloudのサービスで間違ったパスワードの情報が同期された可能性が高い。

f:id:takuya_1st:20160703025150p:plain

どうやらもろにこの被害を食らった模様。

なぜかというと、FacetimeやiMessageが使えなくなったのがこの時間帯からなのです。

さらにこの日付以前のキーチェーンに戻したら再現しなくなったので、間違いなくこのエラーなのですが、Appleサポート連絡してもOSXを再インストールしろとか無茶を言われて困り果てていました。

対策はキーチェーンを消す。

あれこれ、あれこれ考えてうんうん唸った結果、iMessage や iCloud のログインや証明書などはすべて、キーチェーンに入っている。このことに思い当たった。

Keychain を新しくすれば元通りになった。

キーチェーンのアプリでデフォルトキーチェーンをかえて新しく作ったら、全てがまた動くようになった。

本当に苦労したので、メモしておく。

バックアップがある場合は

バックアップから、キーチェーンを取り出せば元通りになりました。

キーチェーンのバックアップは重要!!!!!!!!!!!!!

キーチェーンは手動でもいいからバックアップとっておくべきですね。

Apple 製品、特にMacはアカウントやデータのバックより再優先でキーチェーンを保存する必要がありますね。

キーチェーンを失うと大変。

キーチェーンには、パスワードだけじゃなく、アプリが自身のデータの暗号化を解除したり、証明書などとても重要なものが含まれているので、キーチェーンが壊れると大変なことになる。。。

キーチェーンだけは、毎週バックアップを直近半年分持っててもいいくらいだわ・・・

本当に苦労した。休み一日消えたよ。。。

Karabiner でMacbookPro 日本語(JIS配列)キーを英語(US配列)キーとして使う

日本語キーボード大好き

USキーボードがいいとか、日本語キーが良いとか、人によって好みはあると思います。

私は日本語キーが大好きです。

でも英語キーボードも好きです!

英語キーボードの記号の入力のしやすさといったら。最高よ。

1つのキーボードで両方使う

英語キーボードも日本語キーボードも両方使いたい!

でも、MacBookのキーボードは日本語キーボードだ。

そうだよ、キー配置だけ英語キーボードのフリをすればいいんだよ。

日本語キーボードを英語キーとして使う

日本語キーとして使ったり、英語キーとして使ったり、柔軟に切り替えて使えると便利だと思いませんか?

日本語キーボードは便利なんだけど、プログラミングを行うときにはやっぱり不便

とくに

  • 「=」イコール
  • 「 ’ 」シングルクォート
  • 「 [ ] 」左右ブラケット

配列、とくにハッシュに代入するときに、シフトキーを押しっぱなしになるのが拷問だと思います。

Karabiner で日本語キーボードを英語キーに

Kabinerを使えば出来ます。

新規プロファイル「USキーボードfake」を作って、use japanese keyboard as US Keyboardを選んでしまえば、英語キーとして使えます。

f:id:takuya_1st:20160703021341j:plain:w300

英語キーとして使う時のポイント

見たママが基本的に英語キーの配列になります。

ただし一致しない項目がある。

次のキーボードのキーは配置が異なるので、覚えておくと便利。

f:id:takuya_1st:20160703020718j:plain

なぜUSキーボードを買わないのか?

だったらUSキーボードを買えばいいじゃないか。

USキーボードを外付けでつければいいじゃないかと言われる方も多いでしょう。

私は、それでも日本語キーボードを買いました。

日本語キーボードを英語キーボードとみなすメリット

日本語キーボードを英語キーボードに看做して使うのが最高よ。どちらも気分転換で使い分け出来る。

英語キーボードを日本語キーボードとして見なすのは難しい。なぜなら日本語キーボードにはいくつかの特徴があるからです。

キーボードのキートップ数が多い

日本語キーを選んでいる理由の1番大きな理由が、キートップ数の多さです。

英語キーボードに比べて3つ多い

3つ多いんですよ。3つ。ココが重要

写真を見て下さい、3つ多いでしょ?

  • 「ろ」
  • 「かな」
  • 「英数」

の3つが多いんです。

f:id:takuya_1st:20160703020823j:plain

3つの多さは大事

日本語を扱う私達は、「日本語入力のオンオフ」を常にすることになります、 Cmd+Space で切り替えているとどうしても不便なんですね。

このうち1つを「全角・半角」のように使ってしまえば残り2つは自由にアサインできます。

karabinerで3つを好きに使う

多い3つ。ここに好きなキーを割り当てれば、最高のキーボードが完成します。

わたしは右Ctrlがないと死ぬひとなので、右ctrlに使っています

多いからこそ出来る特徴:左右両方に cmd / ctrl / option

「かな・英数」のいずれかを「全角・半角」として使ってしまう

すると、下段キーが1つ多くなります。

Karabinerでこのキーを有効活用できます。

余ったキーをOptionやCtrlに割り当ててしまえば、Emacs派のみなさんもVim派のみなさんも仲良くなれると思います。

だって左右のどちらでもCtrl/Option/Cmdが押せるようになるのですから!

シングルクォートは忌しき問題

シングルクォート・ダブルクォート論争に巻き込まれたことが有ります。

英語キーだとシングルクォートが圧倒的に使いやすいです。圧倒的に。

そういう文化的背景を考慮しないシングルクォート論争は無益だと思います。

そして論争に巻き込まれたとしても影響を受けず平然としてられるよう、英語キーとして日本語キーボードを使えるようになると便利だと思います。

バッククォートはマジ打ちやすい。

英語キーで使うと嬉しいのは

  • バッククォート
  • イコール
  • シングルクォート

マークダウンを日常的に書く私たちは、Shift押さずにバッククォートが使えるようになるのもまた便利だと思います。

日本語キーボードの弱点:ホームポジション

タッチタイピング(ブラインドタッチ)を練習した人ならわかると思いますが、

ホームポジションでキーボードが入力しにくいんです。

とくに、「M」キーから右側がやばい

日本語キーボードを使うと、どうしても指が左側に寄ってしまいます。

なので、MBPのように、ど真ん中にタッチパッドが付いてるノートパソコンはトラックパッドが暴発してしまうので、日本語キーボードは不利になります。

もしUSキーボードと日本語キーボードを迷った時は

  • Mキー、。<>・の打ち方や打つ頻度
  • タッチパッドの暴発
  • キー配置の自由な再設定

コレらも考慮して選ぶと良いと思います。

MacBookの場合、タッチパッドの暴発が起きないタッチパッドなので、安心して日本語キーボードを選ぶことが出来ました。

windowsな人は英語キーを日本語キーボードで使うにはレジストリをいじることになるのですが。トラックパッドの問題は解決しないので購入時には細心の注意が必要ですね。

これだけやっても、タッチタイピングで苦労してる今日このごろです。

購入前の練習にちょうどいいかもしれません。

日本語キーボードをUSキーボードとして使う設定は。

ゼロコストでできるので、購入前にUSキーボードの配列を覚えたり、キー配列でどれくらい変わるのか練習するのにちょうどいいと思います。

macOS X のキーボードビューワのサイズを変えることが出来る

Mac の標準キーボードビューワーのサイズを任意に拡大縮小が出来る。

意外と便利です。キー配列を覚えられない時に、ビューワーがあるととても重宝します。

サイズ変更方法の動画。

ことばでは説明しづらいので動画を見てください。

youtu.be

左上をドラッグドロップして表示サイズを任意の大きさに変更していることがわかると思います。

スクリーンキーボードの標示方法。

ソフトウェアキーボードを表示して入力することができます。

f:id:takuya_1st:20191216161713p:plain

キーボードビューワーを選んで表示します。

f:id:takuya_1st:20191216163101p:plain

キーボードが押しづらい時は左上をドラッグドロップするとサイズを変更することができます。が文字そのものを入力することができるものとできないものがあります。

ただしセキュリティには注意すること

打鍵が見られるので、セキュリティには注意すること特にパスワードを打ってる時に、どのキーを打ったか丸見えになります。

2019/12/16

追記・写真を追記してなにをしたいのかわかりやすいように改変

みんな大好き、dig コマンドの使い方(dnsを調べるあれこれ

みんな dig ってますか?

http でファイルが開けない時、真っ先に見るべきは iptable でも、ifconfig でもなくて dig です。

まず、dig を確認するよね。

dig の使い方

dig は名前解決を試みるコマンドです。

名前解決とは何か、、DNSの仕組みについては触れません。コマンドを使っていけばわかると思うし。

dig で 名前解決する

dig t.co

ドメインから、IPアドレスを探す。

dig で逆引きする。

dig -x 8.8.8.8

逆引きすると、IPアドレスからそのIPの持ち主がだいたい分かることが多い

MXレコードを指定する

dig yahoo.co.jp mx

ns レコードを探す

dig yahoo.co.jp ns

txt レコードを探す

dig yahoo.co.jp txt

表示をシンプルにする

結果だけ欲しい時に使う、プログラムと組わせて使うときに便利

dig yahoo.co.jp +short

実行結果

takuya@~/Desktop$ dig yahoo.co.jp txt +short
"v=spf1 include:spf.yahoo.co.jp ~all"

細い指定はいいから全部よこせ

ジャイアン的に、ns / soa/ a /mx など指定はいいからもういいから全部くれ。

dig  ANY flets-west.jp

DNS サーバーを指定する

@DNSサーバー を入れると指定できる。

dig hatena.ne.jp @8.8.8.8
dig xrea.com  @ns1.value-domain.com

DNSコンテンツサーバーに問い合わせるときは、DNSサーバー管理下のドメインの結果が応答される。

DNSキャッシュサーバーに問い合わせるときは、任意のドメインの問合せが出来る。

最近は、キャッシュサーバーはオープンリゾルバ対策がされている、そのため、自プロバイダ網外からは利用不可。

@ に指定するのはIPアドレスでなくても良い。

ルートからDNS辿る

dig www.yahoo.co.jp  +trace

DNSといえばDNSルートドメインから順番に辿るのですが、通常キャッシュから辿ります。 「敢えて」Rootサーバーから順番にたどります。

DNSが反映されないとか「浸透しない」とか言ってないで、まずルートから辿ってみること。

再帰問合せをオフにする

dig www.yahoo.co.jp +norec

DNSキャッシュサーバーに対する再帰問合せをオフにして(RDフラグオフ)名前入解決を依頼する。

IPv6 のアドレスがほしい

dig www-v6.iij.ad.jp aaaa

aaaa を指定しないと出てこない。ANYでもだめよ。

参考資料

  • man dig

みんな大好きman ページ

CentOS で mysql を入れたらroot パスワードどこよ?ってなった

CentOSmysql をインストール

sudo yum install http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql mysql-devel mysql-server mysql-utilities

root パスワードどこ・・・

 mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

パスワードロックかかってんの。どうすればいいの。

ログに書いてある。

sudo cat /var/log/mysqld.log | grep "temporary password"
2016-06-24T23:04:13.579055Z 1 [Note] A temporary password is generated for root@localhost: X3ebeCk*?D6p

インストール後のログを見ると書いてある。

まさか・・・の初期化ランダムパスワード

また、root でインストールした場合

 /root/.mysql_secret 

ココに書いてあることがあるとのこと。

それでも困ったらリセットする

mysql を起動するターミナルを上げておいて

sudo systemctl stop mysqld
sudo mysqld_safe --skip-grant-tables 

別のウインドウを開けてそこから別途接続する

use mysql;
update user SET PASSWORD=PASSWORD("password") WHERE USER='root';
flush privileges;
exit

これでリセットして対応する。。。。

Debianみたく初期インストール時に、パスワード聞いてくれたらイイのに。CentOS面倒くさい

CentOSの古いので試した。

mysqld_safe で起動したときに止める方法は、次の通り。

sudo /etc/init.d/mysqld stop
sudo mysqld_safe --skip-grant-tables 
sudo /etc/init.d/mysqld stop

ちなみに centos 公式の mariadb

rootパスワードなしインストールされた。これはこれで「う~ん」ってなんとも言えない感じになる。

dpkg がいいな、やっぱり。

参考資料

https://www.linode.com/docs/databases/mysql/how-to-install-mysql-on-centos-7

http://blog.manabusakai.com/2013/04/centos-mysql56-install/

2018-11-27 追記

sudo mysqld_safe --skip-grant-tables を起動したあとどうするかがわからなくなるので、追記

prinft %s は文字列の長さが指定できる!

知らなかった。%s は%s しか使えないんだと思ってました。

縦幅が綺麗に揃った文字列を出力するにはどうすればいいか、ずっと気になっててrubyruby で各種関数、phpphp で各種関数を使ってたけど、良く考えたら printf で出来ることに気付いた

Dir.glob('/*').each{|e|
  printf("%13s : \n", e )
}

出力結果

/Applications :
         /bin :
       /cores :
         /dev :
         /etc :
        /home :
     /Library :
  /lost+found :
         /net :
     /Network :
         /opt :
     /private :
        /sbin :
      /System :
         /tmp :
       /Users :
         /usr :
         /var :
     /Volumes :

あああ、気持ちいい。綺麗に出力される。

printf %10s

printf %10s ## 10 文字で空白埋め

なぜ今まで気づかなったんだろう。

シェルでも使えるよ!

printf の仕様なので、シェルスクリプトでも使える。コレも便利。

takuya@~$ ls ~ | xargs -I@ printf "%10s : \n"  @
Applications :
 Boostnote :
   Desktop :
 Documents :
 Downloads :
   Library :
    Movies :
     Music :
  Pictures :
    Public :
     Sites :
     repos :

はぁ、なんでprintf の空白埋め知らなかったんだろう。。。

ruby selenium webdriverでプロファイルを毎回同じものにする。

毎回・毎回ログイン処理を待つのを面倒くさいんですよね。

テスト時はログイン処理が必要だけど、テスト書いてる時は省略したいですよね

なので、プロファイルを指定すれば前回のCookieやらパスワード保存が使える

それなりに便利

#!/usr/bin/env ruby
##
require 'selenium-webdriver'
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
  "chromeOptions" => {
      "args" => ["--user-data-dir=/Users/takuya/Desktop/sample-profile"]
        })
driver = Selenium::WebDriver.for :chrome , :desired_capabilities => caps

class  Selenium::WebDriver::Driver
  def xpath( query)
    ret = self.find_elements(  xpath: query )
    return ret[0] if ret.size==1
    return ret
  end
  def goto ( url )
    self.navigate.to url
  end

end


driver. goto "http://twitter.com"
driver.close()

swapを消して、swap を作る方法、Swapを確認する方法

swap のドライブを変更したい

swap ドライブをSSDに移動させようと思って、消したり作ったりしてた

swap を確認する方法

単純に swapon を叩くと現在のswap が見られる

takuya@:~$ sudo swapon
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition  20G  39M   -1

swapを解除する方法

全ての swapoff する

swapoff -a 

指定した swap をoffする

swapoff /dev/sda9

swap を有効にする

swapon /dev/dm-1

Swap を作る

スワップエリアは、適当なディスクを決めて適当な場所を指定すると作ることが出来る。

ブロックデバイスとファイルが選べる。

Linuxでは、ブロックデバイスである必要はない。ファイルでも良い←しらんかった

ファイルの場合

最初にファイルを確保する

dd if=/dev/zero of=/my_swap bs=100M count=10 #テスト用なので1G
chown root. /my_swap
chmod 0600 /my_swap

スワップとして初期化する。(わすれがち

mkswap /my_swap

このファイルをマウントする

swapon /my_swap

あとは、これを/etc/fstab にでも書いておけば ファイルスワップになる。

ブロックデバイスの場合

最初にfdisk/gdisk で容量(パーティション)を作る。

LVMなら lvcreate 作ればイイ

sudo lvcreate  -L 20GB -n swap myVolgrp # lvm の例

mkswap する。ブロックデバイスをmkswapしておく

sudo mkswap /dev/mapper/acid-swap

マウントする

sudo swapon /dev/mapper/acid-swap

まとめ

  • swap は いつでもオン・オフできる
  • swap はファイルでもディスクでも何方でも良い
  • mkswap する必要がある
  • 起動時にマウントするにはfstab にかく

パーティション管理面倒くさいから、ファイルでいいならファイルにしょうかな。

参考資料

linux スワップ(swap)領域の作成

ruby で URL をパースしてGET引数をHashに展開する。(日本語URI対応)

GET引数をハッシュに変えたい

実は、頻繁にやるんだけど、毎回適当に行っていて、これといった方法を決めてなかったので、ちゃんと方法を決めることにする。

require 'uri'


module URI
  class << self
    alias :_parse :parse

    def parse a, original=false
      return self._parse a if original

      r=/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/
      a = a.gsub(r){|m|  URI.encode_www_form_component(m) }

      u = self._parse a
      if u.query
        q = u.query
        q = q.split(/&/)
        q = q.map{|e|
            n = e
            e = e.split(/=/,2)
            e<<nil unless e.size%2==0
            e
        }
        q= q.flatten
        q = Hash[*q]
        def q.to_str
          self.map{|e|e.join('=')}.join('&')
        end
        u.query = q
      end
      return u
    end
  end
    class Genric
      # alias :_query= :query=
    end
end

class URI::Generic
      alias :_query=  :query=
      def query=(v)
        return @query = v if v.class == Hash
        return self._query=(v)
      end
end

実行するとHashで返してくれる。

=>{ 
  "flow"=>"recipe_ingredient_list",
  "p"=>"1", 
  "ingredient_vals"=>"%u3058%u3083%u304C%u3044%u3082%5B-%5D",
  "ingredient_ids"=>"1_18%5B-%5D"
}

出来ることは出来たが、ruby ってやっぱり面倒くさい。もっとスマートな解決方法はないのかなぁ

2016-08-25 追加

  • GET引数が名前だけ値なしでエラーになるのを解消
  • URI.to_s/to_str で暗黙的変換ができないのを解消
  • 日本語を含むURIに対応できないので、ぱぱっと対応 ( ドメインは未対応 )

Swap の適正量 の目安

Swap の適正量

スワップファイルはどれくらいが適当なのか?

昔はRAMの2倍と言われましたが、いまだにそんなわけ無いと思うので調べてみた。

Redhat の資料によると

メモリ量 スワップサイズ
2GB 以下 メモリの2倍程度から3倍程度
2-8GB メモリと同程度から2倍程度
8-64GB メモリの1.5倍程度

f:id:takuya_1st:20160701171258p:plain:w400

つまり休止状態でメモリダンプする量+2GB程度、10GBもあれば十なんだよ。

判断のポイントは休止状態をどうするか

休止状態を考慮しなくていいならもっと少なくていいそうだ。

メモリと同程度(余裕見て+2GB)もアレば十分。これは休止状態も考慮したものらしい。

そうだよなぁ。32GBメモリくらい普通に詰んでるもんな。

ちなみに、64GBでハイバネーションするのは辛いってRedhatには書いてある。HDDなら64GB読み込みに時間かかるから、起動したほうが速い。そりゃそうだ。まあ、SSDなら実現可能だろうけど、64GBもswap取られたら堪らんよね。

参考資料

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s2-diskpartrecommend-x86.html

推奨される Swap 領域の目安 - eTuts+ Server Tutorial