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の振る舞い

  1. /etc/inittabを読み込む
  2. /etc/rc.sysinitを実行する
  3. /etc/rcを実行する
  4. /etc/rc/etc/rc<ランレベル>.d/以下のスクリプトを実行する

これはSysVinitと呼ばれる仕組みで、逐次処理なので起動時間が遅いとうデメリットがある。
これに対してUpstartSystemdといった並列で起動処理を行う仕組みを採用するディストリもある。

ランレベル

ランレベルとは動作のモード。

Redhat系列

ランレベル モード
0 停止
1 シングルユーザーモード
2 マルチユーザーモード (テキストログイン、NFS^1サーバ停止)
3 マルチユーザーモード(テキストログイン)
4 未使用
5 マルチユーザーモード (グラフィカルログイン)
6 再起動
S または s シングルユーザーモード

Ubuntu, Debian GNU/Linux

ランレベル モード
0 停止
1 シングルユーザーモード
2 マルチユーザーモード
3 マルチユーザーモード
4 マルチユーザーモード
5 マルチユーザーモード
6 再起動
S または s シングルユーザーモード

ランレベルの確認・変更

runlevelコマンドで現在のランレベルを確認できる

# runlevel
N 3

右の数字が現在のランレベル。左が一個前のランレベル(Nの場合は何もない。)

inittelinitコマンドでランレベルの変更が可能。

# 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通りとは

  1. 普通の折りたたみ傘のように骨の関節部分を折ってたたむ。
  2. 普通の折りたたみでない傘のように単純に傘を束ねて紐で巻いてたたむ。

ではメリットとデメリットを

メリット

骨組みの素材のお陰で軽い!もうひとつは2のたたむ方法は駅のホームで傘を折りたたもうとしたときに電車が来た時なんかにパッとできるので便利。

  • デメリット*

でかい。1の方法でたたんで普通の折りたたみ傘と並べてもこの大きさ。

f:id:fakeyakuza:20130604100346j:plain

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を見た感じスーパーなエンジェル投資家らしい。

Dave McClure

そのあとは、

オリジナルよりベターであることは一発で負けてしまうことよりはベターだ

  • iPhoneはみんなが革新的なデバイスだと思ったけど、別に新しい技術を取り入れたというよりは既存の新しい技術の詰め合わせだったよね。
  • googlefacebook、前者は世界初の検索エンジンでなかったし、後者は世界初のSNSでなかったよね。

人間にとって真似ることは学ぶことだ

  • 君はどうやって言葉を覚えたんだ?
  • 0から何かを生み出すのはなかなかうまく行かない。

パクリがOKならどうやって行けばいいんだろう

Think about the user, be the user, and eat your own dog food.

ユーザーのことを考えて、ユーザーになりきろう。そしてEat Your Own Dogfood。その上でパクるんだ

まぁうまくパクれってことですね。

院生時代に指導教官が「中途半端な手法と結果で論文を出すと誰かが改善させた良い手法を思いついて更にレベルの高い学会に論文出しちゃうよ。」と言っていたのを思い出します。

まぁ僕はスタートアップをやる予定は今のところないですが、ものの考え方として納得できたので頭に閉まっておくことにします。