LPIC コマンドまわりについて
環境変数
主な環境変数
環境変数 | 説明 |
---|---|
PATH | コマンドやプログラムを検索するディレクトリリスト |
PWD | カレントディレクトリ |
HOSTNAME | ホスト名 |
USER | 現在のユーザー |
LANG | ロケール |
HOME | カレントユーザのホームディレクトリ |
LOGNAME | ログインシェルのユーザ名 |
PS1 | プロンプトの表示文字列 |
PS2 | 複数行にわたる入力時のプロンプト |
HISTSIZE | コマンド履歴の最大値 |
HISTFILE | コマンド履歴を格納するファイル |
HISTFILESIZE | コマンド履歴を格納するファイル |
HISTFILESIZE | HISTFILEに保存する履歴数 |
TER | 端末の種類 (e.g. bash, zsh) |
export
あたりは理解しているつもりなので割愛
unset
は変数の削除を行う。変数名のには$
がつかないのに注意。
$ unset variable
コマンド
複数コマンドの実行制御
コマンド | 説明 |
---|---|
コマンド1;コマンド2 | コマンド1に続いてコマンド2を実行 |
コマンド&&コマンド2 | コマンド1正常終了時のみコマンド2を実行 |
コマンド1|| コマンド2 | コマンド1が正常終了しなかった場合にコマンド2を実行 |
(コマンド1;コマンド2) | ひとかたまりのコマンドグループとして実行 |
{コマンド1;コマンド2} | 現在のシェル内でコマンドを実行 |
履歴
$ history
(省略)
994 ls
995 tumx a
996 tmux a
997 cler
998 clear
999 history
$!994
ls
bin config dev hadoop-1.1.2 hadoop-1.1.2-1.i386.rpm hadoop-1.1.2.tar.gz local-lib-1.008010 local-lib-1.008010.tar.gz perl5 scripts
manコマンド
$ man -avim #すべてのセクション
# makewhatis # whatis データベースの作成
# man -f vim # 完全一致検索 whatisコマンドで代替可能
vim (1) - Vi IMproved, a programmers text editor
vim [ex] (1) - Vi IMproved, a programmers text editor
vim [rvi] (1) - Vi IMproved, a programmers text editor
vim [rview] (1) - Vi IMproved, a programmers text editor
vim [vi] (1) - Vi IMproved, a programmers text editor
vim [view] (1) - Vi IMproved, a programmers text editor
# man -k vim # 部分一致検索 apropos コマンドで代替可能
vim (1) - Vi IMproved, a programmers text editor
vimdiff (1) - edit two, three or four versions of a file with Vim and show differences
vim [ex] (1) - Vi IMproved, a programmers text editor
vim [rvi] (1) - Vi IMproved, a programmers text editor
vim [rview] (1) - Vi IMproved, a programmers text editor
vimtutor (1) - the Vim tutor
vim [vi] (1) - Vi IMproved, a programmers text editor
vim [view] (1) - Vi IMproved, a programmers text editor
# man -w vim
/usr/share/man/man1/vim.1.gz
manコマンドのセクション
1 コマンド (ls、cat、kterm など)
2 システムコール (C言語の関数。open、fork など)
3 ライブラリ関数 (C言語の関数。printf、fopen、Tck/Tk、Xlib などの関数群)
4 デバイス・デバイスドライバ
5 ファイルフォーマット (uuencodeなどのファイル形式、hostsなどの書式)
6 ゲーム
7 その他 (環境変数の説明、groff の書式など)
8 システム管理 (各種デーモン、sendmail、mount*など)
9 新しく追加されたマニュアル(Tkなど?)
UNIXの部屋 コマンド検索:man (*BSD/Linux)
lsコマンド
-t
オプションでで日付順に表示
# ls -lt
total 82348
-rw-r--r--. 1 root root 84248501 Jun 4 13:01 jdk-7u21-linux-i586.rpm
-rw-r--r--. 1 root root 5632 May 23 02:46 perl.xls
drwxr-xr-x. 2 root root 4096 Apr 7 18:49 app
drwxr-xr-x. 2 root root 4096 Apr 4 17:46 bin
drwxr-xr-x. 3 root root 4096 Apr 4 17:44 perl5
-rw-------. 1 root root 1196 Apr 4 17:03 anaconda-ks.cfg
-rw-r--r--. 1 root root 9169 Apr 4 17:03 install.log
ls -lA (.から始まる名前のファイルも表示 ./, ../を非表示)
total 82408
-rw-------. 1 root root 1196 Apr 4 17:03 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 7 18:49 app
-rw-------. 1 root root 10896 Jun 5 06:20 .bash_history
-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout
-rw-r--r--. 1 root root 222 Apr 4 17:45 .bash_profile
-rw-r--r--. 1 root root 222 Apr 4 18:07 .bashrc
drwxr-xr-x. 2 root root 4096 Apr 4 17:46 bin
drwxr-xr-x. 5 root root 4096 May 24 02:53 .cpan
drwxr-xr-x. 4 root root 4096 May 24 02:54 .cpanm
-rw-r--r--. 1 root root 100 Sep 23 2004 .cshrc
(以下略)
# ls -ld /root/ ( ディレクトリ情報)
dr-xr-x---. 9 root root 4096 Jun 4 13:01 /root/
cpコマンド
# cp -f text.txt /home/hoge/. (確認なしの上書き)
# cp -i .vimrc /home/kisho/. (確認ありの上書き)
cp: overwrite `/home/kisho/./.vimrc'?
その他のcpコマンドオプション
* -p
: コピー元のファイル属性を保持
* -r,-R
: 再帰的コピー
* -d
:シンボリックリンクをシンボリックリンクとしてコピー
* -a
: -dpR
とおなじ
mv,rm,rmdir
コマンドは割愛
mkdirコマンド
-m
オプションでアクセス権を指定できる。
touchコマンド。タイムスタンプを変更する。
# ls -l .vimrc
-rw-r--r--. 1 root root 802 Apr 7 14:34 .vimrc
# touch -t 201306061200 .vimrc
# ls -l .vimrc
-rw-r--r--. 1 root root 802 Jun 6 2013 .vimrc
その他のtouchコマンドオプション
-m
:修正日時のみ変更-a
:アクセス日時のみ変更
fileコマンド。ファイルの種別を表示する。
# file *
anaconda-ks.cfg: ASCII English text
app: directory
bin: directory
epel-release-6-8.noarch.rpm: RPM v3.0 bin noarch epel-release-6-8
install.log: ASCII text
install.log.syslog: ASCII text
jdk-7u21-linux-i586.rpm: RPM v3.0 bin i386/x86_64 jdk-1.7.0_21-fcs
perl5: directory
perl.xls: CDF V2 Document, No summary info
rpmforge-release-0.5.2-2.el6.rf.i686.rpm: RPM v3.0 bin i386/x86_64 rpmforge-release-0.5.2-2.el6.rf
パイプ
teeコマンドはファイルに実行結果を保存しつつ画面上にも表示してくれる。-a
オプションで追記。
# ls -l | tee ls.log
total 82348
-rw-------. 1 root root 1196 Apr 4 17:03 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 7 18:49 app
drwxr-xr-x. 2 root root 4096 Apr 4 17:46 bin
-rw-r--r--. 1 root root 14540 Nov 6 2012 epel-release-6-8.noarch.rpm
-rw-r--r--. 1 root root 9169 Apr 4 17:03 install.log
-rw-r--r--. 1 root root 3091 Apr 4 17:02 install.log.syslog
-rw-r--r--. 1 root root 84248501 Jun 4 13:01 jdk-7u21-linux-i586.rpm
drwxr-xr-x. 3 root root 4096 Apr 4 17:44 perl5
-rw-r--r--. 1 root root 5632 May 23 02:46 perl.xls
-rw-r--r--. 1 root root 12732 Nov 13 2010 rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# cat ls.log
total 82348
-rw-------. 1 root root 1196 Apr 4 17:03 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Apr 7 18:49 app
drwxr-xr-x. 2 root root 4096 Apr 4 17:46 bin
-rw-r--r--. 1 root root 14540 Nov 6 2012 epel-release-6-8.noarch.rpm
-rw-r--r--. 1 root root 9169 Apr 4 17:03 install.log
-rw-r--r--. 1 root root 3091 Apr 4 17:02 install.log.syslog
-rw-r--r--. 1 root root 84248501 Jun 4 13:01 jdk-7u21-linux-i586.rpm
drwxr-xr-x. 3 root root 4096 Apr 4 17:44 perl5
-rw-r--r--. 1 root root 5632 May 23 02:46 perl.xls
-rw-r--r--. 1 root root 12732 Nov 13 2010 rpmforge-release-0.5.2-2.el6.rf.i686.rpm
リダイレクト
この辺りも理解をしているつもりなので割愛
LPIC パッケージ管理周りについて
かなり長いです。
Linuxインストールに必要なパーティション
- ルートファイルシステムに割り当てるパーティション
- スワップ領域
以下に示すディレクトリは独立したパーティションに割り当てるのが一般的
/home
/var
更新頻度が高いため/usr
プログラムやライブラリ、ドキュメントが置かれるあとからプログラムを追加することがなければ読み込み専用でマウントするのが良い。/boot
/swap
物理メモリの1〜2倍/
言うまでも無し
パーティションのレイアウト
用途によって色々変化させる
- スワップパーティションは前述のとおりのルールで割り当てる。
- WEBサーバであれば
/var/log
に多めに容量をわりあてたり - ファイルサーバであれば
/home
に容量を割り当てたり
ブートローダGRUB
GRand Unified Bootloader (GRUB)にはGrub LegacyとGrub 2の二種類がある。
grub-install
コマンドでGRUBのインストールを行う。
以下の例では/dev/hda
のMaster Boot Record(MBR)^mbr上にGRUBをインストールする。
# grub-install /dev/hda
設定ファイル
GRUB Legacyの設定ファイルは/boot/grub/menu.lst
パラメータは以下のとおり
パラメータ | 説明 |
---|---|
timeout | メニューを表示している時間(秒) |
title | メニューに表示されるエントリ名 |
root | ルートデバイスの指定 |
kernel | 起動するカネールイメージファイルと起動オプションの指定 |
makeactive | ルートパーティションのアクティブ化 |
chainloader | 指定されたセクタの読み込みと実行 |
hidemenu | 起動時にメニューを表示しない |
# cat /boot/grub/menu.lst
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda #ブートデバイス
default=0 #デフォルトは一番目のエントリ
timeout=5 # タイムアウトまで5秒
splashimage=(hd0,0)/grub/splash.xpm.gz #メニュー表示時の背景画像
hiddenmenu
title CentOS (2.6.32-358.2.1.el6.x86_64) # 1番目のエントリ
root (hd0,0) #/dev/sda1
kernel /vmlinuz-2.6.32-358.2.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.2.1.el6.x86_64.img
title CentOS (2.6.32-358.el6.x86_64) # 2番目のエントリ
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
GRUB2の設定ファイルは/boot/grub/grub.cfg
だが、直接編集はせず、/etc/default/grub
で設定を行い、update-grub
コマンドを実行すると、設定に基づいて/boot/grub/grub.cfg
が生成される。
パラメータは以下のとおり
パラメータ | 説明 |
---|---|
GRUB_DEFAULT | デフォルトで起動するOSの番号 |
GRUB_HIDDEN_TIMEOUT | メニューを非表示する秒数 |
GRUB_HIDDEN_TIMEOUT_QUIET | trueならメニュー非表示 | false なら残り時間表示 |
GRUB_TIMEOUT | デフォルトOSを起動するまでの秒数 |
GRB_CMDLINE_LINUX_DEFAULT | ブートオプション |
GRUB_CMDLINE_LINUX | カーネルに渡すオプション |
ブートオプション
ブートローダ起動時にAキーを押すとブートオプションを指定できる。
パラメータは以下のとおり
パラメータ | 説明 |
---|---|
root=デバイス | ルートパーティションとしてマウントするデバイス |
noscsi | SCSIデバイスを使用しない |
nousb | usbデバイスを使用しない |
single | シングルユーザモードで起動 |
1~5 | 指定したランレベルで起動 |
共有ライブラリ管理
ライブラリの利用方法(リンク)には2種類ある。
- スタティックリンク
- コンパイル時にライブラリを読み込む。1つのライブラリがプログラム数分用意されて使用されるため冗長。
- ダイナミックリンク
- 実行時にライブラリを読み込む。1つのライブラリを1つ用意すればよい。
ダイナミックリンクで呼び出されるライブラリを共有ライブラリという。共有ライブラリはlib*.so*
という名前が付けられて/lib,/usr/lib
以下に配置されている。
必要な共有ライブラリの確認
ldd
コマンドで確認できる。
# ldd /bin/cat
linux-vdso.so.1 => (0x00007fff9cb9e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8482c97000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8483033000)
/lib/,/usr/lib
以外のディレクトリを指定する場合は/etc/ld.so.conf
に記述する。
最近は/etc/ld.so.confに読み込む設定ファイルを書き、/etc/ld.so.conf.d/
以下に設定ファルを設置することもある。
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# cat /etc/ld.so.conf.d/mysql-x86_64.conf
/usr/lib64/mysql
いちいちプログラムが起動時にこれらの設定ファイルを読んでライブラリを探すのは非効率なので、
その代わりに/etc/ld.so.cache
が参照される。ldconfig
コマンドが/etc/ld.so.cache
を再生成する。
それとLD_LIBRARY_PATH
環境変数を更新してライブラリの配置されているディレクトリを追加指定することも可能。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/fakeyakuza/lib`
パッケージ管理まわり
パッケージ管理周りはさすがにさんざんやっているしLinuxを自分のマシンに入れた人の多くが避けて通れぬ道なので概念的なことは割愛
dpkgコマンド
Debianではdpkg
コマンドを利用してパッケージ管理を行う。
dpkg [option] action
option | 説明 |
---|---|
-E | 既に同一バージョンがインストールされていればインストールしない |
-G | 既に新バージョンがインストールされていればインストールしない |
-R (--recursive) | ディレクトリ内を再帰的に処理する |
action | 説明 |
---|---|
-i パッケージファイル名 (--install) | パッケージファイルをインストールする |
-r パッケージ名 (--remove) | 設定ファイルを残してパッケージをアンインストールする |
-P パッケージ名 (--purge) | 設定ファイルを含めて完全にパッケージをアンインストールする |
-l 検索パターン (--list) | インストール済みパッケージを検索して表示する |
-S ファイル名検索パターン (--search) | 指定したファイルがどのパッケージからインストールされたか検索する |
-L パッケージ名 (--listfiles) | 指定したパッケージからインストールされたファイルを一覧表示する |
-s パッケージ名 | 指定したパッケージの状態を表示する |
--configure パッケージ名 | 展開されたパッケージを構成する |
--unpack パッケージ名 | パッケージを展開する(インストールはしない) |
パッケージの命名規則は以下のとおり
<パッケージ名称>_<バージョン>_<リリース番号>_<アーキテクチャ>.deb
パッケージのインストール
# dpkg -l sl
dpkg-query: sl に一致するパッケージが見つかりません
# wget http://ftp.nara.wide.ad.jp/debian/pool/main/s/sl/sl_3.03-17_i386.deb
# dpkg -s sl
dpkg-query: パッケージ 'sl' はまだインストールされておらず情報の利用は不可能です
アーカイブファイルを調べるためには dpkg --info (= dpkg-deb --info) を、
その内容一覧を表示するには dpkg --contents (= dpkg-deb --contents) を使います。
# dpkg -EG -i sl_3.03-17_i386.deb
以前に未選択のパッケージ sl を選択しています。
(データベースを読み込んでいます ... 現在 143321 個のファイルとディレクトリがインストールされています。)
(sl_3.03-17_i386.deb から) sl を展開しています...
sl (3.03-17) を設定しています ...
man-db のトリガを処理しています ...
# dpkg -s sl
Package: sl
Status: install ok installed
Priority: optional
Section: games
Installed-Size: 114
Maintainer: Hiroyuki Yamamoto <yama1066@gmail.com>
Architecture: i386
Version: 3.03-17
Depends: libc6 (>= 2.0), libncurses5 (>= 5.5-5~), libtinfo5
Description: Correct you if you type `sl' by mistake
Sl is a program that can display animations aimed to correct you
if you type 'sl' by mistake.
SL stands for Steam Locomotive.
Homepage: http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html
指定したファイルがどのパッケージからインストールされたか
# dpkg -S /usr/games/sl
sl: /usr/games/sl
指定したパッケージからどのファイルがインストールされたか
# dpkg -L sl
/.
/usr
/usr/games
/usr/games/sl-h
/usr/games/sl
/usr/share
/usr/share/doc
/usr/share/doc/sl
/usr/share/doc/sl/README.sl-h.jp
/usr/share/doc/sl/changelog.Debian.gz
/usr/share/doc/sl/README
/usr/share/doc/sl/copyright
/usr/share/doc/sl/README.Debian
/usr/share/doc/sl/README.jp
/usr/share/man
パッケージを設定ファイルごと削除(パージ)
# dpkg -P sl
(データベースを読み込んでいます ... 現在 143351 個のファイルとディレクトリがインストールされています。)
sl を削除しています ...
man-db のトリガを処理しています ...
## dpkg -l sl
dpkg-query: sl に一致するパッケージが見つかりません
apt-getコマンド
apt-getのaptはadvanced packaging toolの略
apt-get [オプション] サブコマンド パッケージ名
オプション | 説明 |
---|---|
-d | ファイルをダウンロードする(インストールはしない) |
-s | システムを変更せず動作をシミュレートする |
サブコマンド | 説明 |
---|---|
clean | 過去に取得して保存中のパッケージを削除する |
dist-upgrade | Debianシステムのアップグレード |
install | パッケージのインストール |
remove | パッケージのアンインストール |
update | パッケージデータベースの更新 |
upgrade | システムの全パッケージを安全にアップグレード |
リポジトリ設定ファイルの書式は以下のとおり
deb/deb-src [url] バージョン名 main/contrib/non-free
設定例
# cat /etc/apt/sources.list
#
# deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20]/ wheezy contrib main
deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20]/ wheezy contrib main
deb http://ftp.jaist.ac.jp/debian/ wheezy main
deb-src http://ftp.jaist.ac.jp/debian/ wheezy main
deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib
# wheezy-updates, previously known as 'volatile'
deb http://ftp.jaist.ac.jp/debian/ wheezy-updates main contrib
deb-src http://ftp.jaist.ac.jp/debian/ wheezy-updates main contrib
最新のパッケージ情報の取得
# apt-get update
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy Release.gpg
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy Release
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy/contrib i386 Packages/DiffIndex
無視 cdrom://[Debian GNU/Linux 7.0.0 _Wheezy_ - Official i386 DVD Binary-1 20130504-15:20] wheezy/main i386 Packages/DiffIndex
無視 cdrom://[Debian GNU/Lin
(省略)
118 kB を 3秒 で取得しました (30.3 kB/s)
パッケージリストを読み込んでいます... 完了
パッケージのインストール
apt-get install sl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
sl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
26.1 kB のアーカイブを取得する必要があります。
この操作後に追加で 117 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/debian/ wheezy/main sl i386 3.03-17 [26.1 kB]
26.1 kB を 0秒 で取得しました (136 kB/s)
以前に未選択のパッケージ sl を選択しています。
(データベースを読み込んでいます ... 現在 143317 個のファイルとディレクトリがインストールされています。)
(.../archives/sl_3.03-17_i386.deb から) sl を展開しています...
man-db のトリガを処理しています ...
sl (3.03-17) を設定しています ...
パッケージの削除
# apt-get remove sl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
sl
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 117 kB のディスク容量が解放されます。
続行しますか [Y/n]? y
(データベースを読み込んでいます ... 現在 143347 個のファイルとディレクトリがインストールされています。)
sl を削除しています ...
man-db のトリガを処理しています ...
apt-cacheコマンド
パッケージ情報を検索、参照できるコマンド
apt-cache サブコマンド
サブコマンド | 説明 |
---|---|
searchキーワード | 指定したキーワード検索 |
show パッケージ名 | パッケージ詳細情報 |
showpkg | パッケージ情報 |
depends パッケージ名 | 依存関係情報 |
キーワード検索
# apt-cache search yatex
yatex - もうひとつの Emacs 用 TeX モード
パッケージ情報まわり
# apt-cache show vim
Package: vim
Priority: optional
Section: editors
Installed-Size: 1797
Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
Architecture: i386
Version: 2:7.3.547-7
Provides: editor
(省略)
# apt-cache showpkg vim
Package: vim
Versions:
2:7.3.547-7 (/var/lib/apt/lists/Debian%20GNU_Linux%207.0.0%20%5fWheezy%5f%20-%20Official%20i386%20DVD%20Binary-1%2020130504-15:20_dists_wheezy_main_binary-i386_Packages) (/var/lib/apt/lists/ftp.jaist.ac.jp_debian_dists_wheezy_main_binary-i386_Packages)
aptitude
apt-getの高機能版
aptitude サブコマンド
サブコマンドは大体apt-getと同じだが、一部異なる部分があるのでそこだけ記録
サブコマンド|説明 show パッケージ名|パッケージ情報 search パターン|検索 remove パッケージ名|設定ファイルを残してアンインストール purge パッケージ名|完全にアンインストール download パッケージ名|パッケージのダウンロード
# aptitude install sl
rpmコマンド
RH系列におけるdpkgコマンドみたいなもの。よく使っているので(rpm -ivh *.rpm
など)、抜けている具体例だけを追う。
# rpm -ivh jdk-7u21-linux-i586.rpm
Preparing... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
アンインストール
# rpm -e samba (--nodepsを加えると依存関係を無視する)
インストール済みパッケージ検索
# rpm -qa | grep vim
vim-enhanced-7.2.411-1.8.el6.x86_64
vim-minimal-7.2.411-1.8.el6.x86_64
vim-common-7.2.411-1.8.el6.x86_64
パッケージ情報
# rpm -qi
rpm -qi bash
Name : bash Relocations: (not relocatable)
Version : 4.1.2 Vendor: CentOS
Release : 14.el6 Build Date: Fri 22 Feb 2013 06:12:09 AM JST
Install Date: Thu 04 Apr 2013 04:58:46 PM JST Build Host: c6b7.bsys.dev.centos.org
Group : System Environment/Shells Source RPM: bash-4.1.2-14.el6.src.rpm
Size : 3139227 License: GPLv3+
Signature : RSA/SHA1, Sun 24 Feb 2013 02:39:30 AM JST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.gnu.org/software/bash
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
指定したファイルの元となるパッケージ
# rpm -qf /bin/echo
coreutils-8.4-19.el6.x86_64
インストールされるファイルの一覧
# rpm -qlp jdk-7u21-linux-i586.rpm
/etc
/etc/.java
/etc/.java/.systemPrefs
/etc/.java/.systemPrefs/.system.lock
/etc/.java/.systemPrefs/.systemRootModFile
/etc/init.d/jexec
/usr
/usr/java
/usr/java/jdk1.7.0_21
/usr/java/jdk1.7.0_21/COPYRIGHT
/usr/java/jdk1.7.0_21/LICENSE
/usr/java/jdk1.7.0_21/README.html
/usr/java/jdk1.7.0_21/THIRDPARTYLICENSEREADME-JAVAFX.txt
/usr/java/jdk1.7.0_21/THIRDPARTYLICENSEREADME.txt
/usr/java/jdk1.7.0_21/bin
/usr/java/jdk1.7.0_21/bin/ControlPanel
/usr/java/jdk1.7.0_21/bin/appletviewer
/usr/java/jdk1.7.0_21/bin/apt
/usr/java/jdk1.7.0_21/bin/extcheck
/usr/java/jdk1.7.0_21/bin/idlj
/usr/java/jdk1.7.0_21/bin/jar
/usr/java/jdk1.7.0_21/bin/jarsigner
/usr/java/jdk1.7.0_21/bin/java
/usr/java/jdk1.7.0_21/bin/java-rmi.cgi
/usr/java/jdk1.7.0_21/bin/javac
/usr/java/jdk1.7.0_21/bin/javadoc
/usr/java/jdk1.7.0_21/bin/javafxpackager
/usr/java/jdk1.7.0_21/bin/javah
/usr/java/jdk1.7.0_21/bin/javap
/usr/java/jdk1.7.0_21/bin/javaws
(省略)
依存関係
# rpm -qR perl
/usr/bin/perl
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.2)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libcrypt.so.1()(64bit)
libdb-4.7.so()(64bit)
libdl.so.2()(64bit)
YUMコマンド
言うまでもなし。Yello dog Updater Modified.
設定ファイル
# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
(以下はコメントだけなので省略)
リポジトリ設定ファイル
ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Vault.repo mirrors-rpmforge rpmforge.repo
CentOS-Debuginfo.repo epel.repo mirrors-rpmforge-extras
CentOS-Media.repo epel-testing.repo mirrors-rpmforge-testing
アプデート可能パッケージ一覧
# yum check-update
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
epel/metalink | 3.9 kB 00:00
* base: www.ftp.ne.jp
* epel: ftp.iij.ad.jp
* extras: www.ftp.ne.jp
* rpmforge: ftp.kddilabs.jp
* updates: www.ftp.ne.jp
base | 3.7 kB 00:00
epel | 4.2 kB 00:00
epel/primary_db | 5.2 MB 00:05
extras | 3.5 kB 00:00
rpmforge | 1.9 kB 00:00
updates | 3.4 kB 00:00
93 packages excluded due to repository priority protections
coreutils.x86_64 8.4-19.el6_4.2 updates
coreutils-libs.x86_64 8.4-19.el6_4.2 updates
curl.x86_64 7.19.7-36.el6_4 updates
gnutls.x86_64 2.8.5-10.el6_4.2 updates
gzip.x86_64 1.3.12-19.el6_4 updates
kernel.x86_64 2.6.32-358.6.2.el6 updates
kernel-firmware.noarch 2.6.32-358.6.2.el6 updates
kernel-headers.x86_64 2.6.32-358.6.2.el6 updates
(以下省略)
すべてのパッケージをアップデート
yum update
指定パッケージをアップデート
yum update パッケージ名
インストール
yum install パッケージ名
アンインストール
yum install パッケージ名
パッケージ情報を確認(未インストールも含む)
# yum info sl
(中略)
Available Packages
Name : sl
Arch : x86_64
Version : 3.03
Release : 6.el6
Size : 11 k
Repo : epel
Summary : Joke command for when you type 'sl' instead of 'ls'
URL : http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html
License : Freely redistributable without restriction
Description : The sl (Steam Locomotive) command is a joke which displays a train on your
: terminal when you accidentally type 'sl' instead of 'ls'.
リポジトリ上のすべてのパッケージ情報と、インストールの有無の確認
# yum list
パッケージ情報をキーワード検索
# yum search ruby
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.iij.ad.jp
* extras: www.ftp.ne.jp
* rpmforge: ftp.kddilabs.jp
* updates: www.ftp.ne.jp
93 packages excluded due to repository priority protections
epel/pkgtags | 300 kB 00:00
========================================= N/S Matched: ruby =========================================
rubygem-ZenTest.noarch : Automated test scaffolding for Ruby
rubygem-flexmock.noarch : Mock object library for ruby
rubygem-git.noarch : A package for using Git in Ruby code
rubygem-hoe.noarch : rake/rubygems helper for Rakefiles
パッケージグループの一覧
# yum grouplist
Loaded plugins: fastestmirror, priorities
Setting up Group Process
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.iij.ad.jp
* extras: www.ftp.ne.jp
* rpmforge: ftp.kddilabs.jp
* updates: www.ftp.ne.jp
base/group_gz | 212 kB 00:00
epel/group_gz | 237 kB 00:00
Installed Groups:
Additional Development
Compatibility libraries
E-mail server
Haskell
Milkymist
Perl Support
Ruby Support
System administration tools
Available Groups:
Backup Client
Backup Server
Base
CIFS file server
Client management tools
Console internet tools
Debugging Tools
Desktop
Desktop Debugging and Performance Tools
Desktop Platform
Desktop Platform Development
パッケージグループ単位でのインストール
# yum groupinstall "Desktop Platform"
パッケージのダウンロード(インストールはしない)
# yumdownload パッケージ名
雑感
意外と知らないことが多かった。aptitudeとapt-getの違いなんかも理解できた。 正直疲れた。。
LPICデバイスや起動まわりについて
かなり長い。
/proc/
以下の主なファイル
Linuxカーネルが認識しているデバイスに関する情報は、/proc
以下のファイルで確認できる。
ファイル名 | 説明 |
---|---|
/proc/bus/usb/* |
USBデバイス情報 |
/proc/cpuinfo/ |
CPU情報 |
/proc/interrupts/ |
IRQ情報 |
proc/pci |
PCIデバイス情報 |
/proc/scsi/scsi |
SCSIデバイス情報 |
デバイス周り
デバイスファイルの一覧。 ここにファイルがないとデバイスは使えない。
$ ls /dev/
MAKEDEV core fb input loop5 mcelog port ram12 ram6 rtc0 snapshot tty0 tty16 tty23 tty30 tty38 tty45 tty52 tty6 ttyS0 vcs1 vcsa2
VolGroup cpu fb0 kmsg loop6 mem ppp ram13 ram7 scd0 snd tty1 tty17 tty24 tty31 tty39 tty46 tty53 tty60 ttyS1 vcs2 vcsa3
block cpu_dma_latency fd log loop7 net ptmx ram14 ram8 sda sr0 tty10 tty18 tty25 tty32 tty4 tty47 tty54 tty61 ttyS2 vcs3 vcsa4
bsg crash full loop0 lp0 network_latency pts ram15 ram9 sda1 stderr tty11 tty19 tty26 tty33 tty40 tty48 tty55 tty62 ttyS3 vcs4 vcsa5
bus disk fuse loop1 lp1 network_throughput ram0 ram2 random sda2 stdin tty12 tty2 tty27 tty34 tty41 tty49 tty56 tty63 urandom vcs5 vcsa6
cdrom dm-0 hpet loop2 lp2 null ram1 ram3 raw sg0 stdout tty13 tty20 tty28 tty35 tty42 tty5 tty57 tty7 usbmon0 vcs6 vga_arbiter
char dm-1 hugepages loop3 lp3 nvram ram10 ram4 root sg1 systty tty14 tty21 tty29 tty36 tty43 tty50 tty58 tty8 usbmon1 vcsa zero
console dvd hvc0 loop4 mapper oldmem ram11 ram5 rtc shm tty tty15 tty22 tty3 tty37 tty44 tty51 tty59 tty9 vcs vcsa1
lsusb
コマンドでusbデバイスの情報が確認できる。
lspci
で pciデバイスの情報を確認できる。
-v
で詳しい情報を。-vv
で更に詳しい情報を得ることができる。
lsmod
でロードされているカーネルモジュールを確認できる。
これは/proc/modules
の情報を出力している。
# lsmod
Module Size Used by
ipt_REJECT 2351 2
nf_conntrack_ipv4 9506 4
nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
iptable_filter 2793 1
ip_tables 17831 1 iptable_filter
ip6t_REJECT 4628 2
nf_conntrack_ipv6 8748 2
nf_defrag_ipv6 11182 1 nf_conntrack_ipv6
xt_state 1492 6
nf_conntrack 79357 3 nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
ip6table_filter 2889 1
ip6_tables 19458 1 ip6table_filter
ipv6 321454 15 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
ppdev 8537 0
parport_pc 22690 0
parport 36209 2 ppdev,parport_pc
i2c_piix4 12608 0
i2c_core 31084 1 i2c_piix4
snd_intel8x0 30556 0
snd_ac97_codec 124967 1 snd_intel8x0
ac97_bus 1452 1 snd_ac97_codec
snd_seq 55759 0
snd_seq_device 6500 1 snd_seq
snd_pcm 86635 2 snd_intel8x0,snd_ac97_codec
snd_timer 22411 2 snd_seq,snd_pcm
snd 69907 6 snd_intel8x0,snd_ac97_codec,snd_seq,snd_seq_device,snd_pcm,snd_timer
soundcore 7958 1 snd
snd_page_alloc 8470 2 snd_intel8x0,snd_pcm
e1000 170678 0
sg 29350 0
ext4 363408 2
mbcache 8193 1 ext4
jbd2 90230 1 ext4
sd_mod 38976 3
crc_t10dif 1541 1 sd_mod
sr_mod 15177 0
cdrom 39085 1 sr_mod
ahci 41127 2
pata_acpi 3701 0
ata_generic 3837 0
ata_piix 24121 0
dm_mirror 14133 0
dm_region_hash 12085 1 dm_mirror
dm_log 9930 2 dm_mirror,dm_region_hash
dm_mod 82839 8 dm_mirror,dm_log
modprobe
でモジュールのロード
modprobe - システム管理コマンドの説明 - Linux コマンド集 一覧表
# modprobe e1000
# lsmod
Module Size Used by
ipt_REJECT 2351 2
nf_conntrack_ipv4 9506 4
nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
iptable_filter 2793 1
(省略)
e1000 170678 0
(省略)
システム起動の流れ
BIOS -> ブートローダー -> カーネル -> init
- BIOSはハードウェアのチェックや初期化を行い、ブートディスクからブートローダーを起動する
- ブートローダはハードディスクからメモリにカーネルを読み込む
- カーネルはメモリの初期化やクロックの設定を行いinitを起動する
dmesg
dmesg
コマンドで起動時のメッセージが確認できる。
$ dmesg |more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-358.2.1.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7
20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Mar 13 00:26:49 UTC 2013
Command line: ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_
LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106
rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
(以下省略)
/var/log/messages, /var/log/boot.log
/var/log/messages
や/var/log/boot.log
にも起動時のメッセージがある。
# cat /var/log/messages | more
May 22 16:16:01 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="986"
x-info="http://www.rsyslog.com"] rsyslogd was HUPed
May 23 03:42:56 localhost dhclient[915]: DHCPREQUEST on eth0 to 10.0.2.2 port 67 (xid=0x3db999f
a)
May 23 03:42:56 localhost dhclient[915]: DHCPACK from 10.0.2.2 (xid=0x3db999fa)
May 23 03:42:58 localhost dhclient[915]: bound to 10.0.2.15 -- renewal in 41498 seconds.
May 23 11:24:50 localhost yum[4366]: Installed: compat-readline5-5.2-17.1.el6.x86_64
May 23 11:24:52 localhost yum[4366]: Installed: ruby-libs-1.8.7.352-10.el6_4.x86_64
May 23 11:24:52 localhost yum[4366]: Installed: ruby-1.8.7.352-10.el6_4.x86_64
May 23 13:42:05 localhost kernel: tmux invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0
, oom_score_adj=0
May 23 13:42:05 localhost kernel: tmux cpuset=/ mems_allowed=0
May 23 13:42:05 localhost kernel: Pid: 2180, comm: tmux Not tainted 2.6.32-358.2.1.el6.x86_64 #
1
May 23 13:42:05 localhost kernel: Call Trace:
May 23 13:42:05 localhost kernel: [<ffffffff810cb5f1>] ? cpuset_print_task_mems_allowed+0x91/0xb0
(以下省略)
# more /var/log/boot.log
Welcome to CentOS
Starting udev: [ OK ]
Setting hostname localhost.localdomain: [ OK ]
Setting up Logical Volume Management: 2 logical volume(s) in volume group "VolGroup" now acti
ve
[ OK ]
Checking filesystems
/dev/mapper/VolGroup-lv_root: clean, 86443/429088 files, 741154/1714176 blocks
/dev/sda1: recovering journal
/dev/sda1: clean, 44/128016 files, 69961/512000 blocks
[ OK ]
Remounting root filesystem in read-write mode: [ OK ]
Mounting local filesystems: [ OK ]
Enabling /etc/fstab swaps: [ OK ]
Entering non-interactive startup
Starting monitoring for VG VolGroup: 2 logical volume(s) in volume group "VolGroup" monitored
[ OK ]
ip6tables: Applying firewall rules: [ OK ]
iptables: Applying firewall rules: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
Determining IP information for eth0... done.
[ OK ]
Starting auditd: [ OK ]
Starting system logger: [ OK ]
Mounting other filesystems: [ OK ]
Retrigger failed udev events [ OK ]
Starting sshd: [ OK ]
Starting postfix: [ OK ]
Starting perl: [ OK ]
Starting crond: [ OK ]
May 24 13:02:31 localhost NET[29747]: /sbin/dhclient-script : updated /etc/resolv.conf
initの振る舞い
/etc/inittab
を読み込む/etc/rc.sysinit
を実行する/etc/rc
を実行する/etc/rc
が/etc/rc<ランレベル>.d/
以下のスクリプトを実行する
これはSysVinitと呼ばれる仕組みで、逐次処理なので起動時間が遅いとうデメリットがある。
これに対してUpstartやSystemdといった並列で起動処理を行う仕組みを採用するディストリもある。
ランレベル
ランレベルとは動作のモード。
Redhat系列
ランレベル | モード |
---|---|
0 | 停止 |
1 | シングルユーザーモード |
2 | マルチユーザーモード (テキストログイン、NFS^1サーバ停止) |
3 | マルチユーザーモード(テキストログイン) |
4 | 未使用 |
5 | マルチユーザーモード (グラフィカルログイン) |
6 | 再起動 |
S または s | シングルユーザーモード |
ランレベル | モード |
---|---|
0 | 停止 |
1 | シングルユーザーモード |
2 | マルチユーザーモード |
3 | マルチユーザーモード |
4 | マルチユーザーモード |
5 | マルチユーザーモード |
6 | 再起動 |
S または s | シングルユーザーモード |
ランレベルの確認・変更
runlevel
コマンドで現在のランレベルを確認できる
# runlevel
N 3
右の数字が現在のランレベル。左が一個前のランレベル(Nの場合は何もない。)
init
やtelinit
コマンドでランレベルの変更が可能。
# init 1
(以降フルパスでないとコマンドが実行できなかった)
# /usr/bin/passwd
(シングルユーザーモードにするとパスワードなしでrootログイン
できるのでうっかりpassを忘れた時に便利)
# init 3
(ログインプロンプトが表示される)
# runlevel
S 3
起動スクリプト
/etc/rc<ランレベル>.d/
以下にスクリプトファイルが格納されていて、
Kから始まるものが停止用Sから始まるのが起動用スクリプトとなっている。
数字は起動する順序。
# ls /etc/rc3.d/
K10saslauthd K89rdisc S10network S25netfs S85perl-fastcgi
K15nginx S02lvm2-monitor S11auditd S26udev-post S90crond
K50netconsole S08ip6tables S12rsyslog S55sshd S99local
K87restorecond S08iptables S25blk-availability S80postfix
それぞれ/etc/init.d/
以下のスクリプトへのシンボリックリンクとなっている。
# ls -l /etc/rc3.d/
total 0
lrwxrwxrwx. 1 root root 19 Apr 4 17:00 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 15 Apr 7 15:09 K15nginx -> ../init.d/nginx
lrwxrwxrwx. 1 root root 20 Apr 4 17:00 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 21 Apr 4 17:00 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 15 Apr 4 17:00 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 22 Apr 4 17:02 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. 1 root root 19 Apr 4 17:00 S08ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Apr 4 17:00 S08iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 17 Apr 4 17:21 S10network -> ../init.d/network
lrwxrwxrwx. 1 root root 16 Apr 4 17:02 S11auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 17 Apr 4 17:00 S12rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 26 Apr 4 17:02 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 15 Apr 4 17:21 S25netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 19 Apr 4 17:00 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 14 Apr 4 17:02 S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Apr 4 17:00 S80postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 22 Apr 7 14:35 S85perl-fastcgi -> ../init.d/perl-fastcgi
lrwxrwxrwx. 1 root root 15 Apr 4 17:00 S90crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 11 Apr 4 17:21 S99local -> ../rc.local
起動停止はかなりよく知られている
# /etc/init.d/nginx start
Starting nginx: [ OK ]
# /etc/init.d/nginx stop
Stopping nginx: [ OK ]
デフォルトランレベル
/etc/inittab
を編集することで起動時のランレベルを指定できる。
# cat /etc/inittab
(一部省略)
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
id:3:initdefault:
指定方法は上記例を見て分かる通り
id:<ランレベル>:initdefault
で指定できる。
システムのシャットダウンと再起動
当たり前だけどshutdown
コマンドを使う。
5分で停止 (-hはhaltのh)
shutdown -h +5 "Shutdown in 5 minutes"
すると下のようなメッセージが表示される
Broadcast message from kisho@localhost.localdomain
(/dev/pts/2) at 8:04 ...
The system is going down for halt in 3 minutes!
Shutdown in 5 minutes
以下の例では実際にはシャットダウンせず警告メッセージのみ表示
shutdown -k now "May be I will shutdown this machine"
22:00に再起動
shutdown -r 22:00
現在実行中のシャットダウン処理をキャンセル
shutdown -c
fsck(ファイル・システムの検査と修復。file system checkの略?)を次回起動時に実行
shutdown -Fh
fsckを次回起動時にスキップ
shutdown -fr
中途半端な感じが否めない2通りに折りたためる無印良品の傘
はてなから出されている
今週のお題「梅雨」
に関することを書こうと思います。
先日無印良品で 2通りにたためる折りたたみ傘 55cm、茶 | 無印良品ネットストア
たたみ方の2通りとは
- 普通の折りたたみ傘のように骨の関節部分を折ってたたむ。
- 普通の折りたたみでない傘のように単純に傘を束ねて紐で巻いてたたむ。
ではメリットとデメリットを
メリット
骨組みの素材のお陰で軽い!もうひとつは2のたたむ方法は駅のホームで傘を折りたたもうとしたときに電車が来た時なんかにパッとできるので便利。
- デメリット*
でかい。1の方法でたたんで普通の折りたたみ傘と並べてもこの大きさ。
2通りにたためるようにしたことで折りたたみ傘本来の特徴である携帯性が損なわれている感が否めない。鞄にいれてもかさばってしまう。。。
以上を踏まえてみると中途半端な感が否めない。 ただモノは考えようで、折り畳み傘が普通の傘のようににたためるようになったという様に考えずに、 普通の傘が折り畳み傘のようにたためるようになったと考えるとなかなか良い商品だと思ってしまう。
なので無印良品の中の人には「2通りにたためる折りたたみ傘」ではなく「2通りにたためる傘」という商品名をサジェストしたい。半分冗談ですけど。
比較的高価な傘はあまり買ったことがなかったのでなんだかんだで梅雨中は頻繁に利用すると思います。
なんでパクりすごくてイノベーションが過大評価されているのか
先日思わず納得してしまった記事に出会った。中身をかいつまんで紹介。
Why Copying Is Fucking Awesome And Innovation Is Truly Overrated
筆者は冒頭でCốc Cốc | Trang chủがChromeのソースコードをパクって新たなブラウザとして公開していることなどがパクリだとしてネット上で批判されていることを挙げた上で、このような批判はネット上だけではなくスタートアップイベントなんかでもよく聞かれるとしている。
I hear too often comments like “They’re successful but they copied so-and-so”. But seriously, get over it.
訳すと以下の様な感じ。
私はよく「奴らは成功しているけどあれもこれもパクってるよ」なんてコメントを沢山聞く。でも本気私は思う。気にすんな。
そして2名の著名人の言葉を引用している。
“Good artists copy, great artists steal.” – Pablo Picasso"
「良い芸術家は模倣し、偉大な芸術家は盗む。」 パブロ・ピカソ
It turns out all you gotta do is copy great shit 99 percent then innovate one percent every month and you can beat the crap outta most people.” – Dave McClure
「素晴らしいものの99%を真似した上で1%の革新を毎月生み出せば周りの人々のほとんどに勝てると言える。」Dave McClure
Dave McClure氏のことは存じ上げなかったけどWikipediaを見た感じスーパーなエンジェル投資家らしい。
そのあとは、
オリジナルよりベターであることは一発で負けてしまうことよりはベターだ
- iPhoneはみんなが革新的なデバイスだと思ったけど、別に新しい技術を取り入れたというよりは既存の新しい技術の詰め合わせだったよね。
- googleやfacebook、前者は世界初の検索エンジンでなかったし、後者は世界初のSNSでなかったよね。
人間にとって真似ることは学ぶことだ
- 君はどうやって言葉を覚えたんだ?
- 0から何かを生み出すのはなかなかうまく行かない。
パクリがOKならどうやって行けばいいんだろう
Think about the user, be the user, and eat your own dog food.
ユーザーのことを考えて、ユーザーになりきろう。そしてEat Your Own Dogfood。その上でパクるんだ
まぁうまくパクれってことですね。
院生時代に指導教官が「中途半端な手法と結果で論文を出すと誰かが改善させた良い手法を思いついて更にレベルの高い学会に論文出しちゃうよ。」と言っていたのを思い出します。
まぁ僕はスタートアップをやる予定は今のところないですが、ものの考え方として納得できたので頭に閉まっておくことにします。