ボクココ

個人開発に関するテックブログ

Linux/UNIX操作のまとめ(2/4)

そういや去年のGWは学校の課題でデータマイニングの基礎である決定木を作ってたなぁ。Rubyで2,3日丸々使ってようやく完成させた時の喜びはまだ覚えてる。 1次締切内で出せたのは3人しかいなかったってのはもはや伝説だな。俺は好きな言語であるRubyで作ってしまい、それ以降その先生にかなり目を付けられるようになったのは間違いないw

今年はひたすら勉強。このGWでこの490ページある本を一気に読みおえようとしている。何故か毎年この時期は勉強に対するモチベーションが非常に高い。たった今その半分である246ページをまとめ、読み終えたのでここで一区切りとしよう。
ここまでの感想としては、どちらかというと知っている内容だったり、今までの知識で何とかなりそうな部分が多かった。後半からそう簡単には行かなくなることを考えると、キツイけれども楽しみだね。そんじゃ貼っておこう。


テキスト処理
head filename , head -n filename
tail filename , tail -n filename
ファイルの1部分を表示する
headのnは先頭から何行取得か
tailのnは末尾から何行取得かを指定できる

sort op filename
ファイル内容をソートする
-r 逆順ソート
-n 数値比較
まだ色々なオプションがあるが、それについてはリファレンスを。

uniq op input_filename output_filename
ファイル内の重複を削除する
-u 重複していない行だけを表示
-d 重複している行だけを表示
予めソートされている必要がある。
組み合わせ例 sort myfile | uniq
このほかに文字位置を指定して重複比較も可能
文字位置Aから文字位置Bまでといった具合

tr op str1 str2
文字を置換する str1に含まれる文字をstr2の同じ位置の文字に置き換え
-c str1に書かれた以外の文字を変換対象にする
-d str1に含まれる文字を削除する この場合str2は不要
-s 連続する文字を1字に圧縮する
文字列中で使用できる特殊文字
エスケープ文字
文字1-文字2 文字1〜文字2の範囲
[文字*n] n個の文字
[文字*] str1と同じ長さの文字繰り返し
tr abcd ABCD → aをA bをBという感じで変換
tr -cs a-zA-Z0-9 "[\n*]" < ss3
テキストの中の単語を1語1行で取り出す有名な手法
指定した文字以外を改行に変換する処理を行っている

less op filename
テキストをページ単位で表示する2
-s 連続した空白行を1行に圧縮
-c いったん画面クリアしながら次のページを表示する
-E 最終行まで行ったら自動的に終了
-i 文字列検索のとき大文字小文字を区別しない
-m 全体の何%の部分を表示しているかガイド表示する
-行数 1度にスクロールする行数を指定
+行番号 指定した番号から表示
+/文字列 指定した文字列のある行から表示開始
見方
Enter 次の1行 ↓、↑でも移動可能
Space 次の1画面表示
b 前の1画面表示
q 終了    
/文字列 検索
-N 行番号表示
g,G 最初の行 最後の行の表示
= 現在の行番号を表示
v エディタを起動(デフォルトでvi)これは使える!
manコマンドは内部的にlessコマンドを使ってマニュアル表示している

lv filename
lessと同じだが、Windowsなどの文字コードとかで絡んできた時に使う

grep -op pattern filename
文字列を検索する
-n 行番号も表示
-c マッチした行数だけを表示
-i 大文字小文字を区別しない
-v マッチしない行を表示
-数字 マッチした行の前後の行も表示
fgrep でより多くの正規表現を実現。(+や?など)

diff op filename1 filename2
ファイル内容の相違を調べる
-i 大文字と小文字の違いを区別しない
出力メッセージの意味
3c4 1つ目のファイルの3行目と2つ目のファイルの4行目
に違いがある。文字列を置き換える(change)と正しいものになる
cの他にa,dがある。それぞれ(add),(delete)

echo text
テキストをエコー表示する

ファイルのアクセス制御
ディレクトリ情報の見方
ファイル種類 アクセス権 リンク数 ファイル所有者 ファイル所有者の属するグループ名 ファイルサイズ(バイト)更新日時 ファイル名
ファイルの種類
- 通常ファイル
d ディレクトリ
l シンボリックリンク
b ブロックデバイス
c キャラクタデバイス
p パイプ
s ソケット
chmod mode filename
パーミッションを変更する
chown new_user_name filename
オーナを変更する
-R ディレクトリにある全てのファイルのオーナを一括して変更

マニュアル表示とコマンド調査
man
マニュアル表示
-f キーワードの1行説明を表示する
-k キーワードのある行を表示する。一部分しかわからない時に便利。

type op command_name
コマンドのタイプを調べる
-t コマンドのタイプを表示
-path コマンドのパスを表示

info
infoマニュアルの起動
クロスリファレンス機能を含むハイパーテキストヘルプシステム

ユーザとグループの管理
スーパーユーザはユーザのパスワードもできる
グループを作ったり削除を行う
それにアクセス許可の設定を行う
ユーザを切り替えるためにsuコマンドを用いる

ファイルシステムとマウント処理
Linuxの標準ディレクトリ構成
/UNIXファイルシステムの最上位になるディレクトリ
bin バイナリ形式の実行可能ファイル。基本コマンドが置かれる
boot Linuxカーネルブート処理に必要なファイル
dev デバイスファイル
etc システム管理用の各種設定ファイルと起動時に実行されるスクリプト
home ユーザのホームディレクトリ
lib 共有ライブラリ(Cのライブラリ等)
lost+found 迷子のファイルの置き場
mnt CDなどの一時的なマウント用ディレクトリ
proc Linuxカーネルの動作情報を含む特殊なファイルシステム
root スーパユーザのホームディレクトリ
sbin システム管理者が使用する実行可能ファイル。緊急時の必須コマンド
tmp 一時的なファイルの置き場。一定期間後に自動消去される
usr 起動には必要が無いが重要なプログラム
var ログファイルやプリンタスプールなど内容や容量が変化していくファイル

CDを使うときはまずマウント処理をする。
作業が終わったらアンマウント処理をしてからメディアを抜き取る
最近のは自動的にマウントしてくれる。そうでない場合はmountコマンドを使用
でもマウント処理しないでやりたい。(MS-DOS)→mtools

シェル操作
リダイレクト、パイプ、エイリアス、コマンド連続実行、バッチ処理
ユーザインタフェース機能、シェルプログラミング機能の二つの役割
現在使われているシェル
sh どのUNIXにもある。シェルスクリプト用として用いられる
bash shの強化版。Linuxの標準シェル
それ以外に csh , tcsh , ksh , zsh , ash

chsh (username)
シェルを変更する
シェルはシステムに用意されているものなら自由に切り替えられる
自分の使っているシェルは$SHELLに格納されているのでechoで表示
もしくはpsでプロセス表示

シェルの環境設定
ユーザがログインすると/etc/passwdファイルの中にユーザ毎に記述されているログインシェルが起動
それがbashであれば/bin/bashが起動される。
ログインでなく、一時的に使用するシェルとして起動されたら(bashと入力したら)~/.bashrcを実行
ログイン時に1度だけ設定したい場合は~/.bash_profile
bash起動時にその都度設定したい場合は~/.bashrcに記述
bashで起動することで、その設定が反映される

シェル変数
シェルの動き方や見え方を調節したり、シェルプログラミングで使われる。
慣習として大文字で書かれる
set 全ての変数の設定を見る パイプでgrepと組み合わせると検索可
変数名=値 代入
echo $変数名 変数の内容を見る
unset 変数名 変数の定義を削除
使い道
よく使うディレクトリを変数に代入しておくことで移動を楽に
よく使うファイル名を保存しておいてすぐ実行できるようにする

組み込み変数
最初から用意されている変数
PATH コマンドを検索するディレクトリリス
複数指定する時は:で区切る ex)PATH=$PATH:$HOME/bin
PS1 プロンプトを決める
コマンドラインで表示される入力促進マーク
PS2 行継続をしたときのプロンプトを決める
HOME ユーザのホームディレクトリ

export シェル変数名
シェル変数を環境変数に昇格
printenv 変数名
環境変数の一覧を見る
help コマンド名
シェルの組み込みコマンドを知る

コマンドラインの操作
コマンドラインを行継続する
\を押してEnterでいける
コマンドを()でグループ化することも可能
他の文字列と変数名が被ってしまう場合は{}で区切る
ex echo aaa${HOME}bbb
コマンド置換機能
バッククォーツ(``)を使うことで、その結果表示をコマンド文字列の一部として使うことができる
ex) cat mycmnd → who
`cat mycmnd' → コマンドでwhoを実行した結果となる
エスケープ
特殊文字には\でエスケープ。
文字列の場合は""で包む
シェル内の#はコメントを表す