LoginSignup
1
0

Linuxの基礎 6日目

Posted at

6日目

1 ファイルの操作

1-1 ファイルの検索

  • locateコマンドでファイルを検索できる
    • どこで保存したのか忘れてしまったファイルなどを名前で検索したいときは、locateコマンドを利用する
      # ファイルを名前で検索する際のコマンド書式
      locate ファイル名パターン
      
      # hostsを含むファイルもしくはディレクトリを検索
      $ locate hosts
      /etc/hosts
      /etc/cloud/templates/hosts.alpine.tmpl
      /etc/cloud/templates/hosts.arch.tmpl
      /etc/cloud/templates/hosts.debian.tmpl
      /etc/cloud/templates/hosts.freebsd.tmpl
      /etc/cloud/templates/hosts.gentoo.tmpl
      /etc/cloud/templates/hosts.photon.tmpl
      /etc/cloud/templates/hosts.redhat.tmpl
      /etc/cloud/templates/hosts.suse.tmpl
      (以下省略)
      
    • 「*」や「?」などのメタキャラクタを使うこともできる。その場合はファイル名パターンを引用符で囲む必要がある
      # メタキャラクタを使った検索例
      $ locate '*sh*locate'
      /usr/share/bash-completion/completions/fallocate
      /usr/share/doc/mlocate
      
    • 検索結果を絞り込むにはgrepコマンドを使用して絞り込むのが可能
      # grepを使った絞り込みの例
      # 以下の例はhostsと含まれているファイルとディレクトリを検索し、その検索結果をパイプ「|」で受け渡して、grepコマンドをかけて、「/etc」ディレクトリの配下にあるか検索している
      $ locate hosts | grep '^/etc'
      /etc/hosts
      /etc/cloud/templates/hosts.alpine.tmpl
      /etc/cloud/templates/hosts.arch.tmpl
      /etc/cloud/templates/hosts.debian.tmpl
      /etc/cloud/templates/hosts.freebsd.tmpl
      /etc/cloud/templates/hosts.gentoo.tmpl
      /etc/cloud/templates/hosts.photon.tmpl
      /etc/cloud/templates/hosts.redhat.tmpl
      /etc/cloud/templates/hosts.suse.tmpl
      
    • locateコマンドは、リアルタイムでファイルを検索しているのではなく、あらかじめ作成済みのファイル名データベースを使って検索している
      • したがって、ファイル名データベース更新後に作成されたファイルは検索することができない
      • ファイル名データベースを更新するには、updatedbコマンドを実行する
      • updatedbコマンドはroot(管理者)ユーザーのみが実行可能
        # ファイル名データベースの更新
        $ su -
        Password:
        
        $ updatedb
        
  • findコマンドで多様な条件によるファイル検索ができる
    • ファイル名だけでなく、様々な条件を指定して、リアルタイムでファイル名を検索できるのがfindコマンドである。1
      • 主な検索式
        検索式 説明
        -name ファイル名を指定する
        -size ファイルサイズを指定する(例:10c(10バイト), 10k(10KB), +10K(10KB以上))
        -atime ファイルの最終アクセス日を指定する(例:3(3日前), +3(3日よりも前), -3(3日以内))
        -amin ファイルの最終アクセス時刻を〇分前で指定する
        -mtime ファイルの最終修正日を指定する
        -mmin ファイルの最終更新時刻を〇分前で指定する
        -perm ファイルのアクセス権を指定する(例:664(rw-rw-r--), +444(少なくとも全ユーザーが読み取りできる))
        -type ファイルタイプを指定する(例:f(ファイル), d(ディレクトリ), l(シンボリックリング))
      • findコマンドの基本的な使い方
        # リアルタイムでのファイル検索コマンド書式
        find [検索対象パス] [検索式]
        
        # findコマンドの基本的な使い方
        # 以下の例では、「/usr/bin」ディレクトリの中にある、ファイル名が「c」から始まる(バイナリー)ファイルを検索している
        # 検索対象パスが「/usr/bin」であり、検索条件式を「-name "c*"」としているので
        $ find /usr/bin -name "c*"
        /usr/bin/chvt
        /usr/bin/crontab
        /usr/bin/chgrp
        /usr/bin/cpupower
        /usr/bin/chmem
        /usr/bin/captoinfo
        /usr/bin/cpio
        /usr/bin/clear
        /usr/bin/curl
        /usr/bin/choom
        /usr/bin/cvtsudoers
        /usr/bin/cat
        
        # 複数の検索条件を指定
        # 以下の例ではファイルサイズが、10KBいない且つ、ファイルのアクセス日が1日以内であること
        $ find -size -10k -atime -1
        ./.bash_profile
        ./.bash_history
        ./.bashrc
        
      • findコマンドはただ単にファイルを検索するだけではなく、-execを付けることで、検索して見つかったファイルに対して、何らかの操作を加えることも可能
        # 検索したファイルに対してコマンド実行する書式
        find [検索対象パス] [検索式] -exec 実行コマンド {} \;
        
        # 1年以上アクセスされていないファイルを削除
        $ find -atime +366 -exec rm {} \;
        
        # 1年未満アクセスされていないファイルとディレクトリの名前を確認
        $ find -atime -366 -exec ls {} \;
        ./.bash_profile
        ./.bash_logout
        procps
        ./.lesshst
        ./.bash_history
        ./.viminfo
        ./.bashrc
        

1-2 テキストファイルの内容検索

  • 文字列のパワーんを表記する代表的な表現方法に正規表現がある
    • 正規表現
      • コンピュータの世界で文字列を処理するときに避けて通ることができないのは正規表現(Regular Expression)である
      • 正規表現とは、文字列のパターンを表記するための手法で、様々なメタキャラクタを利用できる
      • 以下に代表的なメタキャラクタと正規表現を次の表にまとめる
        • メタキャラクタ
          メタキャラクタ 説明
          . 任意の1文字にマッチする
          * 直前にある文字の0回以上の繰り返しにマッチする
          ? 直前にある文字の0回または1回の繰り返しにマッチする
          + 直前にある文字の1回以上の繰り返しにマッチする
          [] []内の任意の1文字にマッチする
          ^ 行頭にマッチする(最初にあるときのみ有効)
          $ 行末にマッチする(最後にあるときのみ有効)
          \ 直後に続くメタキャラクタの意味を解除する
        • 正規表現
          正規表現 説明
          a.c 「abc」,「a1c」などにマッチし、「Abc」,「ac」などにマッチしない
          .* 0文字以上の文字列にマッチする
          [A-Z] 大文字アルファベット1文字にマッチする
          [0-9][0-9] 2桁の数字にマッチする
          ^$ 空行(改行のみの行)にマッチする
          ^# 行の中ではなく行頭に「#」という文字にマッチする
          .txt 「.txt」という文字列にマッチする
          friends? 「friends」または「friend」にマッチする
          123+ 「123」,「1233」にマッチし、「12」などにマッチしない
  • grepコマンドでテキストファイルの内容を検索できる
    • grepコマンドは、テキストファイルの内容を検索し、指定した正規表現にマッチする行があれば表示するコマンド
      # テキストファイルの内容を検索するコマンド書式
      grep [オプション] [文字列パターン] [検索対象ファイル]
      
      • grepコマンドの主なオプション
        オプション 説明
        -F 文字列パターンを正規表現ではなく単なる文字列として扱う
        -c マッチした行数だけを表示する
        -i 大文字と小文字を区別しない
        -l マッチした行のあるファイルのみを表示する
        -n 行番号をあわせて表示する
        -v マッチした行ではなくマッチしなかった行を表示する
        -E 拡張正規表現で検索を行う
        -e 一致処理に指定した正規表現を使う
        # 文字列「www」を検索
        $ grep www /etc/services
        #       http://www.iana.org/assignments/port-numbers
        http            80/tcp          www www-http    # WorldWideWeb HTTP
        http            80/udp          www www-http    # HyperText Transfer Protocol
        www-ldap-gw     1760/tcp                # www-ldap-gw
        www-ldap-gw     1760/udp                # www-ldap-gw
        www-dev         2784/tcp                # world wide web - development
        www-dev         2784/udp                # world wide web - development
        flirtmitmir     3840/tcp                # www.FlirtMitMir.de
        flirtmitmir     3840/udp                # www.FlirtMitMir.de
        
        # 文字列「www」を-iオプション付きで検索
        $ grep -i www /etc/services
        #       http://www.iana.org/assignments/port-numbers
        http            80/tcp          www www-http    # WorldWideWeb HTTP
        http            80/udp          www www-http    # HyperText Transfer Protocol
        webcache        8080/tcp        http-alt        # WWW caching service
        webcache        8080/udp        http-alt        # WWW caching service
        www-ldap-gw     1760/tcp                # www-ldap-gw
        www-ldap-gw     1760/udp                # www-ldap-gw
        www-dev         2784/tcp                # world wide web - development
        www-dev         2784/udp                # world wide web - development
        flirtmitmir     3840/tcp                # www.FlirtMitMir.de
        flirtmitmir     3840/udp                # www.FlirtMitMir.de
        
        # 文字列に「bash」が含まれる行を表示
        $ grep bash 
        /etc/default/useradd:SHELL=/bin/bash
        
        # grepコマンドによる絞り込み例
        $ ps ax | grep bash
        9 pts/0    Ss+    0:00 -bash
        34 pts/1    Ss     0:00 -bash
        80 pts/1    S+     0:00 grep --color=auto bash
        
  • grepコマンドは正規表現が利用できる
    # bashrcファイル内にa-zまたは、A-Zで始まる行頭を表示する
    $ grep "^[a-zA-Z]" /etc/bashrc
    if [ -z "$BASHRCSOURCED" ]; then
    fi
    

1-3 テキストファイルを扱う便利なコマンド

  • headコマンドやtailコマンドを使ってファイルの先頭や末尾だけを表示できる

    • headコマンド
      • ファイルの先頭部分だけを表示するコマンドである
      • デフォルトでは先頭10行を表示する
        # ファイルの先頭を表示するコマンド書式
        head [-行数] [ファイル名]
        
        # /etc/passwdファイルの先頭10行を表示
        $ head /etc/passwd
        root:x:0:0:root:/root:/bin/bash
        bin:x:1:1:bin:/bin:/sbin/nologin
        daemon:x:2:2:daemon:/sbin:/sbin/nologin
        adm:x:3:4:adm:/var/adm:/sbin/nologin
        lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
        sync:x:5:0:sync:/sbin:/bin/sync
        shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
        halt:x:7:0:halt:/sbin:/sbin/halt
        mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
        operator:x:11:0:operator:/root:/sbin/nologin
        
        # パイプを使って、他のコマンド出力の先頭部分を表示することも可能
        # psコマンド出力の先頭5行を表示
        $ ps aux | head -5
        USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
        root         1  0.0  0.0   2324  1508 ?        Sl   Aug12   0:00 /init
        root         4  0.0  0.0   2324     4 ?        Sl   Aug12   0:00 plan9 --control-socket 5 --log-level 4 --server-fd 6 --pipe-fd 8 --log-truncate
        root         7  0.0  0.0   2332   112 ?        Ss   Aug12   0:00 /init
        root         8  0.0  0.0   2348   120 ?        S    Aug12   0:00 /init
        
    • tailコマンド
      • headコマンドとは逆に、末尾部分だけを表示するのがtailコマンドである。
      • デフォルトでは末尾10行を表示する
        # ファイルの末尾を表示するコマンド書式
        tail [-行数] [ファイル名]
        
        # /etc/servicesファイルの末尾10行を表示
        $ tail /etc/services
        aigairserver    21221/tcp               # Services for Air Server
        ka-kdp          31016/udp               # Kollective Agent Kollective Delivery
        ka-sddp         31016/tcp               # Kollective Agent Secure Distributed Delivery
        edi_service     34567/udp               # dhanalakshmi.org EDI Service
        axio-disc       35100/tcp               # Axiomatic discovery protocol
        axio-disc       35100/udp               # Axiomatic discovery protocol
        pmwebapi        44323/tcp               # Performance Co-Pilot client HTTP API
        cloudcheck-ping 45514/udp               # ASSIA CloudCheck WiFi Management keepalive
        cloudcheck      45514/tcp               # ASSIA CloudCheck WiFi Management System
        spremotetablet  46998/tcp               # Capture handwritten signatures
        
        # もちろん、headコマンドの場合と同様に、パイプを使うことも可能
        # psコマンド出力の末尾5行を表示
        root       126  0.0  0.0   2332   112 ?        Ss   01:21   0:00 /init
        root       127  0.0  0.0   2348   120 ?        S    01:21   0:00 /init
        general+   128  0.0  0.0   8404  5412 pts/1    Ss   01:21   0:00 -bash
        general+   218  0.0  0.0  10084  3324 pts/1    R+   02:06   0:00 ps aux
        general+   219  0.0  0.0   5616  1020 pts/1    S+   02:06   0:00 tail -5
        
  • sortコマンドを使ってファイルの内容をソートできる

    • sortコマンドは、ファイルの内容をソート(並べ替え)して表示する。
    • デフォルトでは昇順(アルファベット)にソートされる
      # ファイルの内容をソートするコマンド書式
      sort [オプション] ファイル名
      
      # sample_sort.txtファイルをソート
      # 上記のコマンドでは、数値がソートされていないことがわかる
      $ cat sample_sort.txt
      1:/bin
      8:/var/spool/mail
      12:/usr/games
      998:/var/lib/chrony
      11:/root
      74:/var/empty/sshd
      
      # 対して、sortコマンドを使用するとソートが可能
      # しかし、以下のコマンドを見てわかる通り、これは1文字目だけを見て(1→7→8→9)ソートしているからである
      $ sort sample_sort.txt
      11:/root
      12:/usr/games
      1:/bin
      74:/var/empty/sshd
      8:/var/spool/mail
      998:/var/lib/chrony
      
      # 文字列ではなく数字を数値としてソートしたい場合は、-nオプションを使う
      $ sort -n sample_sort.txt
      1:/bin
      8:/var/spool/mail
      11:/root
      12:/usr/games
      74:/var/empty/sshd
      998:/var/lib/chrony
      
      # -rオプションを使うと、逆順(降順)にソート可能
      $ sort -nr sample_sort.txt
      998:/var/lib/chrony
      74:/var/empty/sshd
      12:/usr/games
      11:/root
      8:/var/spool/mail
      1:/bin
      
    • 主なオプション
      オプション 説明
      -n 数値として並べ替える
      -r 降順で並べ替える
      -f 項目の区切りを指定する
      -k キーを指定して並べ替える
      -u 重複行を省いて並べ替える
      -f 大文字小文字を関係なく並べ替える
  • nlコマンドを使って行番号を付けてファイルの内容を表示することができる

    # ファイルに行番号を付加して表示するコマンド書式
    nl [ファイル名]
    
    # sampleファイルに行番号を付けて表示
    nl sample_sort.txt
        1  1:/bin
        2  8:/var/spool/mail
        3  12:/usr/games
        4  998:/var/lib/chrony
        5  11:/root
        6  74:/var/empty/sshd
    
  • cutコマンドを使ってファイルのそれぞれの行から指定したフィールドのみを取り出すことができる

    • たとえば、「:」で区切られた行の第2、第4フィールドだけを取り出すといったことが可能
      # 指定したフィールドのみを取り出すコマンド書式
      cut [オプション] [ファイル名]
      
      # /etc/passwdファイルの第1および第3フィールドを出力(一部抜粋)
      $ cut -d: -f1,3 /etc/passwd
      root:0
      bin:1
      daemon:2
      adm:3
      lp:4
      sync:5
      (以下省略)
      
    • 主なオプション
      オプション 説明
      -b 必要な項目をバイト数で指定する
      -d 区切り文字を指定する
      -f 必要な項目を項目数で指定する
  • wcコマンドを使ってファイルの行数、単語数、バイト数を表示することができる

    # ファイルの行数などを表示
    wc [オプション] [ファイル名]
    
    # /etc/hostsファイルの行数、単語数、バイト数を表示
    $ wc /etc/hosts
    17  62 551 /etc/hosts
    
    # ファイル数を確認
    # -lオプションを使うと、行数だけを表示する
    # 次の例では、/etcディレクトリ以下にあるファイルやディレクトリの数を調べている
    $ ls /etc | wc -l
    189
    
    • 主なオプション
      オプション 説明
      -c バイト数を表示する
      -m 文字数を表示する(マルチバイト文字に対応)
      -l 改行の数を表示する
      -w 単語数を表示する
      -L 最も長い行の長さを表示する

2 ソフトウェアとパッケージ

2-1 パッケージとは?

  • ソフトウェアをインストールする単位がパッケージである
    • ほとんどのLinuxディストリビューションでは、ソフトウェアをパッケージという単位で管理している
    • パッケージ
      • 実行プログラムや設定ファイル、取り扱い説明のドキュメントファイルなどが1つのファイルにまとめられている
      • ソフトウェアが動作するファイルは、パッケージ内だけにまとめられているわけではなく、いろいろなプログラムが共通して利用するライブラリや、他のパッケージが必要となることもある
        • 例えば、パッケージAがパッケージBに含まれるファイルを利用しているとすれば、パッケージAのインストールに先立ってパッケージBのインストールが必要になる
        • また、パッケージBを削除すると、パッケージAのソフトウェアは実行できなくなる
        • 上記のような関係を依存関係という
  • Linuxで使われるパッケージの形式は複数あり、互換性はない
    • Red Hat系ディストリビューション
      • RPMパッケージ
    • Debian系ディストリビューション
      • debパッケージ
  • パッケージのインストール状態、パッケージのバージョン、依存関係の情報を管理する「パッケージ管理システム」がある
    • パッケージ管理システムには以下のものがある
      • CentOSやFedoraで採用されるYUMがある
      • Debian GNU/LinuxやUbuntuで採用されるAPTがある

2-2 パッケージの管理(CentOS)

  • パッケージをインストールするときは依存関係のあるパッケージも必要となる
  • RPMパッケージはrpmコマンドで管理する
    • RPMパッケージ
      • レッドハット社によって開発されたパッケージ形式である
      • 現在では、Red Hat Enterprise LinuxをはじめCentOS、Fedora、Vine Linux、openSUSEなど、数多くのディストリビューションに採用されている
      • RPMパッケージに関する操作はrpmコマンドで行う
        # RPMパッケージを管理するコマンド書式
        rpm オプション
        
        # インストール済みのRPMパッケージ一覧を表示
        # -qaオプションを付けるとインストール済みのRPMパッケージ一覧を表示
        $ rpm -qa
        tzdata-2023c-1.el9.noarch
        fonts-filesystem-2.0.5-7.el9.1.noarch
        adobe-source-code-pro-fonts-2.030.1.050-12.el9.1.noarch
        dejavu-sans-fonts-2.37-18.el9.noarch
        langpacks-core-font-en-3.0-16.el9.noarch
        abattis-cantarell-fonts-0.301-4.el9.noarch
        geolite2-country-20191217-6.el9.noarch
        geolite2-city-20191217-6.el9.noarch
        gawk-all-langpacks-5.1.0-6.el9.x86_64
        quota-nls-4.06-6.el9.noarch
        python3-setuptools-wheel-53.0.0-12.el9.noarch
        publicsuffix-list-dafsa-20210518-3.el9.noarch
        pcre2-syntax-10.40-2.el9.noarch
        (以下省略)
        
        # vim-commonパッケージの説明を表示
        # -qiオプションを付けると指定したパッケージの説明を表示
        $ rpm -qi vim-common
        Name        : vim-common
        Epoch       : 2
        Version     : 8.2.2637
        Release     : 20.el9
        Architecture: x86_64
        Install Date: Tue 08 Aug 2023 06:39:11 AM JST
        Group       : Unspecified
        Size        : 31861155
        License     : Vim and MIT
        Signature   : RSA/SHA256, Sat 11 Feb 2023 05:50:23 AM JST, Key ID 05b555b38483c65d
        Source RPM  : vim-8.2.2637-20.el9.src.rpm
        Build Date  : Fri 10 Feb 2023 01:35:24 AM JST
        Build Host  : x86-04.stream.rdu2.redhat.com
        Packager    : builder@centos.org
        Vendor      : CentOS
        URL         : http://www.vim.org/
        Summary     : The common files needed by any version of the VIM editor
        Description :
        VIM (VIsual editor iMproved) is an updated and improved version of the
        vi editor.  Vi was the first real screen-based editor for UNIX, and is
        still very popular.  VIM improves on vi by adding new features:
        multiple windows, multi-level undo, block highlighting and more.  The
        vim-common package contains files which every VIM binary will need in
        order to run.
        
        If you are installing vim-enhanced or vim-X11, you'll also need
        to install the vim-common package.
        
        # パッケージがインストールされているかどうかを確認する
        # -qオプションを付けると指定したパッケージがインストールされているかを確認することができる
        $ rpm -q postfix
        postfix-3.5.9-21.el9.x86_64
        
        $ rpm -q httpd
        httpd-2.4.57-5.el9.x86_64
        
        # htopパッケージをインストール
        $ su -
        Password:
        $ rpm -ivh htop-2.2.0-3.el7.x86_64.rpm
        
        # htopパッケージをアップグレード
        $ rpm -Uvh htop-2.2.0-3.el7.x86_64.rpm
        
        # htopパッケージをアンインストール
        $ rpm -e htop
        
        • 主なオプション(rpmコマンドではオプションは必須)
          オプション 説明
          -ivh パッケージファイル名 指定したパッケージをインストールする
          -Uvh パッケージファイル名 指定したパッケージをアップグレードする
          -e パッケージ名 指定したパッケージをアンインストールする
          -q パッケージ名 指定したパッケージがインストールされているのかを確認する
          -qa インストール済みのパッケージを一覧表示する
          -qi パッケージ名 指定したパッケージの説明を表示する
  • パッケージ管理を統合的に行えるシステムとしてYUMがある
    • YUMとは?
      • CentOSでは、より高度なパッケージ管理を行うYUM(Yellowdog Updater Modified)というパッケージ管理システムを使ってRPM形式のパッケージを取り扱う
      • YUMの特徴は次のとおりである
        • パッケージをインターネット上で検索できる
        • 必要なパッケージをインターネット上から自動的にダウンロードできる
        • rpmコマンドを使う時のように、インストールやアップグレードするパッケージをあらかじめダウンロードしておかなくてもよい
        • YUMを利用する際はyumコマンドを利用する
  • YUMではyumコマンドを使ってパッケージを管理する
    # YUMのパッケージ管理コマンド書式
    $ yum サブコマンド
    
    # httpdパッケージをインストール
    # パッケージにインストールやアップグレード、アンインストールにはroot(管理者)ユーザーの権限が必要
    # httpdパッケージをインストールすると、依存関係のあるパッケージも自動でインストールされる
    $ su -
    Password:
    $ yum install httpd
    Last metadata expiration check: 0:00:12 ago on Sun 13 Aug 2023 05:45:13 AM JST.
    Dependencies resolved.
    ======================================================================================================================== Package                           Architecture          Version                         Repository                Size
    ========================================================================================================================Installing:
    httpd                             x86_64                2.4.57-5.el9                    appstream                 47 k
    Installing dependencies:
    apr                               x86_64                1.7.0-11.el9                    appstream                123 k
    apr-util                          x86_64                1.6.1-23.el9                    appstream                 95 k
    apr-util-bdb                      x86_64                1.6.1-23.el9                    appstream                 13 k
    centos-logos-httpd                noarch                90.4-1.el9                      appstream                252 k
    httpd-core                        x86_64                2.4.57-5.el9                    appstream                1.4 M
    httpd-filesystem                  noarch                2.4.57-5.el9                    appstream                 14 k
    httpd-tools                       x86_64                2.4.57-5.el9                    appstream                 81 k
    mailcap                           noarch                2.1.49-5.el9                    baseos                    33 k
    Installing weak dependencies:
    apr-util-openssl                  x86_64                1.6.1-23.el9                    appstream                 15 k
    mod_http2                         x86_64                1.15.19-4.el9                   appstream                149 k
    mod_lua                           x86_64                2.4.57-5.el9                    appstream                 61 k
    
    Transaction Summary
    ========================================================================================================================Install  12 Packages
    
    Total download size: 2.2 M
    Installed size: 6.5 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/12): apr-util-1.6.1-23.el9.x86_64.rpm                                                563 kB/s |  95 kB     00:00
    (2/12): mailcap-2.1.49-5.el9.noarch.rpm                                                 188 kB/s |  33 kB     00:00
    (3/12): apr-1.7.0-11.el9.x86_64.rpm                                                     658 kB/s | 123 kB     00:00
    (4/12): apr-util-bdb-1.6.1-23.el9.x86_64.rpm                                            274 kB/s |  13 kB     00:00
    (5/12): apr-util-openssl-1.6.1-23.el9.x86_64.rpm                                        292 kB/s |  15 kB     00:00
    (6/12): httpd-2.4.57-5.el9.x86_64.rpm                                                   1.8 MB/s |  47 kB     00:00
    (7/12): centos-logos-httpd-90.4-1.el9.noarch.rpm                                        3.5 MB/s | 252 kB     00:00
    (8/12): httpd-filesystem-2.4.57-5.el9.noarch.rpm                                        318 kB/s |  14 kB     00:00
    (9/12): httpd-tools-2.4.57-5.el9.x86_64.rpm                                             2.2 MB/s |  81 kB     00:00
    (10/12): mod_lua-2.4.57-5.el9.x86_64.rpm                                                2.0 MB/s |  61 kB     00:00
    (11/12): mod_http2-1.15.19-4.el9.x86_64.rpm                                             3.4 MB/s | 149 kB     00:00
    (12/12): httpd-core-2.4.57-5.el9.x86_64.rpm                                             6.4 MB/s | 1.4 MB     00:00
    ------------------------------------------------------------------------------------------------------------------------Total                                                                                   1.7 MB/s | 2.2 MB     00:01
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                1/1
      Installing       : apr-1.7.0-11.el9.x86_64                                                                       1/12
      Installing       : apr-util-bdb-1.6.1-23.el9.x86_64                                                              2/12
      Installing       : apr-util-openssl-1.6.1-23.el9.x86_64                                                          3/12
      Installing       : apr-util-1.6.1-23.el9.x86_64                                                                  4/12
      Installing       : httpd-tools-2.4.57-5.el9.x86_64                                                               5/12
      Running scriptlet: httpd-filesystem-2.4.57-5.el9.noarch                                                          6/12
      Installing       : httpd-filesystem-2.4.57-5.el9.noarch                                                          6/12
      Installing       : centos-logos-httpd-90.4-1.el9.noarch                                                          7/12
      Installing       : mailcap-2.1.49-5.el9.noarch                                                                   8/12
      Installing       : httpd-core-2.4.57-5.el9.x86_64                                                                9/12
      Installing       : mod_lua-2.4.57-5.el9.x86_64                                                                  10/12
      Installing       : mod_http2-1.15.19-4.el9.x86_64                                                               11/12
      Installing       : httpd-2.4.57-5.el9.x86_64                                                                    12/12
      Running scriptlet: httpd-2.4.57-5.el9.x86_64                                                                    12/12
    /sbin/ldconfig: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
    
    
      Verifying        : mailcap-2.1.49-5.el9.noarch                                                                   1/12
      Verifying        : apr-1.7.0-11.el9.x86_64                                                                       2/12
      Verifying        : apr-util-1.6.1-23.el9.x86_64                                                                  3/12
      Verifying        : apr-util-bdb-1.6.1-23.el9.x86_64                                                              4/12
      Verifying        : apr-util-openssl-1.6.1-23.el9.x86_64                                                          5/12
      Verifying        : centos-logos-httpd-90.4-1.el9.noarch                                                          6/12
      Verifying        : httpd-2.4.57-5.el9.x86_64                                                                     7/12
      Verifying        : httpd-core-2.4.57-5.el9.x86_64                                                                8/12
      Verifying        : httpd-filesystem-2.4.57-5.el9.noarch                                                          9/12
      Verifying        : httpd-tools-2.4.57-5.el9.x86_64                                                              10/12
      Verifying        : mod_http2-1.15.19-4.el9.x86_64                                                               11/12
      Verifying        : mod_lua-2.4.57-5.el9.x86_64                                                                  12/12
    
    Installed:
      apr-1.7.0-11.el9.x86_64                  apr-util-1.6.1-23.el9.x86_64             apr-util-bdb-1.6.1-23.el9.x86_64
      apr-util-openssl-1.6.1-23.el9.x86_64     centos-logos-httpd-90.4-1.el9.noarch     httpd-2.4.57-5.el9.x86_64
      httpd-core-2.4.57-5.el9.x86_64           httpd-filesystem-2.4.57-5.el9.noarch     httpd-tools-2.4.57-5.el9.x86_64
      mailcap-2.1.49-5.el9.noarch              mod_http2-1.15.19-4.el9.x86_64           mod_lua-2.4.57-5.el9.x86_64
    
    Complete!
    
    # nginxパッケージの情報を表示
    # infoサブコマンドを使用すると、指定したパッケージの情報を表示する
    $ yum info nginx
    Last metadata expiration check: 0:38:02 ago on Sun 13 Aug 2023 05:45:13 AM JST.
    Available Packages
    Name         : nginx
    Epoch        : 1
    Version      : 1.22.1
    Release      : 2.el9
    Architecture : x86_64
    Size         : 39 k
    Source       : nginx-1.22.1-2.el9.src.rpm
    Repository   : appstream
    Summary      : A high performance web server and reverse proxy server
    URL          : https://nginx.org
    License      : BSD
    Description  : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
                : IMAP protocols, with a strong focus on high concurrency, performance and low
                : memory usage.
    
    # キーワード「ruby」でパッケージ検索
    # searchサブコマンドを使用すると、指定したパッケージを検索する
    $ yum search ruby
    Last metadata expiration check: 0:40:49 ago on Sun 13 Aug 2023 05:45:13 AM JST.
    ============================================== Name Exactly Matched: ruby ==============================================
    ruby.i686 : An interpreter of object-oriented scripting language
    ruby.x86_64 : An interpreter of object-oriented scripting language
    ============================================= Name & Summary Matched: ruby =============================================
    kf5-kross-ruby.x86_64 : KF5 Kross plugin for ruby
    libselinux-ruby.x86_64 : SELinux ruby bindings for libselinux
    mapserver-ruby.x86_64 : Ruby/Mapscript map making extensions to Ruby
    munin-plugins-ruby.noarch : Ruby plugins for Munin resource monitoring
    remctl-ruby.x86_64 : Ruby interface to remctl
    rrdtool-ruby.x86_64 : Ruby RRDtool bindings
    ruby-augeas.x86_64 : Ruby bindings for Augeas
    ruby-build.x86_64 : Compile and install Ruby
    ruby-build-rbenv.x86_64 : rbenv plugin to compile and install Ruby
    
    # システムをアップデートする
    $ yum update
    
    • yumコマンドの主なサブコマンド
      サブコマンド 説明
      update システム全体をアップデートする
      install パッケージ名 指定したパッケージをインストールする
      remove パッケージ名 指定したパッケージをアンインストールする
      update パッケージ名 指定したパッケージをアップデートする
      list パッケージを一覧表示する(未インストールも含む)
      info パッケージ名 指定したパッケージの情報を表示する
      search "キーワード" 指定したキーワードでパッケージを検索する

3 ファイルシステム

3-1 ハードウェアとLinux

  • コンピュータを構成するパーツや周辺機器をデバイスという
    • 主なコンピュータを構成するパーツ
      パーツの名称 説明
      マザーボード 各種デバイスを設置するベースとなる基盤。様々なポートやチップが搭載されている
      プロセッサ(CPU) コンピュータの頭脳に相当する。Intel社のCore iシリーズやCeleronといった製品が有名
      メモリ 一時的にデータを記憶しておく装置。電源を切るとデータは消えてしまう。Linuxを動かすには1GB~8GB程度が必要
      ハードディスク 時期を使ってデータを記録する記録装置。比較的低価格で大容量だが、読み書きの速度は遅い
      SSD フラッシュメモリを使った記憶装置。ハードディスクよりも高速だが、やや高価
      光学ドライブ データをバックアップしたり配布用のメディアに書き込んだりする装置。CD-ROM/DVD-ROM/Blu-ray Diskなどのメディアがある
      テープドライブ カセット型カートリッジの磁気テープに記録する装置。サーバのバックアップに使われる。低価格で大容量
      電源 マザーボードやパーツに電源供給する。パーツの組み合わせによって電力消費量が異なるので、適切な容量の電源を選ぶ必要がある
      USP 無停電電源装置。停電するとコンピュータに信号を送り、安全にシャットダウンするまで、バッテリーから電力を供給する
  • デバイスドライバは、OSがデバイスを認識し、適切に動作させるためのプログラム
    • デバイスドライバは、デバイスに付属されたCD-ROMからインストールしたり、インターネット上からダウンロードしたりしてOSに組み込まれる
    • Linuxの場合、デバイスドライバはカーネルのパーツとして提供される
      • カーネルはそれらのパーツを、必要に応じて組み込んだり取り外したりできる
      • このようなパーツは、カーネルモジュールと呼ばれる
    • デバイスドライバがカーネルに組み込まれていれば、対応するデバイスを利用することができる

3-2 ファイルシステムとは?

  • デバイスの入出力を扱う特殊なデバイスファイルがある
    • デバイスファイルとは、コンピュータに接続した周辺機器などをファイルシステム上のファイルのように扱う
    • ファイルの読み書きと同じ手順でデータの入出力を制御できるようにしたもの
    • デバイスファイルは「/dev」ディレクトリ以下に配置される
      • /devディレクトリ以下に数多くのファイルがあることがわかる。
      • Linuxカーネルがハードウェアを検知すると、udevという仕組みによって自動的に作成される
      • 管理者がデバイスファイルを作成する必要はない
      # /dev以下のファイルやディレクトリを一覧表示
      $ ls /dev
      autofs           fuse   loop1         nvram  ram15   sdb  stderr  tty16  tty27  tty38  tty49  tty6   urandom    zero
      block            hvc0   loop2         ppp    ram2    sdc  stdin   tty17  tty28  tty39  tty5   tty60  vcs
      bsg              hvc1   loop3         ptmx   ram3    sdd  stdout  tty18  tty29  tty4   tty50  tty61  vcs1
      (以下省略)
      
    • 主なデバイスファイル
      デバイスファイル 説明
      /dev/sda 1番目のハードディスク
      /dev/sda1 1番目のハードディスクの1番目の基本パーティション
      /dev/sda2 1番目のハードディスクの2番目の基本パーティション
      /dev/sda3 1番目のハードディスクの3番目の基本パーティション
      /dev/sda4 1番目のハードディスクの4番目の基本パーティション
      /dev/sda5 1番目のハードディスクの1番目の論理パーティション
      /dev/sda6 1番目のハードディスクの2番目の論理パーティション
      (以下省略)
      /dev/sdb 2番目のハードディスク
      /dev/sdc 3番目のハードディスク
      /dev/sr0 1番目のCD/DVD/BDドライブ
      /dev/st0 1番目のテープドライブ
    • パーティションの作成
      • 1台のハードディスクは複数の領域(パーティション)に分割して利用することができる
      • パーティションは基本的に4つにわけることができる
        • 基本パーティション(物理パーティション)
          • ハードディスクのデバイスファイル名が/dev/sdaであれば、基本パーティションは「/dev/sda1 ~ /dev/sda4」になる
      • 最大4つのパーティションのうち、1つだけは拡張パーティションに変更できる
        • 拡張パーティションとは、その中にさらに複数の論理的なパーティションを作成して利用できるパーティションである
        • ハードディスク/dev/sdaの場合、論理パーティションは「/dev/sda5」以降になる
      • パーティションを分割するメリット
        • システムに障害が発生したとき、ファイルシステムの一部が壊れてしまうことがあるが、パーティションを分割していれば、被害を1つのパーティション内だけにとどめることができる
        • 大量のファイルが書き込まれた場合、パーティションに分割していなければ、システムの運用自体に悪影響が出る可能性がある
        • バックアップもパーティション単位で行うことが多いので、パーティションに分けていれば運用しやすくなる
      • パーティションはLinuxのインストール時に作成することが可能だが、インストール後もfdiskコマンドを使って操作することが可能。
        • ただし、既存のパーティションを変更すると、システムが影響を受けてしまうので注意が必要!!
        # パーティションの操作コマンド書式
        # fdiskコマンドはroot(管理者)ユーザーだけが実行可能
        fdisk デバイスファイル名
        
        # /dev/sdb内にパーティションを作成
        $ fdisk /dev/sdb
        
        Welcome to fdisk (util-linux 2.23.2).
        
        Changes will remain in memory only, until you decide to write them.
        Be careful before using the write command.
        
        Command (m for help): n
        Partition type:
          p   primary (0 primary, 0 extended, 4 free)
          e   extended
        Select (default p): p
        Partition number (1-4, default 1): 1
        First sector (2048-16777215, default 2048):
        Using default value 2048
        Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +1G
        Partition 1 of type Linux and of size 1 GiB is set
        
        Command (m for help): p
        
        Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
        Units = sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk label type: dos
        Disk identifier: 0xe5675bb6
        
          Device Boot      Start         End      Blocks   Id  System
         /dev/sdb1            2048     2099199     1048576   83  Linux
        
        Command (m for help): w
        The partition table has been altered!
        
        Calling ioctl() to re-read partition table.
        Syncing disks.
        
      • 参考URL
  • ディスク上のデータを管理する仕組みがファイルシステムである
    • ファイルシステムとは、ハードディスクなど外部記憶装置のデータをファイルとして管理する仕組み
    • ハードディスクを利用するには、ディスク上にパーディションを作成し、パーティション内にファイルシステムを作成する
  • ファイルシステムを作成するにはmkfsコマンドを使う
    • パーティションを作成しただけでは、まだその中にファイルを保存することができない
    • ファイルやディレクトリでデータを管理できるようにするには、パーティションの中にファイルシステムを作成する必要がある
    • ファイルシステムの種類はOSによって異なり、Linuxではext4をはじめとする数十種類のファイルシステムを扱うことが可能
    • ルートファイルシステム(/ディレクトリが格納されているファイルシステム)として、ext3ext4をデフォルトで採用しているディストリビューションが多い
    • 主なファイルシステムの種類
      ファイルシステム 説明
      ext2 一昔前のLinux標準ファイルシステム
      ext3 ext2を改良し機能強化したファイルシステム
      ext4 ext3を改良したファイルシステムで、現在多くのディストリビューションで標準ファイルシステムとなっている
      XFS 高速かつ堅牢なファイルシステム
      Btrfs Linux向けに開発されている、高速かつ多機能なファイルシステム
      NTFS Windowsのファイルシステム
      FAT デジカメなどでよく使われているファイルシステム
      ISO9660 CD-ROMで使われているファイルシステム
      UDF DVDで使われているファイルシステム
    • ファイルシステムを作成する際にはmkfs(MaKe FileSystem)コマンドを使い、mkfsコマンドはroot(管理者)ユーザーだけが実行できる
      # ファイルシステムを作成する際のコマンド書式
      mkfs [-t ファイルシステム] デバイスファイル名
      
      # ext4ファイルシステムの作成
      # 次の例では、/dev/sda3にext4ファイルシステムを作成
      $ mkfs -t ext4 /dev/sda3
      
      mke2fs 1.42.9 (28-Dec-2013)
      /dev/sda3 is mounted; will not make a filesystem here!
      
      
      • 主なオプション
        オプション 説明
        -t ファイルシステムのタイプを指定。指定しなかった場合(デフォルト)は、ext2が用いられる
        -c ファイルシステムを作成する前に、デバイスに対して不良ブロックの検査を行う
  • Linuxの標準的なファイルシステムはext4である

3-3 マウントとアンマウント

  • ディレクトリツリーに他のファイルシステムを接続することをマウントという
    • Windowsでは、ハードディスクはCドライブとDドライブ、DVDドライブはEドライブUSBメモリを接続するとFドライブというように、デバイスごとにドライブ管理されている
    • Linuxにはドライブという概念はなく、Linuxでは、DVDドライブも外付けハードディスクもUSBメモリも、すべて「/ディレクトリ」以下のディレクトリツリーに接ぎ木してい管理している。これをマウントという
    • マウントポイント
      • デバイスを接続するディレクトリのことである。マウントポイント任意のディレクトリで問題ない
      # マウントの実行
      mount デバイスファイル マウントポイント
      
      # DVD-ROMをマウント
      # DVD-ROMをマウントする前に、VirtualBoxの仮想環境(CentOS)に光学ドライブのディスクイメージ(ファイル)を追加しておくこと
      $ su -
      Password:
      $ ls /media/dvdrom/
      
      $ mount /dev/sr0 /media/dvdrom/
      mount: /dev/sr0 is write-protected, mounting read-only
      
      # ls /media/dvdrom
      CentOS7vm.vbox  CentOS7vm.vbox-prev  CentOS7vm.vdi  Logs  Snapshots  sdb.vdi
      
      • 最近のディストリビューションの多くでは、CDやDVD-ROMを挿入すると自動的にマウントが実行される
      • その場合は、CDやDVD-ROMのタイトル(ボリューム名)がマウントポイントに使われる
    • /etc/fstabファイル
      • 「/etc/fstab」ファイルには、マウント情報が設定されている
      • CD/DVD-ROMなど、頻繁に利用することが予想されるデバイスについては、「/etc/fstab」ファイルに設定を記載することによって、デバイスファイルを名かマウントポイントを指定するだけでマウントが可能
      • 最近のディストリビューションでは、/etc/fstabはシステムによって自動的に処理される。そのため、手動での書き換えは好ましくない場合がある
      # /etc/fstabファイルの例
      $ cat /etc/fstab
      
      #
      # /etc/fstab
      # Created by anaconda on Fri Apr 26 19:22:27 2019
      #
      # Accessible filesystems, by reference, are maintained under '/dev/disk'
      # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
      #
      UUID=37abee08-086b-46bf-a636-b4b6f26d7380 /                       xfs     defaults        0 0
      UUID=ee1298ef-5f4f-4199-aae1-9a8d241ec4d8 /boot                   ext4    defaults        1 2
      UUID=710ad3cb-59d3-48d9-a17e-f0adce4c3594 swap                    swap    defaults        0 0
      /dev/sr0                                  /media/dvdrom           udf,iso9660 ro          0 0
      
      # デバイスファイル名だけでマウント
      $ mount /dev/sr0
      
      # マウントポイントだけでマウント
      $ mount /media/dvdrom
      
  • 外部メディアはマウントすることで利用できるようになる
  • マウントを解除することをアンマウントという
    # アンマウントの実行
    umount デバイスファイル or マウントポイント
    
    # ディスクの空き領域を確認する
    # dfコマンドを利用することで、どのファイルシステムがマウントされているのかを確認することができる
    $ df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda2       31236200 1534384  29701816   5% /
    devtmpfs          496672       0    496672   0% /dev
    tmpfs             507484       0    507484   0% /dev/shm
    tmpfs             507484    6920    500564   2% /run
    tmpfs             507484       0    507484   0% /sys/fs/cgroup
    /dev/sda1         194235  155473     24426  87% /boot
    tmpfs             101500       0    101500   0% /run/user/1000
    /dev/sr0         2229234 2229234         0 100% /media/dvdrom
    tmpfs             101500       0    101500   0% /run/user/0
    
    # DVD-ROMをアンマウント
    $ umount /dev/sr0
    
    # ディスクの空き領域を再確認
    # /dev/sr0がアンマウントされていることを確認
    $ df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda2       31236200 1534392  29701808   5% /
    devtmpfs          496672       0    496672   0% /dev
    tmpfs             507484       0    507484   0% /dev/shm
    tmpfs             507484    6920    500564   2% /run
    tmpfs             507484       0    507484   0% /sys/fs/cgroup
    /dev/sda1         194235  155473     24426  87% /boot
    tmpfs             101500       0    101500   0% /run/user/1000
    tmpfs             101500       0    101500   0% /run/user/0
    
    # 実際に/media/dvdromがアンマウントされていることを確認する
    # /media/dvdromを確認することで何も表示されていないことが確認でき、DVD-ROMがアンマウントされていることが確認できる
    $ ls /media/dvdrom
    

3-4 ディレクトリの配置と役割

  • ディレクトリやファイルの配置はFHSで規定されている
    • ファイルシステム内のレイアウト、つまり/ディレクトリ以下にどのようなディレクトリやファイルを配置するかについては、FHS(ファイルシステム階層標準:Filesystem Hierarchy Standard)として標準化が進められている
  • 多くのディストリビューションがFHSに準拠しているが、ディストリビューションごとに異なる配置もある
    • 主要なディストリビューションはFHSに準拠しているが、一部のファイルやディレクトリにディストリビューション固有のものが見られる
    • ここでは、FHSで規定されている重要なディレクトリの配置を紹介する
      オプション 説明
      /bin 一般ユーザーでも利用可能な、システム管理に必須のコマンドを格納
      /boot Linuxの起動に必要なファイルやLinuxカーネルを格納
      /dev デバイスファイルを格納
      /etc システムの設定ファイルや、サービスの起動スクリプトファイルなどを格納
      /home ユーザーごとのホームディレクトリを格納
      /lib 共有ライブラリファイル、カーネルモジュール(デバイスドライバなど)を格納
      /mnt マウントポイントとなるディレクトリを格納
      /opt ソフトウェアのインストール先(実際にはあまり利用されない)
      /proc カーネル情報にアクセスするための仮想ファイルシステム
      /root rootユーザーのホームディレクトリ
      /sbin システム管理に必須のコマンドを格納。rootユーザーのみ利用可能
      /tmp 一時ファイルを格納
      /usr プログラムやソフトウェア、ライブラリなどを格納
         /usr/bin 一般ユーザーコマンド(緊急時のシステム管理に必須でない)を格納
         /usr/sbin 管理者コマンド(緊急時のシステム管理に必須でない)を格納
         /usr/lib 共有ライブラリを格納
         /usr/local システムごとにインストールしたプログラムやドキュメントを格納
         /usr/share システムアーキテクチャに依存しないファイルやドキュメントを格納
         /usr/src プログラムのソースコードを格納
      /var 頻繁に書き換えが発生するファイルを格納
         /var/cache 一時的なキャッシュファイルを格納
         /var/log ログファイルを格納
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0