smartyのエスケープについて見直す
SmartyではPHPの値を出力するとき、デフォルトではエスケープされていないので、 XSS対策として、明示的にエスケープしなければなりません。
XSS対策としての正しくエスケープを行うには、内部でどのような動きをしているのか把握する必要があるので、 見直していきます。
以下の環境を使って見直す
- PHP7.3
- Smarty3.1.36
ドキュメントを確認してみる
大まかに解説が載っているが、javascript
など抜けているのもある
https://www.smarty.net/docs/ja/language.modifier.escape.tpl
コードを確認してみる
こちらを読んでいけばわかりそう。 https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php
各エスケープ処理を見ていく
html
- デフォルト
- htmlspecialcharsをかけ
& " ' < >
をエスケープする
https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php#L46-L54
htmlall
- 適用可能な文字を全て HTML エンティティに変換する
- マルチバイトもHTML エンティティに変換するため、mb_stringが有効なときは、htmlspecialcharsをした上 で、mb_convert_encodingしている。
https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php#L56-L81
url
- rawurlencodeを行う
https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php#L84
urlpathinfo
- rawurlencodeを行う
- ただし、
%2F
は/
に戻すようにしている
- ただし、
https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php#L86
javascript
\ " '
改行</
をJavaScriptエスケープするようにしている
https://github.com/smarty-php/smarty/blob/v3.1.36/libs/plugins/modifiercompiler.escape.php#L94
XSSの対応
HTML要素、属性値、リンクに値を入れるとき
escape:html
を使う
<h1>{$hoge|escape:html}</h1>
<input type="text" name="hoge" value="{$huga|escape:html}" /> ※属性値はダブルクォートで囲ってあること
<a href="{$hoge|escape:html}">リンク<a> ※別途スキーマのバリデーションは行うこと
URLのパラメータに値をいれるとき
escape:'url'
, escape:'urlpathinfo'
を使う
<a href="http://localhost:8080/index.php?hoge={$hoge|escape:'url'}"
<a href="http://localhost:8080/{$hoge|escape:'urlpathinfo'}"
JavaScriptの文字列に値をいれるとき
function hoge(){ var = "{$hoge|escape: 'javascript'}"; } ※ そもそも、JavaScript内に動的に値を埋め込まないのがベスト
<body onload="console.log('{$hoge|escape: 'javascript'|escape: 'html'}');">
参考
開発環境としてChromiumOSを使ってみる(インストール編)
Chromebook最近すごいですね。 存在自体は、数年前くらいから知ってはいたのですが、去年の年末あたりからよくCMでも見かけるようになりました。 www.youtube.com. 海外の教育現場では、割と一般的に使われているという話を聞いたことがありますが、 最近だと、こんなニュースもありました。
Chromebook物欲の赴くままに即ポチって色々試してみたいのですが、購入する前に、どこまでできるの?開発もできるの?というのをあらかじめ把握しておきたいので、まずは、ChromeOSのオープンソース開発バージョンであるChromiumOSをインストールし、検証していきたいと思います。
ChromiumOSをビルド・インストールするマシン
実家からもらってきた富士通のLIFEBOOKを使いました。 https://www.fmworld.net/biz/fmv/lifebook/1101/e780b/ ※ HDD => SSD、メモリ2G => 8Gに換装しています。
もともと、Ubuntu 18.04 LTS が入っていたので、これを使ってビルドします。
ChromiumOSのビルド・インストール
スタートガイドがあるので、これに従いやっていきます。 https://www.chromium.org/chromium-os/quick-start-guide
大まかな流れ
という流れで行いました。
ハマったところ
USBからChromiumOSを起動し、fdisk, partedでインストールするSSDのパーディションを整理しようと思ったのですが、fdisk, partedコマンドが見つかりませんでした。
調べてみたところ、どうやら /sbin
/usr/sbin
のパスが通っていないので、このパスを通す必要がありました。
https://www.reddit.com/r/chromeos/comments/2gn445/quick_fix_for_anyone_not_able_to_use_fdisk_or/
ChromiumOSの設定
インストールは完了したので、設定を行っていきます。
- ネットワーク
- 言語
- 時刻
- Linux(Crostini)
の設定を行います。
Linux(Crostini)は、ChromiumOSを使用してソフトウェアを開発できる機能です。 Linuxのコマンドラインツール、コードエディタ、IDE を ChromiumOS にインストールして、コーディングやアプリの開発などを行うことができます。参考: https://support.google.com/chromebook/answer/9145439?hl=ja.
Linux(Crostini)を起動し、ChromiumOS上でDebianを起動することを確認
バージョンは10.3だった。
takapi@penguin:~$ cat /etc/debian_version 10.3
仕組み的には、ChromiumOS上でコンテナ(LXD)を動かしている(実際には間にlinuxVMがいる)ようです。 (ちなみに、DebianからArch Linuxにも変えられるそうです。https://wiki.archlinux.jp/index.php/Crostini)
ハマったところ
こちらの手順で、Linux(Crostini)のセットアップを行いましたが、セットアップ中に、仮想マシンのダウンロード中にエラーが発生しました。もう一度やり直してください。
というエラーが発生し、インストールができませんでした。
https://support.google.com/chromebook/answer/9145439?hl=ja
どうやら、セットアップ中にコンテナのホストとなっているLinuxVM(termina)が起動できていないことが原因で、以下の手順で正常にセットアップすることができました。
- エラーメッセージが画面に出ている状態で、Ctrl+Alt+tを押し、crosh(ターミナル)を開く
- 以下のコマンドを実行し、VM(termina)を起動
crosh> vmc list # terminaが作成されていることを確認 termina (3461484544 bytes, min shrinkable size 4870635520 bytes, raw, sparse) Total Size (bytes): 3461484544 crosh> vmc start termina # VMを起動
この状態で、エラーメッセージの出ているセットアップ画面の 再実行
ボタンを押すと次に進め、正常にセットアップすることができました。
Linux(Crostini)環境の設定
fish, tmux, ghq, fzf
ビャッと入れます http://takapi86.hatenablog.com/entry/2019/08/12/143719
docker
apt経由で入れます
日本語入力
こちらを参考にさせていただきました。 https://www.axon.jp/entry/2018/10/18/201812
vscode
Linux(Crostini)環境でインストールしたGUIアプリケーションを起動すると、何もしなくても、ホスト側であるChromiumOSの画面に表示されるようになっています。
こちらを参考にさせていただきました。 https://qiita.com/suzuki_sh/items/adead0fd9adefec112af
まとめ
とりあえず、わーっとChromiumOSで開発環境を整えてみました。 この記事は、上記でインストールしたvscodeで書いてますが特に問題なく使えています。
しばらく使ってみて、良い点・悪い点を検証していきたいと思います。
では〜
Docker + PhpStorm 環境でXdebugのリモートデバッグが使えるようにするためのメモ
PHPのデバッグには、Xdebugを使っていますが、いつも設定の仕方を忘れてしまうのでメモしておきます。
環境
Docker側の設定
Dockerfileに以下の内容を追加し、xdebugをインストールします。
RUN pecl install xdebug
php.iniに以下の内容を追加します。
[xdebug] zend_extension="/usr/lib64/php/modules/xdebug.so" # 環境に応じて、xdebug.soが置いてある場所を指定します。 xdebug.remote_enable = On xdebug.remote_autostart = Off xdebug.remote_connect_back = Off xdebug.remote_log="/tmp/xdebug.log" xdebug.remote_port=9001 xdebug.remote_host=host.docker.internal
ポイント
* デフォルトでは、XdebugをOffにし、使いたい人だけ、環境変数
* XDEBUG_SESSION_START という名前のパラメータを渡すことで任意のタイミングでリモートデバッグを有効化できました。 ※ XDEBUG_CONFIG
に remote_enable=On
をセットするようにして有効化するようにします。xdebug.remote_autostart
を Offにする必要あり。https://xdebug.org/docs/remote#browser_session
- remote_portはバッティングしないようなportを設定するのが良いです。
- remote_hostは環境に合わせて、PhpStormのデバッグポートを待ち受けているホスト側のIPアドレス、もしくはホスト名を指定します。
そのほか、各設定内容は以下をご確認ください。 https://xdebug.org/docs/remote
PhpStorm側の設定
環境設定
=>言語 & フレームワーク
=>PHP
=>サーバ
を選択- ホスト:
_
- ポート: 環境に応じて設定
- デバッガ:
Xdebug
- パス・マッピングの設定: 環境に応じて設定
- ホスト:
環境設定
=>言語 & フレームワーク
=>PHP
=>デバッグ
を選択3.PHPデバッグ接続のリスニングを使用可能にする
のリスニングを開始
を選択- デバッグ・ポートを
xdebug.remote_port
で設定した値に合わせて設定 - 一度PhpStormの再起動が必要かも
lsofコマンドで、設定したポートで待ち受けているか確認
$ lsof -i:9001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME phpstorm 8875 takapi 467u IPv4 0x5054b8bd5948d975 0t0 TCP *:etlservicemgr (LISTEN)
ここで、適当な場所に、ブレークポイントを置いてステップ実行できれば完了です。
もし、できていなかったら、xdebug.remote_log
で設定したログを見てみると良さそうです。
Btrfsについて軽く調べた
Btrfsとは
Btrfsは、フォールトトレランス、管理、データ保護など、企業のストレージ システムでよく見られた障害に対処することを目的に、複数の組織(Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATOなど)によって、開発されたファイルシステム。
SUSE Linux Enterprise Server 12 で採用されているらしいです。
https://www.synology.com/ja-jp/dsm/Btrfs https://wiki.archlinux.jp/index.php/Btrfs
Btrfsの特徴
- 最大ファイルサイズは16EiB
- コピーオンライト
- ディスク容量の効率的な利用
- iノードの動的割り当て
- ストレージプール対応
- スナップショット機能
- チェックサムによる完全性の保証
- 効率的な増分バックアップ
- オンラインデフラグ
まず使用できるか確認してみる
modprobe btrfs grep btrfs /proc/filesystems btrfs
Btrfsファイルシステムを作成
前回と同じく、家に転がっていた4GのHDDを使います。
ディスク /dev/sdb: 4 GiB, 4327464960 バイト, 8452080 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: gpt ディスク識別子:
mkfs.btrfs
または mkfs -t btrfs
で、作成します。
今回は、/dev/sdb1
/dev/sdb2
まとめて、Btrfsファイルシステムを作成します。
sudo mkfs -t btrfs /dev/sdb1 /dev/sdb2 btrfs-progs v4.15.1 See http://btrfs.wiki.kernel.org for more information. Label: (null) UUID: 911d6614-d117-44b2-93a5-4a531e7938ec Node size: 16384 Sector size: 4096 Filesystem size: 4.03GiB Block group profiles: Data: RAID0 412.50MiB Metadata: RAID1 206.25MiB System: RAID1 8.00MiB SSD detected: no Incompat features: extref, skinny-metadata Number of devices: 2 Devices: ID SIZE PATH 1 1.95GiB /dev/sdb1 2 2.08GiB /dev/sdb2
lsblk sdb 8:16 0 4G 0 disk ├─sdb1 8:17 0 2G 0 part /media/takapi/911d6614-d117-44b2-93a5-4a531e7938ec └─sdb2 8:18 0 2.1G 0 part
df -h /dev/sdb1 4.1G 17M 3.5G 1% /media/takapi/911d6614-d117-44b2-93a5-4a531e7938ec
どうやら、sdb1
の方にまとまっているっぽいです。
マウントする
特に指定無しで、マウントできました。
sudo mount /dev/sdb1 /mnt/disk/ sudo bash -c "echo test > /mnt/disk/test.txt" # 一応、読み書きできるか確認 cat /mnt/disk/test.txt test sudo umount /dev/sdb1
ファイルシステムのチェック
fsckコマンドを実行すると、btrfs check
を使ってくれとのこと。
sudo fsck /dev/sdb1 fsck from util-linux 2.31.1 If you wish to check the consistency of a BTRFS filesystem or repair a damaged filesystem, see btrfs(8) subcommand 'check'.
チェックできました。
sudo btrfs check /dev/sdb1 Checking filesystem on /dev/sdb1 UUID: 911d6614-d117-44b2-93a5-4a531e7938ec checking extents checking free space cache checking fs roots checking csums checking root refs found 262144 bytes used, no error found total csum bytes: 0 total tree bytes: 131072 total fs tree bytes: 32768 total extent tree bytes: 16384 btree space waste bytes: 123655 file data blocks allocated: 131072 referenced 131072
サブボリューム
Btrfsでは、ファイルシステムをサブボリュームという単位で分割することができます。
作成
sudo btrfs subvolume create /mnt/disk/sub1 Create subvolume '/mnt/disk/sub1' sudo btrfs subvolume create /mnt/disk/sub2 Create subvolume '/mnt/disk/sub2'
一覧表示
sudo btrfs subvolume list /mnt/disk/ ID 260 gen 15 top level 5 path sub1 ID 261 gen 16 top level 5 path sub2
削除
sudo btrfs subvolume delete /mnt/disk/sub1 Delete subvolume (no-commit): '/mnt/disk/sub1' sudo btrfs subvolume delete /mnt/disk/sub2 Delete subvolume (no-commit): '/mnt/disk/sub2'
サブボリュームのマウント
個々のサブボリュームをマウントする場合は、IDを使います。
sudo btrfs subvolume list /mnt/disk/ ID 262 gen 19 top level 5 path mount_data sudo mount -t btrfs -o subvolid=262 /dev/sdb1 /mnt/disk/ mount | grep sdb1 /dev/sdb1 on /mnt/disk type btrfs (rw,relatime,space_cache,subvolid=262,subvol=/mount_data) df -h | grep sdb1 /dev/sdb1 4.1G 17M 3.5G 1% /mnt/disk
スナップショット
サブボリューム単位でスナップショットもとれます。
sudo touch /mnt/disk/test.txt sudo btrfs subvolume snapshot /mnt/disk/ /mnt/disk/snapshot Create a snapshot of '/mnt/disk/' in '/mnt/disk/snapshot/disk' sudo ls /mnt/disk/snapshot disk sudo ls /mnt/disk/snapshot/disk/ snapshot test.txt
ファイルシステムの情報の表示
ファイルシステムの情報を表示する
sudo btrfs filesystem df /mnt/disk/ Data, RAID0: total=412.50MiB, used=128.00KiB System, RAID1: total=8.00MiB, used=16.00KiB Metadata, RAID1: total=206.25MiB, used=160.00KiB GlobalReserve, single: total=16.00MiB, used=0.00B
ファイルシステムの使用状況を表示する
sudo btrfs filesystem df /mnt/disk/ Data, RAID0: total=412.50MiB, used=128.00KiB System, RAID1: total=8.00MiB, used=16.00KiB Metadata, RAID1: total=206.25MiB, used=160.00KiB GlobalReserve, single: total=16.00MiB, used=0.00B
参考
php-memcached 2.2.0 と 3.1.4 でデータの互換性があるのか確認する
pecl/memcached
は、libmemcachedライブラリを介してmemcachedとインターフェイスするためのPHP拡張です。
https://pecl.php.net/package/memcached
PHP5系で最新版(3.1.4) をインストールしようと思ったところ、7.0.0からしかインストールができないとのエラーが発生。memcached-2.2.0であればインストール可能
root@3105494f7cac:/var/www/html# pecl install memcached pecl/memcached requires PHP (version >= 7.0.0), installed version is 5.6.40 pecl/memcached can optionally use PHP extension "igbinary" (version >= 2.0) pecl/memcached can optionally use PHP extension "msgpack" (version >= 2.0) No valid packages found install failed
逆に、memcached-2.2.0 はPHP7系ではインストールできませんでした。
pecl/memcached requires PHP (version >= 5.2.0, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.3.10 No valid packages found install failed
READMEにもバッチリ書いてありました。
互換性があるか検証してみる
PHP5からPHP7へバージョンアップする際に、ログインセッション引き継ぎながら動的に切り替えしたいので、memcached2,3間でデータの互換性があるかどうか簡単に検証していきます。
検証環境
docker環境を使って、PHP5.6(memcached-2.2.0), PHP7.3(memcached-3.1.4)を用意しました。
なお、igbinary
, msgpack
は入れていません。
php -i | grep igbinary igbinary support => no php -i | grep msgpack msgpack support => no
libmemcached
は、1.0.18
最新、
実行時設定(php.ini)はデフォルトにしています。
この環境に、 画面にアクセスしたら値をカウントアップ => Memcachedに保管 => 画面に表示するという簡単なwebアプリを乗せ、PHP5.6とPHP7.3で互いに、カウント数の書き込み・読み込みができれば、互換性があると判断します。
セッションを使うケースと、Memcached直接を使うケースで試してみます。
結果
無事問題なく、相互に読み書きができることを確認できました。
簡単な確認でしたが、ここまで
参考
https://pecl.php.net/package-changelog.php?package=memcached&release=3.1.4 https://github.com/php-memcached-dev/php-memcached#dependencies https://launchpad.net/libmemcached/+download
xfsについて調べた
XFSとは
XFSは、Silicon Graphics
という会社が自社のIRIXというUNIXOS向けに開発されたジャーナルファイルシステムで、巨大なファイルシステムなどに対応する目的で開発されたもの。
RHEL7で採用されているらしいです。
XFS の主な特徴
- XFS は、より迅速にクラッシュリカバリを行うメタデータジャーナリングに対応しています。
- XFS ファイルシステムは、マウントされてアクティブな際にデフラグおよび拡張できます。
- また、Red Hat Enterprise Linux 7 は XFS に固有のユーティリティのバックアップと復元に対応しています。
とのこと
参考:
第3章 XFS ファイルシステム Red Hat Enterprise Linux 7 | Red Hat Customer Portal
まず使用できるか確認してみる
modprobe xfs grep xfs /proc/filesystems xfs
XFSファイルシステムを作成
家に転がっていた4GのHDDを使います。
ディスク /dev/sdb: 4 GiB, 4327464960 バイト, 8452080 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: gpt ディスク識別子:
mkfs.xfs
または mkfs -t xfs
で、作成します。
sudo mkfs -t xfs /dev/sdb1 mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (ext4). mkfs.xfs: Use the -f option to force overwrite.
すでに、ファイルシステムが含まれていると警告を出し、続行できないので -f
で上書きます。
sudo mkfs -t xfs -f /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=264000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=1056000, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
マウントする
特に指定無しで、マウントできました。
sudo mount /dev/sdb1 /mnt/disk/ sudo bash -c "echo test > /mnt/disk/test.txt" # 一応、読み書きできるか確認 cat /mnt/disk/test.txt test sudo umount /dev/sdb1
ファイルシステムのチェック
xfs_repair
で、ファイルシステムのチェック・修復を行います。
ext系で言うと、それぞれ fsck
, e2fsck
コマンドにあたります。
修復を行わず、チェックだけの場合は、-n
コマンドを使います。
xfs_check
というコマンドもあるようなのですが、どうやらチェックのスピードが遅い関係で、非推奨になっているようです。
sudo xfs_repair /dev/sdb1 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... - traversal finished ... - moving disconnected inodes to lost+found ... Phase 7 - verify and correct link counts... done
ファイルシステムのパラメータ変更
ファイルシステムのパラメータ変更は、xfs_admin
を使います。
ext系で言うと、 tune2fs
コマンドにあたります。
xfs_admin -u デバイス名
・・・ UUIDを表示xfs_admin -U デバイス名
・・・ UUIDを設定xfs_admin -l デバイス名
・・・ ラベルを表示xfs_admin -L デバイス名
・・・ ラベルを設定
sudo xfs_admin -U `uuidgen` /dev/sdb1 Clearing log and setting UUID writing all SBs new UUID = 6774ad78-fd02-417d-b717-f08c2b29214f sudo xfs_admin -L "test" /dev/sdb1 writing all SBs new label = "test" sudo xfs_admin -ul /dev/sdb1 UUID = 6774ad78-fd02-417d-b717-f08c2b29214f label = "test"
ファイルシステムの情報を表示
ファイルシステムの情報を表示は、xfs_info
を使います。
ext系で言うと、 dumpe2fs
コマンドにあたります。
xfs_info /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=264000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1 spinodes=0 rmapbt=0 = reflink=0 data = bsize=4096 blocks=1056000, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
ファイルシステムのバックアップ・リストア
ファイルシステムの情報を表示は、xfsdump
xfsrestore
を使います。
(xfsのあとにハイフンはつかないので注意)
ext系で言うと、 dump
restore
コマンドにあたります。
バックアップ
sudo xfsdump -l 0 -L test -f /tmp/test /dev/sdb1 xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.6 (dump format 3.0) - type ^C for status and control xfsdump: level 0 dump of XXXXXXXXXXXXX:/mnt/disk xfsdump: dump date: Tue Oct 15 00:29:24 2019 xfsdump: session id: xfsdump: session label: "test" xfsdump: ino map phase 1: constructing initial dump list xfsdump: ino map phase 2: skipping (no pruning necessary) xfsdump: ino map phase 3: skipping (only one dump stream) xfsdump: ino map construction complete xfsdump: estimated dump size: 25216 bytes xfsdump: /var/lib/xfsdump/inventory created ============================= media label dialog ============================= please enter label for media in drive 0 (timeout in 300 sec) -> test media label entered: "test" --------------------------------- end dialog --------------------------------- xfsdump: creating dump session media file 0 (media 0, file 0) xfsdump: dumping ino map xfsdump: dumping directories xfsdump: dumping non-directory files xfsdump: ending media file xfsdump: media file size 21880 bytes xfsdump: dump size (non-dir files) : 544 bytes xfsdump: dump complete: 6 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /tmp/test.txt OK (success) xfsdump: Dump Status: SUCCESS
リストア
xfsrestore -f /tmp/test -L test /tmp/restore/test xfsrestore: using file dump (drive_simple) strategy xfsrestore: version 3.1.6 (dump format 3.0) - type ^C for status and control xfsrestore: using online session inventory xfsrestore: searching media for directory dump xfsrestore: examining media file 0 xfsrestore: reading directories xfsrestore: 1 directories and 1 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: restore complete: 0 seconds elapsed xfsrestore: Restore Summary: xfsrestore: stream 0 /tmp/test OK (success) xfsrestore: Restore Status: SUCCESS ls /tmp/res/ test.txt
XFSとext系ファイルシステムの管理コマンドの比較
こちらのページに見やすい比較表がありました。 http://www.intellilink.co.jp/article/column/oss-rh02.html
参考
macでたまに 英数<->かな の切り替えができなくなる問題が発生した
最近、macを使っていると、英数<->かなの切り替えができなくなることがある。
現象としては、
- 何度か連打しているとたまに切り替わる
- PCを再起動すると直る
- ことえり -> Google日本語入力にしても同じ
- 切り替えができないときは、ファンが唸っている
- 別のキーボードでも同じ
1日1回あるかないかくらいだったので、これまでPCを再起動して対応していたが、流石に今後も再起動し続けるのは厳しいので原因を確認した。
※ ちなみに、根本原因は未解決です。
macの負荷を見てみる
sudo htop
CPUの使用率でソートすると、
/System/Library/CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer
というプロセスが一番上にくる。(使用率65%前後)
シュッと調べてみると、以下の記事がヒットした。
SystemUIServer
スクリーン上部のメニューバーを司るプロセス
とのこと。
この記事を書いた方は、
SystemUIServer
の負荷が上がったときに、メニューバーが動かなくなってしまったらしい。
こちらも試しに、切り替えができない状態でメニューバーを触ってみたが確かに反応しない。
SystemUIServer
MacOSのどこで監視されているのかわらんけど、プロセスをkillするとまた上がってくるようになっているっぽいので、雑に htop 上から kill(TERM) してみる。
そうすると、また、プロセスが復活してきて・・・
- ファンが止まり
- メニューバーも動くようになり
- 英数<->かなの切り替え
ができるようになった!!
とりあえず、原因はこれっぽい。
しかし、なぜこれが発生するようになったのだろう。
我々はその謎を解明すべくアマゾンの奥地へと向かった。