文字列の変換や削除など
標準入力の操作について、文字列などを変換や削除を行う。
sedコマンド
sed [オプション] {編集コマンド} [ファイル名]
オプション | 説明 |
---|---|
-e | スクリプトを実行する |
-n 行番号 | 指定した行だけを表示 |
文字列の置換、削除、表示。
編集コマンド | 説明 |
---|---|
s/パターン/置換文字/ | 各行を対象に、最初にパターンに合致する文字列を置換文字列に変換 |
s/パターン/置換文字/g | ファイル内全体を対象に、パターンに合致する文字列を置換文字に変換 |
d | パターンに合致する行を削除 |
p |
パターンに合致する行を表示 オプションnと組み合わせて使う。 |
単語単位の変換や削除を行う。入力ストリーム(ファイルまたはパイプからの入力)に対してテキスト変換を行うために用いる。
cutコマンド
cut [オプション] [ファイル名]
オプション | 説明 |
---|---|
-c 位置 | 指定された位置の各文字だけを表示 |
-b 位置 | 指定された位置の各バイトだけを表示 |
-f フィールド番号 | 指定された各フォールドだけを表示 |
-d 区切り文字 |
オプションfと一緒に使い、フィールドの区切り文字を指定 デフォルトはタブ |
-s | オプションfと一緒に使い、フィールドの区切り文字を含まない行を表示しない |
ファイル内の各行で特定の部分のみを取り出す。
expandコマンド
expand [オプション] [ファイル名]
オプション | 説明 |
---|---|
-i | 行頭のタブのみスペースへ変換する |
-t | 揃える桁数を指定する |
指定したファイル内にあるタブをスペースに変換。
デフォルト実行の場合は、8桁おきに設定される。
unexpandコマンド
unexpand [オプション] [ファイル名]
オプション | 説明 |
---|---|
-a | 全ての空白を変換 |
-t | 置換えるタブ幅を指定 |
空白をタブに変換。
grepコマンド
grep [オプション] [検索する文字列パターン] [ファイル名...]
オプション | 説明 |
---|---|
-v | パターンに一致しない行を表示 |
-n | 行番号を表示 |
-l | パターンと一致するファイル名を表示 |
-i | 大文字と小文字を区別しないで検索 |
テキストデータの文字列を検索する。
指定されたパターンに一致する行を表示する。
文字パターンには正規表現と言われる記号が用いられることが多い。
正規表現
概要
記号や文字列を組み合わせて、目的のキーワードを見つけるためのパターンを作り、検出する手段・方法のこと。
記号はメタキャラクタと呼ばれるもので、それぞれの記号にちゃんと意味がある。
この方法を用いることで、多くの文章の中から簡単に見つけいた文字列を検索することが可能。
メタキャラクタ
メタキャラクタ | 説明 | 正規表現の例 | マッチする例 |
---|---|---|---|
. |
任意の1文字 文字の種類に関係なく1文字に該当 |
b.k (bから始まってkで終わる3桁の文字列) |
bok bak bbk |
* |
直前のパターンの0回以上繰り返し (最長一致) |
b.*k (bから始まってkで終わる2桁以上の文字列) |
bk bok book |
+ |
直前のパターンの1回以上繰り返し (最長一致) |
bo.+k (bから始まってkで終わる3桁以上の文字列) |
bok book boook booooook |
? |
直前のパターンが0〜1回繰り返し (最長一致) |
bo?k |
bok book |
文字列|文字列 |
|の左右にある文字列のいずれか。 (〜または〜) |
大阪|東京 大阪(市|府) |
大阪または東京 |
[文字列] | []の中にある文字列のいずれか1文字。 |
[ABC] [A-G] |
A、B、Cのいずれかにマッチ AからGのいずれかにマッチ |
[^文字列] | [^]の中にある文字列が含まれない1文字 |
[^ABC] [^A-G] |
A、B、C以外のいずれかにマッチ AからG以外のいずれかにマッチ |
^ | 論理行頭 | ^◯ |
◯が行の先頭にある行にマッチ ◯Lineを昨日送ったよ。 Line◯を昨日送ったよ。 Lineを昨日送ったよ。◯ |
$ |
論理行末 |
$。 |
。が行の末尾にある行にマッチ Lineを昨日送ったよ。 Lineを昨日送った。よ 。Lineを昨日送ったよ |
\ | 直後のメタ文字をエスケープする。 |
\$ \* |
\$ $にマッチ。 |
\n |
改行文字 |
\n →改行 ^\n → 空改行 |
東京都渋谷区<改行> <空改行> |
\t | タブ文字 | \t | 男芸人 ランキング |
\s |
空白文字 (半角スペース、\t、\n、\r、\f) |
\s | |
\S |
空白文字 (半角スペース、\t、\n、\r、\f以外全て) |
\S | |
\d | 半角数字 |
\d → 半角数字 \d{4} → 4桁の数字 (〒|ZIP:)\d{3}-\d{4} → 郵便番号 0[89]0-\d{4}-\d{4} → 電話番号(ハイフン有り) 0[89]0\d{8} → 電話番号(ハイフン無し) |
1234567890 1234 〒163-8001 090-0123-4567 08001234567 |
\D |
半角数字以外 (\d以外) |
\D | あいう年’@ |
\w | 半角英数字とアンダースコア |
\w → 半角英数字とアンダースコア [\w.\-]+@[\w\-]+\.[\w.\-]+ → メールアドレス https?://[\w/:%#\$&\?\(\)~\.=\+\-]+ → URL |
fatajnadsa fnnjfp_ hatena_blog.G@hatena_blog.ne.jp |
\W |
半角英数字とアンダースコア以外 (\W以外) |
\W | \w以外 |
\l | 半角英小文字すべて |
\l→ 半角英小文字 [\u\l] → 半角英字 [^\u\l] → 半角英字以外 [\u\l\d] → 半角英数字
|
asffewfona AFNKwfaqTB 123(~~(_{あ亜 oufa802rhr |
\L |
半角英小文字以外 (\l以外) |
\L | \l以外 |
\u | 半角英大文字全て |
\u → 半角英大文字 [\u\l] → 半角英字 [^\u\l] → 半角英字以外 [\u\l\d] → 半角英数字 |
AFNSOSBEUTY AFNKwfaqTB 123(~~(_{あ亜 oufa802rhr |
\U |
半角英大文字以外 (\u以外) |
\U | \u以外 |
フィルタによる処理
標準入力からデータを受け取り、受け取ったデータを加工して標準出力に出力する機能。
headコマンド
head [オプション] [ファイル名...]
オプション | 説明 |
---|---|
-n 行数 | 指定された行数分だけ表示する |
-c バイト数 | 出力するバイト数を指定する |
テキストファイルの先頭部分を表示する。
オプションnで行数を指定しない場合、デフォルトで10行まで表示する。
tailコマンド
tail [オプション] [ファイル名...]
オプション | 説明 |
---|---|
-n 行数 | 指定された行数分だけ表示する |
-f |
ファイルの末尾が常に追記されているものと仮定して、 最終部分を読み続ける。 |
テキストファイルの末尾部分を表示する。
headコマンド同様、オプションnなしで実行するとデフォルトで10行まで表示する。
trコマンド
tr [オプション] [文字郡1] [文字郡2]
オプション | 説明 |
---|---|
-d 文字郡1 | 文字郡1で一致した文字を削除する |
-s 文字郡1 文字郡2 |
文字郡1で一致した文字を文字郡2に置換する |
標準入力の文字を指定のフォーマットに変換して、標準出力する。
sortコマンド
sort [オプション] [ファイル名...]
オプション | 説明 |
---|---|
-b | 先頭の空白を無視する |
-f |
大文字・小文字を区別しない |
-r |
降順にソートする |
ファイル内容をソートして標準出力する。
デフォルトでは昇順、オプションrを指定すると降順。
ファイルが複数ある場合は、各ファイルの内容を並び替えた後に連結して出力。
joinコマンド
join [オプション] [ファイル名(番号1)] [ファイル名(番号2)]
オプション | 説明 |
---|---|
-a ファイル番号 | 指定したファイルの番号の内容を全て表示する。空白の場合も行を表示する |
-j フィールド | 連結するフィールドを指定する |
引数で指定された2つのファイルを読み込んで、共通のフィールドを持つ行を連結する。通常、フィールドは空白、タブ、改行文字で区切られる。
uniqコマンド
uniq [オプション] [入力ファイル[出力ファイル]]
オプション | 説明 |
---|---|
-c | 行の前に出現回数を出力する |
-d | 重複した行のみ出力する |
-u | 重複していない行のみ出力する |
標準入力から行を読み取り、重複する行を取り除いて標準出力する。
標準入力は予めソートしておかなければ、思いもしない結果になってしまう。
標準入出力の制御
標準入出力とは
入力をどこから受け入れるか、出力をどこに送るかを制御すること。
入出力制御には3種類のストリーム(データの流れ)がある。
- 標準入力
- 標準出力
- 標準エラー出力
全てのプロセス起動時に、上記の3つが生成される。
デフォルトでは標準入力は「キーボード」、標準出力と標準エラー出力は「コマンドを実行した端末」になっている。
これら3つを識別する為に、「ファイル記述子(ファイルディスクリプション)」というものが存在する。
どのファイルに繋げているかを識別するための記号。
ファイル記述子 | 説明 |
---|---|
0 | 標準入力のファイル記述子 |
1 | 標準出力のファイル記述子 |
2 | 標準エラー出力のファイル記述子 |
3以降は
これらを利用した「リダイレクション」によって入出力の切り替えをすることができる。
とりあえずは、ファイルへのアクセスにはファイル記述子で識別して、変えたい時はリダイレクションを使うんだなぐらいの理解。
標準出力、標準エラー出力の例
lsコマンド実行で存在するfile01と存在しないfileXを指定して実行した結果、fileXに対しては「ls:〜アクセスできません。そのようなファイルやディレクトリはありません」とエラーが表示され、file01に対しては名前が表示されている。
リダイレクト
リダイレクトは「>」と「<」を使って、格納先を決定する。
「>」は標準出力と標準エラー出力の上書き。「>>」のように2つ書くと、追記する。
「<」は標準入力。
標準出力・標準エラー出力のリダイレクト例
例1:lsコマンドの出力結果をfile01に格納。
例2:lsコマンドで存在しないファイルと存在するファイルを指定し、標準エラー出力のみをfile02に格納。
例3:lsコマンドで存在しないファイルと存在するファイルを指定し、標準出力と標準エラー出力をfile03に格納。
標準入力のリダイレクト例
例1:file04の内容を標準入力としてコマンドを実行。
パイプ
「|」を用いてコマンドの結果を受け取って別のコマンドを実行することができる。
teeコマンド
tee [オプション] [ファイル名]
オプション | 説明 |
---|---|
-a | ファイルに追記 |
teeコマンドは標準入力から読み込んだデータを標準出力とファイルの両方に出力する。
なので、画面にも表示されるし、ファイルにも格納される。
まとめ
標準入出力、リダイレクト、パイプはエラーの管理やプロセス間でのやり取りでよく使う項目なので、必ず覚えておきましょう。
コマンドを繋げて使いたい場合はパイプ、標準入力はキーボード入力したものををまとめて使いたい場合に使用ぐらいの理解をしました。
ディレクトリとファイルの管理
ディレクトリとファイルの作成
ディレクトリとファイルの作成方法にはいくつか存在する。
mkdirコマンド
mkdir [オプション] [ディレクトリ名...]
オプション |
説明 |
---|---|
-m[アクセス権] | 明示的にアクセス権を指定してディレクトリを作成する |
-p | 中間ディレクトリを同時に作成する |
mkdirコマンドはディレクトリの作成を行う。
引数に複数のディレクトリ名を指定することで、一度に複数のディレクトリを作成することも可能。
touchコマンド
touch [オプション] [ファイル名...]
オプション |
説明 |
---|---|
-t [タイムスタンプ] | [[CC]YY]MMDDhhmm[.ss]形式のタイムスタンプ似変更する。
CC:西暦の上2桁、YY:西暦の下2桁、MM:月、DD:日、hh:時、mm:分、ss:秒 |
-a | アクセス日時のみ変更する |
-m | 更新日時のみ変更する |
touchコマンドの引数に既存のファイル名を指定すると、そのファイルのアクセス時刻と修正時刻をtouchコマンドの実行時刻に変更。
ファイルやディレクトリの移動
ディレクトリとファイルを移動させるためのコマンドがある。
mvコマンド
mv [オプション] [移動元ディレクトリ...] [移動先ディレクトリ]
mv [オプション] [移動元ファイル名...] [移動先ディレクトリ]
mvコマンドの最後に引数に指定されたディレクトリに移動元のファイルもしくはディレクトリが同じ名前で移動する。
cpコマンド
cp [オプション] [元ファイル名] [先ファイル名]
cp [オプション] [元ファイル名] [先ディレクトリ]
オプション | 説明 |
---|---|
-i | コピー先に同じファイル名が存在する場合は上書きするか確認する |
-f | コピー先に同じファイル名が存在しても、強制的に上書きする |
-p | コピー元の所有者、タイムスタンプ、アクセス権などの情報を保持したままコピーする |
-R, -r | コピー元にディレクトリを指定した場合、再帰的にディレクトリをコピーする |
ファイルやディレクトリをコピーする時に使用する。
また、複数のファイルを同時にコピーすることも可能。
ディレクトリやファイルの削除
ディレクトリやファイルの削除を実行するコマンドがある。
GUIと異なりオプションなしで実行すると削除確認なしで削除されてしまうため、実行には十分注意が必要になる。
rmコマンド
rm [オプション] [ファイル名...]
rm [オプション] [ディレクトリ...]
オプション | 説明 |
---|---|
-i | ファイル削除する前に確認する |
-f | ユーザへの確認なしに削除する |
-R, -r | 指定されたディレクトリ内にファイル、ディレクトリが存在していても全て削除する |
ファイルタイプの判定
表示されている物が何者なのか判定するためのコマンド。
ファイルやディレクトリ、写真など色々なものがある。
fileコマンド
file [オプション] [ファイル名orディレクトリ]
オプション | 説明 |
---|---|
-i | MIMEタイプで表示 |
fileコマンドはファイルタイプを判定する。
まとめ
ファイルとディレクトリの管理には確認なしで実行するものもあるため、注意深く実行する必要があります。
特に削除に関してはオプション-iを付けて実行するクセを身につけておくと不注意で削除してしまうということを避けれます。
ファイル内容の出力
ファイル内容の確認
Linuxのファイルシステムでファイルの内容を確認するためのコマンドがある。
moreコマンド
more ファイル名
moreコマンドは指定したファイルの内容を出力する。
スペースキーを押すと次のページが表示され、ファイルの最終ページまで到達すると同時に終了。
lessコマンド
less ファイル名
1画面に収まらないファイルをページ単位で表示する。
次ページを表示するにはキー操作で表示する。
キー操作はmanコマンドと同じ。
catコマンド
cat [オプション] [ファイル名]
moreコマンドやlessコマンドと同様、表示したいファイル名を引数にしたいすると、その内容を表示する。
複数のファイルを指定すると全てのファイルが連続して表示される。
catコマンドではオプションがあり、「-n」オプションを指定すると出力結果に行番号が振れたりする。
オプション | 説明 |
---|---|
-n | 全ての行に行番号を付ける |
-T | タブ文字を「^」で表示する |
nlコマンド
nl [オプション] [ファイル名]
ファイルの内容に行番号をつけて表示する。
cat -nコマンドを実行した場合も行番号を付けて表示できる。
cat -nコマンドは空行も含めて行番号を表示する。
nlコマンドでは空行を除いて行番号を付ける。
まとめ
ファイル内容を確認するためのコマンド一覧。
ファイル内容と表示させたい形式に応じて、コマンドを実行
ディレクトリ・ファイルの構造
Linuxのディレクトリ構造
Linuxのディレクトリ構造はFHS(Filesystem Hierarchy Standard)と言う標準を定めた仕様書がある。多くのLinuxディストリビューションはFHSに従ってディレクトリとファイルを配置している。
FHSはルート(/)を起点をした単一のツリー構造であり、ルート以下に目的に応じたディレクトリ階層が配置される。
FHSではディレクトリ名、各ディレクトリの役割、格納するファイルの種類、コマンドのは位置についても記載されている。
FHSでは共有可(shareable)もしくは可変(unshareable)、静的(static)もしくは動的(variable)かにより配置するディレクトリを振り分ける。
分類 | 説明 |
---|---|
共有可能 | ネットワークを介して共有できるファイル 例)ユーティリティ、ライブラリなど |
共有不可 | ネットワークを介して共有できないファイル 例)ロックファイルなど |
静的 | システム管理者の操作以外では変更されないファイル 例)バイナリコマンド、ライブラリ、ドキュメンドなど |
可変 | システム稼働中に変更されるファイル 例)ログファイル、ログインユーザ情報のファイル、ロックファイルなど |
ディレクトリ | 役割 |
---|---|
/ | システムファイルの頂点にあたるディレクトリ |
/bin | 一般ユーザ、管理者が使用するコマンドが配置 |
/dev | デバイスファイルを配置 システム起動時に接続されているデバイスがチェックされ、自動的に作成される |
/etc | システム管理用の設定ファイルや、各種ソフトウェアの設定ファイルが配置 |
/lib | /binや/sbinなどに置かれたコマンドやプログラムが利用するライブラリが配置 |
/lib/module | カーネルモジュールが配置 |
/media | CD/DVDなどのデータが配置 |
/opt | Linuxインストール後、追加でインストールしたパッケージ(ソフトウェア)が配置 |
/proc | カーネルやプロセスが保持する情報を配置 オプションによって一般ユーザも使用可能 |
/root | rootユーザのホームディレクトリ |
/sbin | 主にシステム管理者が使用するコマンドが配置 オプションによって一般ユーザも使用可能 |
/tmp | アプリケーションやユーザが利用する一時ファイルが配置 |
/var | システム運用中にサイズが変更するファイルが配置 |
/var/log | システムやアプリケーションのログファイルが配置 |
/boot | システム起動時に必要なブートローダ関連のファイルや、カーネルイメージが配置 |
/usr | ユーザが共有するデータが配置。ユーティリティ、ライブラリ、コマンドなどが配置 |
/usr/bin | 一般ユーザ、管理者が使用するコマンドが配置 |
/usr/lib | 各種コマンドが利用するライブラリが配置 |
/usr/sbin | システム管理者飲みが実行できるコマンドが配置 |
/home | ユーザのホームディレクトリが配置 |
こうしたファイルの位置を示す情報のことをパス(path)という。
コマンドプロンプト
ユーザの切り替え
Linuxで使用のコマンドは一般ユーザで実行できるものや、管理者権限がないと実行できないものがある。rootは管理者権限を持ち、一般ユーザは必要に応じて権限を追加されることで操作可能になる。
ログイン済みの状態で他のユーザや管理者へ切り替える場合、suコマンドを使用する。
ユーザ名を省略するとrootユーザになる。
su [オプション] [-] [ユーザ名]
ログイン
rootでログインした場合とuserでログインした場合では、コマンドプロンプトの表記が少し異なる。
しかし、大きくは「ログインしているユーザ名」「ホスト名」「カレントディレクトリ」が表示される。
異なるのは、rootの場合は「#」、userの場合は「$」が表示される。
rootでログインした場合
[root@host001 ~]#
user01でログインした場合
[root@host001 ~]$
ホームディレクトリは各ユーザに割り当てられた作業場所。
自分のホームディレクトリにあるファイルは読み書きの権限を持っているが、他のユーザのディレクトリにあるファイルは権限が付与されていない場合、読み書きすることができない。
ただ、root権限を持つユーザに関しては全てのホームディレクトリに対して読み書きできる権限を持つ。
まとめ
Linuxはマルチユーザーモードで同時に多くのユーザーがログインできる仕様になっています。
コマンドプロンプト見て、表示されている情報をひと目見てわかるようにしとこう。