メインコンテンツへスキップ
見出し画像

【基礎から学び直すITインフラ入門】#9 Linux基礎② - 基本コマンドとファイル権限

    この記事では、Linuxの基本的なコマンドと、権限について解説します。
    実務でちょっとLinux触っていてこんなんわかるで~って人は飛ばしてもいいかもです。前回記事は ↓ から。

    はじめに

    前回は、Linuxのディレクトリ構造とパスの概念を学びました。Linuxの基本的な階層構造や、絶対パスと相対パスの違いを理解できたと思います。
    今回は、Linuxを実際に操作するための基本コマンドと、ファイル権限について学んで、最低限、Linuxを触れるようになりましょう。

    基本コマンド

    Linuxでは、GUIもありますが、コマンドライン(CLI) での操作が基本です。特にサーバー管理では、コマンドラインが必須となります。ここでは、最も基本的で頻繁に使うコマンドを学びます。

    ls - ファイルとディレクトリの一覧表示

    # 現在のディレクトリの内容を表示
    ls
    
    # 詳細情報も表示
    ls -l
    
    # 隠しファイルも表示(ドットで始まるファイル)
    ls -a
    
    # 組み合わせて使用
    ls -la

    最初の文字が d ならディレクトリ、- なら通常のファイルです。この表記については、後ほど「ファイル権限」のセクションで詳しく説明します。

    cd - ディレクトリの移動

    # documentsディレクトリに移動
    cd documents
    
    # 絶対パスで移動
    cd /var/log
    
    # ホームディレクトリに移動
    cd ~
    # または単に
    cd
    
    # 1つ上のディレクトリに移動
    cd ..
    
    # 直前にいたディレクトリに戻る
    cd -

     cd は「Change Directory」の略で、ディレクトリ間を移動するための基本的なコマンドです。

    pwd - 現在地の確認

    # 現在いるディレクトリの絶対パスを表示
    pwd
    
    # 出力例:
    /home/hiro/documents

    pwd は「Print Working Directory」の略で、現在のディレクトリを出力します。今どこにいるか分からなくなったら、まず pwd で確認しましょう。

    cat, less, head, tail - ファイル内容の表示

    ファイルの中身を見るコマンドはいくつかあります。ファイルのサイズや用途に応じて使い分けるといいでしょう。

    cat - ファイル全体を一気に表示

    # ファイル全体を表示
    cat memo.txt
    
    # 複数ファイルを連結して表示
    cat file1.txt file2.txt

    cat は「concatenate(連結)」の略です。短いファイルを確認するときに便利ですが、長いファイルだと画面がスクロールしてしまいます。

    less - ページ単位で表示

    # ページ単位で表示(長いファイル向け)
    less /var/log/syslog
    
    # 操作方法:
    # スペースキー: 次のページ
    # b: 前のページ
    # /: 検索
    # q: 終了

    less は長いファイルを読むときに最適です。ログファイルの確認などでよく使います。

    head - ファイルの先頭を表示

    # 最初の10行だけ表示
    head memo.txt
    
    # 最初の5行だけ表示
    head -n 5 memo.txt
    
    # 複数ファイルの先頭を表示
    head file1.txt file2.txt

    「ファイルの最初だけ見たい」というときに便利です。

    tail - ファイルの末尾を表示

    # 最後の10行だけ表示
    tail memo.txt
    
    # 最後の20行だけ表示
    tail -n 20 memo.txt
    
    # リアルタイムで追記を監視(ログ確認に便利)
    tail -f /var/log/syslog

    tail -f は、ログファイルをリアルタイムで監視する際に非常に便利です。新しい行が追加されると、自動的に表示されます。Webサーバーのアクセスログやエラーログを監視するときによく使います。

    個人的には、この中だとlessコマンドをよく使いますね。
    ファイル監視も `less -RN +F file.log` とかで、いい感じにやってくれるのでおススメです。

    cp - ファイルやディレクトリのコピー

    # ファイルをコピー
    cp memo.txt memo_backup.txt
    
    # ディレクトリごとコピー(-r はrecursiveの意味)
    cp -r documents documents_backup
    
    # 複数ファイルを一度にコピー
    cp file1.txt file2.txt file3.txt /home/hiro/backup/

    -r オプションは「recursive(再帰的)」の意味で、ディレクトリとその中身を全てコピーします。

    mv - ファイルやディレクトリの移動・名前変更

    # ファイル名を変更
    mv old_name.txt new_name.txt
    
    # ファイルを別の場所に移動
    mv memo.txt /home/hiro/documents/
    
    # ディレクトリの名前を変更
    mv old_dir new_dir
    
    # 複数ファイルを移動
    mv file1.txt file2.txt /home/hiro/documents/

    mv は移動とリネームの両方に使えます。実は、Linuxにとってリネームも移動することと同じ操作です。

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

    # ファイルを削除
    rm memo.txt
    
    # 複数のファイルを削除
    rm file1.txt file2.txt file3.txt
    
    # ディレクトリごと削除
    rm -r old_directory
    
    # 確認なしで削除(危険!)
    rm -f memo.txt
    
    # ディレクトリを強制的に削除(非常に危険!)
    rm -rf old_directory

    rm で削除したファイルは復元できません。間違えて重要なディレクトリを削除してしまわないように気をつけましょう。

    mkdir - ディレクトリの作成

    # ディレクトリを作成
    mkdir new_directory
    
    # 親ディレクトリも含めて作成
    mkdir -p project/src/main
    
    # 複数のディレクトリを一度に作成
    mkdir dir1 dir2 dir3

    mkdir -p は、途中のディレクトリが存在しなくても自動的に作成してくれるので便利です。例えば、project も src も存在しない状態で mkdir -p project/src/main を実行すると、全て作成されます。

    find - ファイルの検索

    # 現在のディレクトリ以下で memo.txt を探す
    find . -name memo.txt
    
    # /home以下で .txt ファイルを全て探す
    find /home -name "*.txt"
    
    # 7日以上前に変更されたファイルを探す
    find /var/log -mtime +7
    
    # 特定のサイズ以上のファイルを探す
    find /home -size +100M

    ファイル名だけでなく、更新日時、サイズ、権限など、様々な条件で検索できます。

    grep - ファイル内の文字列検索

    # ファイル内で "error" という文字列を検索
    grep "error" /var/log/syslog
    
    # 大文字小文字を区別しない(-i)
    grep -i "error" /var/log/syslog
    
    # 複数ファイルから検索
    grep "error" /var/log/*.log
    
    # 行番号も表示(-n)
    grep -n "error" /var/log/syslog
    
    # 再帰的にディレクトリ内を検索(-r)
    grep -r "error" /var/log/

    grep は、ログ解析で、エラーメッセージを探したり、特定のIPアドレスのアクセス履歴を探したりする際によく使います。

    ファイル権限の基礎

    Linuxでは、各ファイルやディレクトリに権限(パーミッション) が設定されています。これにより、誰がそのファイルを読んだり、書いたり、実行したりできるかが制御されます。

    権限のグループ

    権限は以下のグループに分けて設定されます:

    所有者(Owner): ファイルを作成したユーザー
    グループ(Group): ファイルが属するグループ
    その他(Others): それ以外の全てのユーザー

    権限の種類

    各グループに対して、3種類の権限を設定できます
    r (read): 読み取り権限
    w (write): 書き込み権限
    x (execute): 実行権限

    権限の表示方法

    先ほど学んだ、ls -l コマンドで権限を確認できます

    $ ls -l
    -rw-r--r--  1 hiro staff 123 Mar 15 09:30 memo.txt
    drwxr-xr-x  2 hiro staff  64 Mar 15 10:00 documents

    権限の見方

    -  rw-  r--  r-- 1 hiro staff 123 Mar 15 09:30 memo.txt
    │  │    │    │
    │  │    │    └─ その他(Others): r--(読み取りのみ)
    │  │    └────── グループ(Group): r--(読み取りのみ)
    │  └─────────── 所有者(Owner): rw-(読み書き可能)
    └────────────── ファイル種別(- は通常ファイル、d はディレクトリ)

    権限の意味

    最初の1文字である、ファイル種別は以下があります。
    -: 通常のファイル
    d: ディレクトリ
    l: シンボリックリンク(ショートカット)
    b: ブロックデバイス
    c: キャラクタデバイス
    最初は、通常ファイルと、ディレクトリさえわかっていればどうにかなるかと思います(たまにシンボリックリンクも。)

    また、権限が意味する内容は、ファイルに対する権限か、ディレクトリに対する権限かで変わります。

    ファイルに対する権限
    r (read):
    ファイルの内容を読める
    w (write): ファイルの内容を変更できる
    x (execute): ファイルをプログラムとして実行できる

    ディレクトリに対する権限
    r (read):
    ディレクトリ内のファイル一覧を見られる
    w (write): ディレクトリ内にファイルを作成・削除できる
    x (execute): ディレクトリに入れる(cd できる)
    ディレクトリの場合、`x` 権限がないと、中に入ることすらできません。

    権限の変更

    権限を変更するには chmod コマンドを使います。

    数値表記

    権限は数字で表すこともでき、権限変更時にも利用されます。
    権限それぞれの種類に対応する数値は覚えておき、組み合わせで権限を表します。

    数値での表し方:
    r = 4
    w = 2
    x = 1

    組み合わせると、 7 = 4+2+1 = rwx (読み書き実行 全て可) 、6 = 4+2 = rw- (読み書き可、実行不可) 5 = 4+1 = r-x (読み実行可、書き込み不可)、 4 = 4 = r-- (読み取りのみ) 0 = 0 = --- (全て不可)といったように見ることができます。

    実行例

    # 所有者:rwx, グループ:r-x, その他:r-x
    chmod 755 script.sh
    
    # 意味のおさらい
    7     5     5
    │     │     │
    │     │     └─ その他: r-x (4+1=5)...読み取り、実行権限
    │     └─────── グループ: r-x (4+1=5)...読み取り、実行権限
    └───────────── 所有者: rwx (4+2+1=7)...フルアクセス権限

    記号表記

    記号を使って権限を変更する方法も紹介します。
    それぞれ記号の意味は下記です。

    記号の意味:
    u:
    所有者(user)
    g: グループ(group)
    o: その他(others)
    a: 全員(all)
    +: 権限を追加
    -: 権限を削除
    =: 権限を指定した内容に設定

    実行例:

    # 所有者に実行権限を追加
    chmod u+x script.sh
    
    # グループから書き込み権限を削除
    chmod g-w memo.txt
    
    # 全員に読み取り権限を追加
    chmod a+r public.txt
    
    # 所有者の権限をrwxに設定
    chmod u=rwx script.sh
    
    # 複数の変更を同時に実行
    chmod u+x,g-w,o-r file.txt

    数値での変更の場合は、権限を上書きしてしまうような動きになるので、注意する必要があります。ですが、再現性のある動きを担保できるため、状況に応じて使い分けることが大切です。

    所有者の変更

    ファイルの所有者やグループを変更するには chown コマンドを使います。

    # 所有者を alice に変更
    chown alice memo.txt
    
    # 所有者とグループを変更
    chown alice:staff memo.txt
    
    # グループだけ変更
    chown :developers memo.txt
    
    # ディレクトリとその中身全てを変更(-r)
    chown -R alice:staff documents/

    通常、chown はroot権限(管理者権限)が必要です。一般ユーザーは自分が所有していないファイルの所有者を変更できません。

    まとめ

    今回は、Linuxの基本コマンドとファイル権限について学びました。

    基本コマンドとして学んだ内容は、日常的に使うコマンドです。(ここらへんは、実務を通じて嫌でもできるようになるかと思いますが、基礎編ということで紹介しました。)

    次回は、プロセスとシグナルについて学びます。Linuxでプログラムがどのように動いているのか、どうやって制御するのかを見ていきます。ここのあたりも、実務でよく使う機会はあると思うので必見です。


    あなたへのおすすめ