ウェブサイト検索

LFCS #1: Linuxにおけるファイル操作のための'sed'コマンドの使い方


Linuxファウンデーションは、LFCS(Linuxファウンデーション認定システム管理者)認証を発表しました。この認証は、世界中の個人がLinuxシステムの基礎から中級のシステム管理業務で認定を取得するのを助ける新しいプログラムです。

これには、運用中のシステムやサービスのサポート、トラブルシューティングや分析の実体験、問題をエンジニアリングチームにエスカレーションするための賢い意思決定が含まれます。

2023年8月11日の最終改訂時点で、Linux Foundationによって公式に発表された有効日2023年5月11日に従い、ドメインと能力について慎重に精査しました。

このシリーズは「LFCS(Linux Foundation Certified Sysadmin)準備パート1から33」と題され、以下のトピックを扱います:

いいえタイトル
第1部Linuxでファイルを操作するための「sed」コマンドの使い方
第2部LinuxでVi/Vimをインストールして使用する方法
第3部Linuxでファイルとディレクトリを圧縮し、ファイルを見つける方法
第4部ストレージデバイスのパーティショニング、ファイルシステムのフォーマット、およびスワップパーティションの設定
第5部Linuxでのローカルおよびネットワーク(SambaおよびNFS)ファイルシステムのマウント/アンマウント
第6部RAIDデバイスとしてのパーティションの構築 - システムバックアップの作成と管理
第7部システム起動プロセスとサービスの管理(SysVinit、Systemd、およびUpstart)
第8部ユーザーとグループ、ファイル権限、およびsudoアクセスの管理方法
第9部Yum、RPM、Apt、Dpkg、Aptitude、およびZypperを使用したLinuxパッケージ管理
第10部基本的なシェルスクリプトとファイルシステムのトラブルシューティングを学ぶ
第11部vgcreate、lvcreate、およびlvextendコマンドを使用したLVMの管理と作成方法
第12部インストールされたヘルプドキュメントとツールを使用してLinuxを探求する方法
第13部GRUB(グランドユニファイドブートローダー)の構成とトラブルシューティング方法
第14部Linuxプロセスのリソース使用状況を監視し、ユーザーごとにプロセス制限を設定する
第15部Linuxシステムでカーネルランタイムパラメータを設定または変更する方法
第16部LinuxにおけるSELinuxまたはAppArmorを使用した必須アクセス制御の実装
第17部ユーザーとグループのためのアクセス制御リスト(ACL)およびディスククォータの設定方法
第18部ネットワークサービスのインストールとブート時の自動起動の設定
第19部匿名ログインを許可するFTPサーバーの設定に関する究極のガイド
第20部基本的な再帰的キャッシングDNSサーバーを設置し、ドメインのゾーンを設定する
第21部MariaDBデータベースサーバーのインストール、セキュリティ、およびパフォーマンスチューニングの方法
第22部ファイルシステム共有のためのNFSサーバーのインストールと構成方法
第23部SSL証明書を使用した名前ベースのバーチャルホスティングでApacheを設定する方法
第24部Linuxでサービスへのリモートアクセスを有効にするIptablesファイアウォールの設定方法
第25部Linuxをルーターに変えて静的および動的にトラフィックを処理する方法
第26部Cryptsetupツールを使用して暗号化されたファイルシステムとスワップを設定する方法
第27部システムの使用状況、停止、およびLinuxサーバーのトラブルシューティングをどのように監視するか
第28部パッケージをインストールまたは更新するためのネットワークリポジトリの設定方法
第29部ネットワークのパフォーマンス、セキュリティ、およびトラブルシューティングの監査方法
第30部仮想マシンとコンテナのインストールと管理方法
第31部プロジェクトを効率的に管理するためにGitの基本を学ぶ
第32部LinuxにおけるIPv4およびIPv6アドレスの設定に関する初心者向けガイド
第33部初心者のためのUbuntuにおけるネットワークボンディングとブリッジの作成ガイド

この投稿は33のチュートリアルシリーズの第1部です。このシリーズでは、LFCS認証試験に必要なドメインとスキルをカバーします。それでは、ターミナルを起動して始めましょう。

Linuxにおけるテキストストリームの処理

Linuxはプログラムへの入力とプログラムからの出力を、文字のストリーム(またはシーケンス)として扱います。リダイレクションとパイプを理解するためには、まずI/O(入力および出力)ストリームの中で最も重要な3つのタイプを理解する必要があります。これらは実際には特別なファイルです(UNIXおよびLinuxの慣例により、データストリームや周辺機器、すなわちデバイスファイルも通常のファイルとして扱われます)。

>(リダイレクションオペレータ)と|(パイプラインオペレータ)の違いは、前者がコマンドとファイルを接続するのに対し、後者はコマンドの出力を別のコマンドと接続するということです。

# command > file
command1 | command2

リダイレクション演算子はファイルを静かに作成または上書きするため、非常に注意して使用する必要があり、パイプラインと混同してはいけません。

LinuxやUNIXシステムにおけるパイプの一つの利点は、パイプに中間ファイルが関与しないことです - 最初のコマンドの標準出力はファイルに書き込まれず、次のコマンドによって読み取られることはありません。

次の練習問題では、詩「幸せな子供」(匿名著者)を使用します。

sedコマンドを使用して

sedという名前はストリームエディタの略です。この用語に馴染みのない方のために言うと、ストリームエディタは入力ストリーム(ファイルやパイプラインからの入力)に対して基本的なテキスト変換を行うために使用されます。

ファイル内の小文字を大文字に変更する

最も基本的(かつ人気のある)sedの使用法は、文字の置換です。まず、小文字のyのすべての出現を大文字のYに変更し、その出力をahappychild2.txtにリダイレクトします。

gフラグは、sedがファイルの各行で用語のすべてのインスタンスの置換を行うべきであることを示します。このフラグが省略された場合、sedは各行の用語の最初の出現のみを置換します。

sedの基本的な構文:
# sed ‘s/term/replacement/flag’ file
私たちの例:
# sed ‘s/y/Y/g’ ahappychild.txt > ahappychild2.txt

ファイル内の単語を検索して置換する

特別な文字(例えば /、\、&)を検索または置換したい場合、用語や置換文字列の中で逆スラッシュを使ってそれをエスケープする必要があります。

例えば、私たちは「and」という単語をアンパサンドで置き換えます。同時に、最初の単語が行の先頭に見つかったときに「I」という単語を「You」に置き換えます。

# sed 's/and/\&/g;s/^I/You/g' ahappychild.txt

上記のコマンドでは、^(キャレット記号)は行の始まりを表すために使用されるよく知られた正規表現です。

ご覧のように、セミコロンで区切り、セットをシングルクォートで囲むことで、2つ以上の置換コマンドを組み合わせることができます(その中で正規表現を使用することもできます)。

ファイルから選択した行を印刷する

sed のもう一つの使用法は、ファイルの選択した部分を表示したり削除したりすることです。次の例では、6月8日の/var/log/messagesの最初の5行を表示します。

# sed -n '/^Jun  8/ p' /var/log/messages | sed -n 1,5p

デフォルトでは、sedはすべての行を出力することに注意してください。この動作は -n オプションで上書きでき、その後、sedにパターンに一致するファイルの部分(最初のケースでは行の先頭にある「Jun 8」、2番目のケースでは行1から5まで)だけを出力するように指示できます。

最後に、スクリプトや設定ファイルを検査する際には、コード自体を調べてコメントを除外することが有用です。次の sed ワンライナーは、空行または # で始まる行(| キャラクターは、2つの正規表現の間の真偽値ORを示します)を削除します。

# sed '/^#\|^$/d' apache2.conf

uniqコマンド

uniq コマンドは、ファイル内の重複行を報告または削除することを可能にし、デフォルトで stdout に書き込みます。uniq は、重複した行が隣接していない限り、それを検出しないことに注意する必要があります。

したがって、uniqは、通常、前にあるsortとともに使用されます(これはテキストファイルの行をソートするために使用されます)。デフォルトでは、sortは最初のフィールド(スペースで区切られた)をキーフィールドとして使用します。異なるキーフィールドを指定するには、-kオプションを使用する必要があります。

ユニークコマンドの例

du -sch /path/to/directory/* コマンドは、指定されたディレクトリ内のサブディレクトリおよびファイルごとのディスク使用量を人間が読みやすい形式で返します(ディレクトリごとの合計も表示されます)。出力はサイズによってではなく、サブディレクトリおよびファイル名によって順序付けされます。

サイズでソートするには、以下のコマンドを使用できます。

# du -sch /var/* | sort –h

ログの中のイベント数を日付別にカウントするには、uniqに各行の最初の6文字(-w 6)を使用して比較を行うように指示し、次のコマンドで各出力行の前に出現回数-cを付加します。

# cat /var/log/mail.log | uniq -c -w 6

最後に、sortとuniqを組み合わせることができます(通常はそうします)。寄付者、寄付日、寄付額の一覧が含まれる以下のファイルを考えてみてください。ユニークな寄付者が何人いるのかを知りたいとしましょう。

次のcatコマンドを使って、最初のフィールドを切り取り(フィールドはコロンで区切られています)、名前でソートし、重複行を削除します。

# cat sortuniq.txt | cut -d: -f1 | sort | uniq

grepコマンド

grep コマンドは、指定された正規表現の出現をテキストファイルまたは(コマンド出力)で検索し、一致する行を標準出力に出力します。

grepコマンドの例

/etc/passwdからユーザーgacanepaの情報を表示し、大文字と小文字を区別しない。

# grep -i gacanepa /etc/passwd

/etcの名前がrcで始まり、その後に任意の単一の数字が続くすべての内容を表示します。

# ls -l /etc | grep rc[0-9]

trコマンドの使用法

trコマンドは、stdinから文字を翻訳(変更)または削除し、その結果をstdoutに書き込むために使用できます。

sortuniq.txtファイル内のすべての小文字を大文字に変更してください。

# cat sortuniq.txt | tr [:lower:] [:upper:]

ls -l の出力で区切り文字を1つのスペースに圧縮してください。

# ls -l | tr -s ' '

カットコマンドの使用

cutコマンドは、入力行の部分を抽出し(標準入力またはファイルから)、バイト数(-bオプション)、文字数(-cオプション)、またはフィールド(-fオプション)に基づいて結果を標準出力に表示します。

この最終的な場合(フィールドに基づく)、デフォルトのフィールドセパレーターはタブですが、-dオプションを使用することで異なる区切り文字を指定できます。

カットコマンドの例

/etc/passwd からユーザーアカウントとそれらに割り当てられたデフォルトシェルを抽出します(–d オプションはフィールド区切り文字を指定することを可能にし、–f スイッチは抽出するフィールドを示します)。

# cat /etc/passwd | cut -d: -f1,7

要するに、最後のコマンドの出力の最初と3番目の非空白ファイルからなるテキストストリームを作成します。ユーザーgacanepaのセッションを確認するための最初のフィルターとしてgrepを使用し、区切りを1つのスペースに圧縮します(tr -s ' ')。

次に、cutを使って最初と三番目のフィールドを抽出し、最後に二番目のフィールド(この場合はIPアドレス)でユニークとしてソートします。

# last | grep gacanepa | tr -s ' ' | cut -d' ' -f1,3 | sort -k2 | uniq

上記のコマンドは、複数のコマンドやパイプを組み合わせて、私たちの望み通りのフィルタリングされたデータを得る方法を示しています。また、部分ごとに実行して、あるコマンドから次のコマンドへのアウトプットがどのようにパイプライン化されるかを見るのも良いでしょう(ちなみに、これは素晴らしい学習体験になります!)。

要約

この例(現在のチュートリアルの他の例とともに)一見あまり役に立たないように見えるかもしれませんが、Linuxコマンドラインからファイルを作成、編集、操作するために使用されるコマンドを実験するための良い出発点です。

質問やコメントがあれば、下に自由に書き込んでください。大変感謝いたします!

LFCS eBookは現在購入可能です。今すぐコピーを注文して、認定Linuxシステム管理者になるための旅を始めましょう!

商品名価格買う
Linux財団のLFCS認定試験準備ガイド19.99ドル[今すぐ購入]

最後になりますが、以下のリンクを使用して試験バウチャーを購入していただけると、小さな手数料を得ることができ、この本を最新の状態に保つ助けになりますので、ご検討ください。

関連記事: