gabuLog

趣味と考え事をつらつらと

文字列の変換や削除など

標準入力の操作について、文字列などを変換や削除を行う。

sedコマンド

sed [オプション] {編集コマンド} [ファイル名]

sedコマンドのオプション
オプション 説明
-e スクリプトを実行する
-n 行番号 指定した行だけを表示

文字列の置換、削除、表示。

sedコマンドの編集コマンド
編集コマンド 説明
s/パターン/置換文字/ 各行を対象に、最初にパターンに合致する文字列を置換文字列に変換
s/パターン/置換文字/g ファイル内全体を対象に、パターンに合致する文字列を置換文字に変換
d パターンに合致する行を削除
p

パターンに合致する行を表示

オプションnと組み合わせて使う。

単語単位の変換や削除を行う。入力ストリーム(ファイルまたはパイプからの入力)に対してテキスト変換を行うために用いる。

sedコマンドの実行例①

sedコマンドの実行例①

sedコマンドの実行例②

sedコマンドの実行例②

cutコマンド

cut [オプション] [ファイル名]

cutコマンドのオプション
オプション 説明
-c 位置 指定された位置の各文字だけを表示
-b 位置 指定された位置の各バイトだけを表示
-f フィールド番号 指定された各フォールドだけを表示
-d 区切り文字

オプションfと一緒に使い、フィールドの区切り文字を指定

デフォルトはタブ

-s オプションfと一緒に使い、フィールドの区切り文字を含まない行を表示しない

ファイル内の各行で特定の部分のみを取り出す。

cutコマンドの実行例①

cutコマンドの実行例①

cutコマンドの実行例②

cutコマンドの実行例②

cutコマンドの実行例③

cutコマンドの実行例③

cutコマンドの実行例④

cutコマンドの実行例④

expandコマンド

expand [オプション] [ファイル名]

expandコマンドのオプション
オプション 説明
-i 行頭のタブのみスペースへ変換する
-t 揃える桁数を指定する

指定したファイル内にあるタブをスペースに変換。

デフォルト実行の場合は、8桁おきに設定される。

expandコマンドの実行例

expandコマンドの実行例

unexpandコマンド

unexpand [オプション] [ファイル名]

unexpandコマンドのオプション
オプション 説明
-a 全ての空白を変換
-t 置換えるタブ幅を指定

空白をタブに変換。

unexpandコマンドの実行例

unexpandコマンドの実行例

grepコマンド

grep [オプション] [検索する文字列パターン] [ファイル名...]

grepコマンドのオプション
オプション 説明
-v パターンに一致しない行を表示
-n 行番号を表示
-l パターンと一致するファイル名を表示
-i 大文字と小文字を区別しないで検索

テキストデータの文字列を検索する。

指定されたパターンに一致する行を表示する。

grepコマンドの実行例

grepコマンドの実行例

文字パターンには正規表現と言われる記号が用いられることが多い。

 

gabu-00.hatenablog.com

 

 

正規表現

概要

記号や文字列を組み合わせて、目的のキーワードを見つけるためのパターンを作り、検出する手段・方法のこと。

記号はメタキャラクタと呼ばれるもので、それぞれの記号にちゃんと意味がある。

この方法を用いることで、多くの文章の中から簡単に見つけいた文字列を検索することが可能。

メタキャラク

検索用メタキャラクタの一覧
メタキャラク 説明 正規表現の例 マッチする例
.

任意の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

https://hatenablog.com/

\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 [オプション] [ファイル名...]

headコマンドのオプション
オプション 説明
-n 行数 指定された行数分だけ表示する
-c バイト数 出力するバイト数を指定する

テキストファイルの先頭部分を表示する。

オプションnで行数を指定しない場合、デフォルトで10行まで表示する。

headコマンドの実行例

headコマンドの実行例

tailコマンド

tail [オプション] [ファイル名...]

tailコマンドのオプション
オプション 説明
-n 行数 指定された行数分だけ表示する
-f

ファイルの末尾が常に追記されているものと仮定して、

最終部分を読み続ける。

テキストファイルの末尾部分を表示する。

headコマンド同様、オプションnなしで実行するとデフォルトで10行まで表示する。

tailコマンドの実行例

tailコマンドの実行例

trコマンド

tr [オプション] [文字郡1] [文字郡2]

 

trコマンドのオプション
オプション 説明
-d 文字郡1 文字郡1で一致した文字を削除する
-s 文字郡1 文字郡2

文字郡1で一致した文字を文字郡2に置換する

標準入力の文字を指定のフォーマットに変換して、標準出力する。

trコマンドの実行例

trコマンドの実行例

sortコマンド

sort [オプション] [ファイル名...]

sortコマンドのオプション
オプション 説明
-b 先頭の空白を無視する
-f

大文字・小文字を区別しない

-r

降順にソートする

ファイル内容をソートして標準出力する。

デフォルトでは昇順、オプションrを指定すると降順。

ファイルが複数ある場合は、各ファイルの内容を並び替えた後に連結して出力。

sortコマンドの実行例

sortコマンドの実行例

joinコマンド

join [オプション] [ファイル名(番号1)] [ファイル名(番号2)]

joinコマンドのオプション
オプション 説明
-a ファイル番号 指定したファイルの番号の内容を全て表示する。空白の場合も行を表示する
-j フィールド 連結するフィールドを指定する

引数で指定された2つのファイルを読み込んで、共通のフィールドを持つ行を連結する。通常、フィールドは空白、タブ、改行文字で区切られる。

joinコマンドの実行例①

joinコマンドの実行例①

joinコマンドの実行例②

joinコマンドの実行例②

uniqコマンド

uniq [オプション] [入力ファイル[出力ファイル]]

uniqコマンドのオプション
オプション 説明
-c 行の前に出現回数を出力する
-d 重複した行のみ出力する
-u 重複していない行のみ出力する

標準入力から行を読み取り、重複する行を取り除いて標準出力する。

標準入力は予めソートしておかなければ、思いもしない結果になってしまう。

uniqコマンドの実行例

uniqコマンドの実行例

標準入出力の制御

標準入出力とは

入力をどこから受け入れるか、出力をどこに送るかを制御すること。

入出力制御には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 [オプション] [ファイル名]

teeコマンドのオプション
オプション 説明
-a ファイルに追記

teeコマンドは標準入力から読み込んだデータを標準出力とファイルの両方に出力する。

なので、画面にも表示されるし、ファイルにも格納される。

teeコマンドの実行例

teeコマンドの実行例

まとめ

標準入出力、リダイレクト、パイプはエラーの管理やプロセス間でのやり取りでよく使う項目なので、必ず覚えておきましょう。

コマンドを繋げて使いたい場合はパイプ、標準入力はキーボード入力したものををまとめて使いたい場合に使用ぐらいの理解をしました。

ディレクトリとファイルの管理

ディレクトリとファイルの作成

ディレクトリとファイルの作成方法にはいくつか存在する。

mkdirコマンド

mkdir [オプション] [ディレクトリ名...]

mkdirコマンドのオプション

オプション

説明

-m[アクセス権] 明示的にアクセス権を指定してディレクトリを作成する
-p 中間ディレクトリを同時に作成する

mkdirコマンドはディレクトリの作成を行う。

引数に複数のディレクトリ名を指定することで、一度に複数のディレクトリを作成することも可能。

mkdirコマンドの実行例

mkdirコマンドの実行例

touchコマンド

touch [オプション] [ファイル名...]

touchコマンドのオプション

オプション

説明

-t [タイムスタンプ] [[CC]YY]MMDDhhmm[.ss]形式のタイムスタンプ似変更する。

CC:西暦の上2桁、YY:西暦の下2桁、MM:月、DD:日、hh:時、mm:分、ss:秒

-a アクセス日時のみ変更する
-m 更新日時のみ変更する

touchコマンドの引数に既存のファイル名を指定すると、そのファイルのアクセス時刻と修正時刻をtouchコマンドの実行時刻に変更。

touchコマンドの実行例

touchコマンドの実行例

ファイルやディレクトリの移動

ディレクトリとファイルを移動させるためのコマンドがある。

mvコマンド

mv [オプション] [移動元ディレクトリ...] [移動先ディレクトリ]

mv [オプション] [移動元ファイル名...] [移動先ディレクトリ]

mvコマンドの最後に引数に指定されたディレクトリに移動元のファイルもしくはディレクトリが同じ名前で移動する。

mvコマンドの実行例

mvコマンドによるファイル移動の実行例

mvコマンドによるディレクトリ移動の実行例

mvコマンドによるディレクトリ移動の実行例

cpコマンド

cp [オプション] [元ファイル名] [先ファイル名]

cp [オプション] [元ファイル名] [先ディレクトリ]

cpコマンドのオプション
オプション 説明
-i コピー先に同じファイル名が存在する場合は上書きするか確認する
-f コピー先に同じファイル名が存在しても、強制的に上書きする
-p コピー元の所有者、タイムスタンプ、アクセス権などの情報を保持したままコピーする
-R, -r コピー元にディレクトリを指定した場合、再帰的にディレクトリをコピーする

ファイルやディレクトリをコピーする時に使用する。

また、複数のファイルを同時にコピーすることも可能。

cpコマンドの実行例

cpコマンドの実行例

ディレクトリやファイルの削除

ディレクトリやファイルの削除を実行するコマンドがある。

GUIと異なりオプションなしで実行すると削除確認なしで削除されてしまうため、実行には十分注意が必要になる。

rmコマンド

rm [オプション] [ファイル名...]

rm [オプション] [ディレクトリ...]

rmコマンドのオプション
オプション 説明
-i ファイル削除する前に確認する
-f ユーザへの確認なしに削除する
-R, -r 指定されたディレクトリ内にファイル、ディレクトリが存在していても全て削除する

rmコマンドの実行例

rmコマンドの実行例

ファイルタイプの判定

表示されている物が何者なのか判定するためのコマンド。

ファイルやディレクトリ、写真など色々なものがある。

fileコマンド

file [オプション] [ファイル名orディレクトリ]

fileコマンドのオプション
オプション 説明
-i MIMEタイプで表示

fileコマンドはファイルタイプを判定する。

fileコマンドの実行例

fileコマンドの実行例

まとめ

ファイルとディレクトリの管理には確認なしで実行するものもあるため、注意深く実行する必要があります。

特に削除に関してはオプション-iを付けて実行するクセを身につけておくと不注意で削除してしまうということを避けれます。

 

ファイル内容の出力

ファイル内容の確認

Linuxファイルシステムでファイルの内容を確認するためのコマンドがある。

moreコマンド

more ファイル名

moreコマンドは指定したファイルの内容を出力する。

スペースキーを押すと次のページが表示され、ファイルの最終ページまで到達すると同時に終了。

moreコマンドの例

moreコマンドの表示例

lessコマンド

less ファイル名

1画面に収まらないファイルをページ単位で表示する。

lessコマンドの例

lessコマンドの表示例

 

次ページを表示するにはキー操作で表示する。

キー操作はmanコマンドと同じ。

 

gabu-00.hatenablog.com

 

catコマンド

cat [オプション] [ファイル名]

moreコマンドやlessコマンドと同様、表示したいファイル名を引数にしたいすると、その内容を表示する。

複数のファイルを指定すると全てのファイルが連続して表示される。

catコマンドではオプションがあり、「-n」オプションを指定すると出力結果に行番号が振れたりする。

catコマンドオプションnの実行例

catコマンドオプションの実行例
catコマンドのオプション
オプション 説明
-n 全ての行に行番号を付ける
-T タブ文字を「^」で表示する

nlコマンド

nl [オプション] [ファイル名]

ファイルの内容に行番号をつけて表示する。

cat -nコマンドを実行した場合も行番号を付けて表示できる。

cat -nコマンドは空行も含めて行番号を表示する。

nlコマンドでは空行を除いて行番号を付ける。

nlコマンドの表示例

nlコマンドの実行例

cat -n コマンドの実行表示例

cat -n コマンドの実行例

 

まとめ

ファイル内容を確認するためのコマンド一覧。

ファイル内容表示させたい形式に応じて、コマンドを実行

 

ディレクトリ・ファイルの構造

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はマルチユーザーモードで同時に多くのユーザーがログインできる仕様になっています。

コマンドプロンプト見て、表示されている情報をひと目見てわかるようにしとこう。