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
- どこで保存したのか忘れてしまったファイルなどを名前で検索したいときは、locateコマンドを利用する
-
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
- 主な検索式
- ファイル名だけでなく、様々な条件を指定して、リアルタイムでファイル名を検索できるのがfindコマンドである。1
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コマンドの主なオプション
-
grepコマンドは、テキストファイルの内容を検索し、指定した正規表現にマッチする行があれば表示するコマンド
-
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
-
headコマンド
-
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 必要な項目を項目数で指定する
- たとえば、「:」で区切られた行の第2、第4フィールドだけを取り出すといったことが可能
-
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パッケージ
- Red Hat系ディストリビューション
- パッケージのインストール状態、パッケージのバージョン、依存関係の情報を管理する「パッケージ管理システム」がある
- パッケージ管理システムには以下のものがある
- 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 パッケージ名 指定したパッケージの説明を表示する
- 主なオプション(rpmコマンドではオプションは必須)
- RPMパッケージ
- パッケージ管理を統合的に行えるシステムとしてYUMがある
-
YUMとは?
- CentOSでは、より高度なパッケージ管理を行うYUM(Yellowdog Updater Modified)というパッケージ管理システムを使ってRPM形式のパッケージを取り扱う
- YUMの特徴は次のとおりである
- パッケージをインターネット上で検索できる
- 必要なパッケージをインターネット上から自動的にダウンロードできる
- rpmコマンドを使う時のように、インストールやアップグレードするパッケージをあらかじめダウンロードしておかなくてもよい
- YUMを利用する際は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 "キーワード" 指定したキーワードでパッケージを検索する
- yumコマンドの主なサブコマンド
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をはじめとする数十種類のファイルシステムを扱うことが可能
- ルートファイルシステム(/ディレクトリが格納されているファイルシステム)として、ext3やext4をデフォルトで採用しているディストリビューションが多い
- 主なファイルシステムの種類
ファイルシステム 説明 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 ログファイルを格納