それマグで!

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

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

HDD/SSDのUUIDを確認する方法

最近のLinuxはUUIDでディスクを指定するのがはやりらしい.UUIDってどうやって調べて確認するのか?

ls で調べるのが覚えやすくて簡単

ls -l /dev/disk/by-uuid

実行結果

takuya@atom:~$ ls -l /dev/disk/by-uuid
合計 0
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 0448EABDXXXX -> ../../sda2
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 0a5536e8-XXXX-> ../../sdc1
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 22159633-749c-XXX-> ../../sda3
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 XXXXXXXXXXXX -> ../../sda1
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 71d40a69-XXXX-> ../../sda5
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 7B9F-XXXX -> ../../sdb1
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 9350254c-068f-XXXX -> ../../dm-0
lrwxrwxrwx 1 root root 10 2011-04-23 12:42 9f476cce-0924-XXXX-> ../../sda6

UUIDを使ったマウント

sudo mount UUID=0a5536e8-485c-43b2-XXXXXXXXXX /mnt2

他に専用のコマンド blkid でも確認できる

blkid
実行結果
takuya@atom:~$ sudo blkid
/dev/sda1: LABEL="(略)" UUID="4CFECC47FECC2AD2" TYPE="ntfs"
/dev/sda2: UUID="0448EABD48EAAC9C" TYPE="ntfs"
/dev/sda3: UUID="22159633-749c-498f-b4a5-15f9fb8fbdda" TYPE="ext4"
/dev/sda5: UUID="71d40a69-1d46-4c1e-b728-fcec95ae1cd6" TYPE="swap"
/dev/sda6: UUID="9f476cce-0924-40fe-ad49-f778386924c9" TYPE="ext3"
/dev/sdb1: LABEL="(略)" UUID="7B9F-279A" TYPE="vfat"
/dev/sdc1: UUID="0a5536e8-485c-43b2-a816-66846f8fcc38" TYPE="ext4"
/dev/sdc2: UUID="1y0xa0-fE53-y4nf-6MbF-KD38-rutg-ObvqZb" TYPE="LVM2_member"
/dev/sdc3: UUID="VWXaQc-wH63-3Jzt-TF3f-e8hw-gK3K-LYLrOu" TYPE="LVM2_member"
/dev/sdc5: UUID="gUPe8T-HWn2-2dZX-pcyp-tiqe-K4eA-0v3f5e" TYPE="LVM2_member"
/dev/sdc6: UUID="rlBbgP-AWGc-x9zA-2Lbc-i2at-9XvJ-5pEdbq" TYPE="LVM2_member"
/dev/mapper/Volume00-LogVol00: UUID="9350254c-068f-406a-88f6-d86be3ebcbdd" TYPE="ext3"

blkid はディスクの属性を見つけて表示するコマンドラインユーティリティー。

実際使って見ると blkid はLinuxのLVMがあると時間が掛かるので嬉しくない。LVM環境下だと1分ほど掛かりました.

UUIDを使うと正確にマウントできる

fstab ファイルなどで起動時のマウントをUUIDに指定するとディスクの順番が入れ替わってもマウント出来ます.

USBデバイスでHDDを接続したときに/dev/sdc /dev/sddなどと頻繁に入れ替わってしまって混乱するのを防げます

詳しくはこっちの昔のエントリに書いてある.

Linux(ubuntu)ディスクのUUIDを調べてマウントする方法 - ブックマクロ開発に

簡易プロキシをSSHのダイナミック転送で実現する

Dyamic転送が便利と聞きました。ダイナミック転送。使えるそうなので実際試しました。仕組みの解説はめんどくさいので省略.

通称はSSHのポートフォーワーディングとかポートフォーワードなんて言われる.それをダイナミック(動的)にポート指定する仕組み

SSHの接続オプションでプロキシ接続が出来る

  • SSHに接続して転送ONにする
  • localhost:1080 に接続すれば
  • リモートサーバーから外に出られる。

手っ取り早く言えばSSHサーバーがプロキシサーバーになると言うことです。

使い方

  • putty などのSSHクライアントで接続する
  • ダイナミック転送を有効にする
  • 有効になるとlocalhost:1080 がプロキシサーバーになる
  • ブラウザでプロキシサーバーlocalhost:1080を指定

以上でSSH接続先からWEBアクセスが出来る.

puttyでのダイナミック転送。

通常の場合PUTTYでトンネル作れば解決。ダイナミックで指定すればOK

接続後に指定する方法.

  1. 接続を指定する.
  2. トンネルを指定する
  3. ダイナミックと、Localhostのポート(源ポート)を指定して
  4. 追加を押す
  5. 適用を押す(適用は押し忘れることが多いです)

SSHコマンドの場合

ssh -D 1080 takuya@some.host.example.jp

putty 付属の pfwd.exe を使う場合

pfwd.exeという転送専用のコマンドが付いている.これをつかえばPuttyのメインウインドウが開かずタスクトレイに常駐するので便利.

pfwd.exeの設定方法

pfwd.ini を作って指定する。 pfwd.exe と同じフォルダに置く
pfwd.ini の使い分けは簡単.引数にファイル名を渡すだけ.

pfwd.exe hogehoge.ini

簡単。これで複数のホストにプロキシサーバーできる


ま、SSHできるとなんでも有りなので、SSH接続自体を止める必要があるんだけど.ポート80版でSSHサーバー作っておくとか回避はいくらでもあるので,止めるだけ無駄かと思う.

まとめSSHのポートフォワーディング

Socksプロキシとして動作している.
Localhostのポートに来た通信を転送して,接続先からのリクエストしてポートフォーワーディングしている。

Ubuntuのvisudoエディタが変nanoになる

ubuntuのvisudo のエディタがnano になってしまう。visudo って書いてあるのにnanoが起動する。viXXXってコマンドでnano起動するの何なの。と思ったりした。
環境変数EDITORで何とかなることもあるんだけど,毎回やるのも面倒だしアップデートかかる度に書き戻されることがある気がする.

2023-03-16 更新(システム全体)

システム全体でnanoエディタを捨ててVimにします。

export SYSTEMD_EDITOR=vim

select-editor すら動かなくなりました。

nano の何が良いのか全く理解できない。export EDITOR も無視するし、update-alternativeも無視するの、本当にどうなってるんだろう。

`sudo -e` でまたnanoになる場合は、`sudo visudo` で `Defaults:%sudo env_keep += "EDITOR"` も合わせてどうぞ

ちゃんと解決する select-editor コマンド(ユーザー空間)

2022-09-26 現在 ubuntu 22.04 で調べたところ、次のコマンドで改善が可能です

/usr/bin/select-editor 

nanoを推されますが、どう考えてもvim のほうが良いので。viを選びます。

Select an editor.  To change later, run 'select-editor'.
  1. /usr/bin/vim.nox
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny
  5. /bin/ed

Choose 1-5 [2]: 1

この場合、 ~/.selected_editorに次のような設定が作られます。

# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.nox"


また、EDITOR環境変数をつかっているプログラムも多いので設定しておきます。

echo export EDITOR=vim >> ~/.bashrc


標準のコマンドエディタは alternativesという機構で管理されている.altenativesは同様のソフトウェアがあるとき、どれを使うかを事前決定しておく機構。たとえばJavaで使われるSun JavaJDKにするか Open JavaJDKにするか。とか。

sudo update-alternatives --config editor #alternativesでeditorを更新するコマンド

じっさいやってみた

エディタを変更してみると複数の候補があるのが分かる.

takuya@atom:~$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                優        Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3


通常vimに設定。 nano の良さが正直分からない

設定が変わったことを確認
takuya@atom:~$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                優        Status
------------------------------------------------------------
  0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
* 3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number:

そのほかの解決方法

visudo する際に,環境変数EDITORを指定して起動する

EDITOR=/usr/bin/vi visudo

または

環境変数EDITORを設定して起動する

export EDITOR=/usr/bin/vim;sudo visudo

但し、環境変数を使う方法は,alternativesが動いてるときはうまく出来なかった

alternativesは/etc/alternativesにあるショートカットで管理されている.詳しくはそのうちエントリに書きます.

2022-09-26 追記

ubuntu がupdate-alternativesを無視するので、/usr/bin/select-editor を追記しました。

2023-10-10

SELECTED_EDITOR変数について言及を追加。

cygwin がMS-DOS形式のパスをWarningするので消した

CygwinはC:/Users/takuya の様なWindows形式のパスを内部的にCygwinパスに自動変換して何事もなかったかの様に扱ってくれる.便利だ.しかしタイミングによって次の様な警告が出る。

cygwin warning:
  MS-DOS style path detected: C:/Users/takuya/Desktop/test.rb
  Preferred POSIX equivalent is: /home/takuya/Desktop/test.rb
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

と書いてある。Cygwin環境変数に書けば消えるよと書いている。やってみた。

消えた.ばっちり.
nodosfilewarning をCYGWIN環境変数につけたけれどRuby側でもエラーは出なくなってCygwinだと言うことを忘れそうになる.

cygwin環境変数については次のサイトが詳しい

とても丁寧に書いてあったのでメモとして抜粋させていただいた

パラメータ 概要
「(no)dosfilewarning」 本パラメータが有効な場合,POSIXスタイルのパス名ではなく MS-DOSスタイルのパス名を使用すると警告を表示する.デフォルトは有効.
「(no)envcache」 本パラメータが有効な場合,Win32と POSIX間での環境変数の変換をキャッシュする.マウントテーブルが変更されてもキャッシュが無効にならずに,変更前のマウントテーブルの内容に依存した値は含まれたままになるため,問題を起こす可能性がある.デフォルトは有効.
「(no)export」 本パラメータが有効な場合,これらの設定値の最終的な値が「CYGWIN」として再度エクスポートされます.デフォルトは無効.
「error_start:Win32filepath」 本パラメータが有効な場合,Cygwinで重大なエラーが発生したとき,「Win32filepath」に指定されたプログラムを起動する.これはデバッグ時に有用となる.「Win32filepath」には通常,「gdb」や「dumper」へのパスを設定する.例えば,「C:\cygwin\bin\gdb.exe」のように設定する.デフォルトは無効.
「forkchunk:size」 本パラメータは 「fork()」が一度に何バイトをコピーするのかを指定する.「forkchunk:32768」とした場合,「fork()」は一度に 32768バイト(32KB)をコピーする.デフォルトは可能な限りの最大バイト数をコピーする.これは多くのケースにおいて望ましい動作であるが,いくつかの古いシステムでは遅くする.
「proc_retry:n」 causes fork() and exec*() to retry n times when a child process fails due to certain windows-specific errors.These errors usually occur when processes are being started while a user is logging off.
「(no)glob[:ignorecase]」 本パラメータが有効な場合,UNIXスタイルのワイルドカード(「[]」:ブラケット,「''」 「""」:引用符,「*」:アスタリスク,「\」によるエスケープ)を含むコマンドライン引数は,それらのワイルドカードにマッチしたファイルのリストに展開する.これは DOSコマンドラインプロンプトから実行するプログラムに対してのみ適用する.デフォルトは有効. 本オプションは追加で 「[no]ignorecase」を指定できる.「ignorecase」を指定した場合,ワイルドカードのマッチングは大文字,小文字を無視して行う.デフォルトは無効(「noignorecase」).
「(no)reset_com」 本パラメータが有効な場合,シリアルポートは使用時に 9600-8-N-1,フロー制御なしにリセットされる.これはポートがオープンされた時点,およびハンドルが引き継がれた時点で行われる.デフォルトは有効.
「(no)strip_title」 本パラメータが有効な場合,ウィンドウのタイトルからディレクトリパス部分を削除する.デフォルトは無効.
「(no)title」 本パラメータが有効な場合,タイトルバーに現在稼動しているプログラム名を表示する.デフォルトは無効.
「(no)tty」 本パラメータが有効な場合,CygwinUNIX風の ttyに対する 「termios」などの拡張サポートを有効にする.これは一部の Windowsプログラムとの間で互換性がない.デフォルトは無効で,この場合 「tty」はテキストモードでオープンされる.本パラメータを有効にすると,「^Z」に代わり 「^D」が期待どおりに動作するようになり,「stty」による設定が可能になる.なお,本パラメータは Cygwinのシェルの開始前に設定されている必要があり,シェルから変更はできない.「mintty」や 「xterm」などの他の端末を使用する場合,本パラメータは無効にすべきである.
「(no)upcaseenv」 本パラメータが有効な場合,非CygwinプロセスからCygwinのプロセスの起動時に,Cygwinは全環境変数の文字をすべて大文字に変換する.これは Cygwin1.7以前のデフォルトの動作である.
本パラメータが無効な場合,最低限の下位互換性を維持する限られたセットを除き,そして特定の重要な変数を正しく制御するために,Cygwin環境変数の大文字,小文字は変換しない.常に大文字化された変数のリストは以下のとおり.デフォルトは無効.「ALLUSERSPROFILE」,「COMMONPROGRAMFILES」,「COMPUTERNAME」,「COMSPEC」,「HOME」,「HOMEDRIVE」,「HOMEPATH」,「NUMBER_OF_PROCESSORS」,「OS」,「PATH」,「PATHEXT」,「PROCESSOR_ARCHITECTURE」,「PROCESSOR_IDENTIFIER」,「PROCESSOR_LEVEL」,「PROCESSOR_REVISION」,「PROGRAMFILES」,「SYSTEMDRIVE」,「SYSTEMROOT」,「TEMP」,「TERM」,「TMP」,「TMPDIR」,「WINDIR」
「(no)winsymlinks」 本パラメータが有効な場合,Cygwinシンボリックリンクを特別なヘッダが付いた読み取り専用属性の Windowsショートカットとして生成する.本パラメータが無効な場合,Cygwinシンボリックリンクをあるマジックナンバ,パス,そしてシステム属性の通常ファイルとして生成する.通常ファイルのシンボリックリンクは読み書きが速いため,デフォルトは無効. なお,新しいシンボリックリンクでは対象ファイル名のエンコードUTF-16を用いており,その一方で古いシンボリックリンクでは ANSIあるいは OEM文字セットを用いているため,Cygwin 1.7以降で生成したシンボリックリンクは,古い Cygwinでは読み取りできない.
gnupack Users Guide - 技術情報


いっぱいありますね

sudo コマンド実行しても、リダイレクトでファイルに書き込めない.

sudo を多用しているTakuyaです。こんばんは。Sudoは便利なので活用しますが,リダイレクトでファイルに書込もうと思ってもパーミッションErrorになるので困っています.

sudo は出来てもファイルに書き込めない例

sudo do_something > /etc/apt/apt.conf.d/hoge

にようにsudoして結果を書き込もうとしてもパーミッション・エラーになる。


たぶんEchoとパイプもSudoすれば行けると思うとおもって試したが・・・

sudo do_something | sudo echo - > /etc/hogehoge #これは出来ない。

MANに書いてある.

困って、Manを読んだらManに書いてあった.SudoのMan最高

/home パーティションにあるディレクトリのディスク使用量リストを作成する。 cd とファイルリダイレクションが動作するように、サブシェルでコマンドを実行している点に注意すること。

% sudo sh -c "cd /home ; du -s * │ sort -rn > USAGE"

つまりsudoでsh を起動してねってことらしい

sudo sh -c "do_something > /etc/fstab.d/foo"

出来た.

解決策2 tee を使う

もっと、確実な解決策は teeを使うこと

sudo d_something | sudo tee /etc/hogehoge

2023-07-05

追記