Linuc_Level1_101（勉強の記録）_2日目

locate:データベースを使用してファイルを検索
find:データベースを介さずファイルを検索

・所有ユーザーやグループを変更。
chown
（例）所有ユーザーをstaffに変更
chown staff file.txt

・パーミションを変更
chmod

SGID：特殊なパーミションの一つでプログラムをどのユーザーが実行しても、グループの権限で実行されるようにする。
設定方法：
-chmodコマンドで通常のパーミッションの値に2000を加えた値を設定する
-所有グループに「s」という権限を追加します(g+s)。

SUID:プログラムをどのユーザーが実行しても所有ユーザーの権限で実行される。
-設定方法：chmodコマンドで、通常のパーミッションの値に4000を加えた値を設定する
-所有ユーザに「s」という権限を追加します(u+s)。

スティーキービット：権限があっても、ファイル等を削除できなくする。1000 or tで指定

ファイルの圧縮コマンド：
gzip
bzip2

展開：
gunzip

dd：ファイルのコピー

File1のハードリンクをFile2として作成：ln File1 File2

xz形式でファイルを圧縮するにはxzコマンドを使用。
-d, --decompress：圧縮ファイルの展開
-k, --keep：圧縮、展開後に元のファイルを削除しない。
-l：圧縮ファイルの情報を表示

例）bzip2 -d mail_backup　展開する

fileコマンドではファイルの種類が表示される。fileコマンドを使用すると、ファイルの最終変更時刻（mtime、ctime）は更新されませんが、最終アクセス時刻（atime）は更新されます。

ディレクトリのハードリンクは作成することができない。シンボリックリンクは作成可能。

findコマンドの-print0：検索結果をNULL文字で区切って表示。

headコマンド
-c：バイト数
例）head -c 500 httpd.conf

tailコマンド：
ファイルの末尾に追加された行を表示し続ける。

unexpandコマンド：
スペースをタブに置き換える。
-unexpand -t 1 spacefile.txt
-unexpand -a -t 1 spacefile.txt

uniqコマンド：
-d：重複している行のみを表示。
-u；重複していない行のみを表示。

標準出力に出力されたコマンドの実行結果を、別のコマンドの標準入力に渡すにはパイプ(|)を利用

wcコマンド：文字数、行数などを調べる。
-l：行数
-w:単語数
-c：文字（バイト）数

yumコマンド：インターネット上ないしはメディア上のパッケージ情報のデータベースを使い、依存関係を調整しながら、パッケージのインストール・アンインストールなどを行う。
※Debian系Linuxの場合、apt-getがほぼ同等のコマンド

sedコマンド：ファイルや標準入力の内容を編集して表示
gdiskコマンド：GPT（GUID Partition Table）形式のハードディスクにおいて、パーティションの作成、削除、変更および情報表示を行うコマンド
fdiskコマンド：MBR（Master Boot Record）形式のハードディスクへのパーティション操作を行うコマンド

set:すべてのシェル変数、環境変数の表示
env：すべての環境変数の表示
printenv：一部またはすべての環境変数の表示

httpd.conf」ファイルの末尾5行を表示
　・tail -5 httpd.conf
・tail -n 5 httpd.conf

tail -c 5 httpd.conf 末尾５バイトの表示

sortコマンド
-f：大文字、小文字を区別しない
-k：sortするフィールドを指定
-r：降順でソート
-t：指定した文字を区切り文字としてフィールドを認識

ファイルシステムのマウントの設定を行うファイル
/etc/fstab

マウントされているファイルシステムの情報が格納されているファイル
etc/mtab

fmtコマンド:
1行あたりの最大文字数を指定してテキストを整形

-wオプションで一行あたりの最大文字数を指定（デフォルト75文字）

fmt -w 30 httpd.conf

apt-fileコマンドを使用して、「docker.io」パッケージに含まれているファイルの一覧を表示
apt-filelist docker.io
apt-file show docker.io

apt-file search docker.io
名前に「docker.io」が入っているファイルを含むパッケージを検索するコマンド

現在マウントされているファイルシステムの情報は「/etc/mtab」ファイルに格納されている。
umount：ファイルシステムをアンマウント

mkfs：作成したパーティションにファイルシステムを作成するコマンド。

mountコマンド：
-a：/etc/fstabファイルに記載されているファイルシステムをすべてマウント
-o：続けてマウントオプションを指定
-t：続けてファイルシステムの種類を指定

RPMツールは、Red Hat系ディストリビューションで使用されるRPM形式のパッケージを管理するためのツール
Debian系Linuxだと、dpkgがほぼ同等のコマンド

YUM(Yellowdog Updater Modified)
YUMツールはRPMツールを拡張したツール群。インターネット上ないしはメディア上のパッケージ情報のデータベースを使い、依存関係を調整しながらパッケージ管理を行うことができる。
Debian系Linuxでは、apt-getほぼ同等のコマンド

ファイルの内容をページ(1画面)ごとに表示するコマンドはlessとmore

cat：ファイルの内容を1ページずつではなく、すべて表示

emacs：テキストエディタのemacsを起動

nl:ファイルを行番号を付けて表示

sort:行単位でファイルの内容をソートするコマンド
tail -n 5 httpd.conf
最後５行を表示

wc：ファイル内mの文字数や行数を調べる。
標準入力元をキーボードからファイルに切り替えるリダイレクト演算子 <

bashシェルには文字補完機能があり、この機能を使うためのキーはtab

Linux：LF（\n）、Windows：CRLF（\r\n）

多くのシステムではキャリッジリターン（Carriage Return: CR、\r（16進数で0D））とラインフィード（Line feed: LF、\n（16進数で0A））を使って改行を表す。

改行コードと代表的なOSの組み合わせは以下のとおり。
・CRLF（\r\n）：Windows
・LF（\n）：Unix OS（Linux, Mac OS Xなど）
・CR（\r）：古いMacOS（バージョン9まで）

パッケージの取得元(リポジトリ)を設定するファイルが格納されているディレクトリ
/etc/yum.repos.d

「test.txt」ファイルの行頭が「#」の行を削除して表示
sed /^#/d test.txt
s/文字列１/文字列２/：各行の最初に現れる、文字列１を文字列２に置換。
s/文字列1/文字列2/g：すべての文字列１を文字列２に置換。
/文字列/d：文字列が含まれる行を削除
行番号１,行番号2d：行番号１から行番号２までを削除

行頭にある「#」は正規表現で「^#」と表す。

正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法。文字列の検索や置換などを行う際に利用。正規表現には基本正規表現（BRE: Basic Regular Expression）と拡張正規表現（ERE: Extended Regular Expression）がある。
.　任意の一文字
* 直前の文字の０回以上の繰り返し
[] []内のいずれか１文字
[abc] 　abcのどれか１文字
[a-z] 小文字のアルファベット１文字
[^abc] abc以外のどれか１文字
^ 行頭
$ 行末
\　次の文字を通常の文字として処理
+ 直前の文字の一回以上の繰り返し a+
? 直前の文字の０回、１回以上の繰り返し。
| 左右いずれかの文字列。
+,?,|については拡張正規表現 

・grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド。
なお、「-E」オプションを併用すると拡張正規表現が使える(egrepコマンドと同様)。

・sed
ファイルや標準入力の内容を編集して表示するコマンド

例1）1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合
$ grep '[1-5]' test.txt

例2）「test.txt」ファイルの「#」から始まる行を削除して出力する場合
$ sed '/^#/d' test.txt

/home：一般ユーザーのホームディレクトリ
/usr：起動に不要なぷプログラムなどを格納
/var：ログファイルやメールなどを格納
/opt：追加でインストールしたパッケージを格納
/boot：Linuxカーネルなど起動に必須のファイルを格納。
/bin:一般ユーザー用のコマンドを格納
/sbin：管理者用のコマンドを格納
/etc：システムの設定ファイルを格納
/lib：共有ライブラリを格納
/dev：デバイスファイルを格納

パーティションとはハードディスクを論理的に分割した単位

Linuxのパーティションには、以下の2つが最低限必要となる。
・ルートパーティション
最上位のディレクトリであるルートディレクトリ(/)を割り当てたパーティションのことで、その配下に様々なディレクトリやファイルが含まれている。
・スワップ領域
物理メモリに収まらなかった情報を一時的に格納する為の領域。

rpmコマンドを使用して、インストールする前に「postfix-1.1.12-1.i386.rpm」ファイルの変更履歴を確認したい
rpm --query -p --changelog postfix-1.1.12-1.i386.rpm
rpm -qp --changelog postfix-1.1.12-1.i386.rpm

yumコマンド:
インターネット上ないしはメディア上のパッケージ情報のデータベースを使い、依存関係を調整しながら、パッケージのインストール・アンインストールなどを行えるコマンド

yumコマンド：
install
update
remove
info
list
search
check-update
grouplist
groupinstall
deplist

スワップ領域とは、物理メモリ（実メモリ）に収まらなかった情報を一時的に格納する為の、通常ハードディスク上に作成する領域

スワップ領域を作成するコマンド:mkswap

・mkfs
各種ファイルシステムを作ることができるコマンド

・swapon
スワップ領域を有効にするコマンド

・swapoff
スワップ領域を無効にするコマンド

・fdisk
スワップ用のパーティションを作成する際に使用

trコマンドで使用する文字クラスのうち、数字を表すもの
[:digit:]

trコマンド：
[:alpha:]：英字
[:lower:]:英小文字
[:upper:]：英大文字
[:digit:]：数字（0-9）
[:alnum:]：英数字
[:space:]：スペース

trコマンド：指定した文字を変換・削除するコマンド
-d：文字列１で指定した文字を削除
-s：文字列１で選択した文字が連続した場合、一文字に置き換える。

viコマンド：
i：カーソルの左から入力開始
a：カーソルの右から入力開始
I：カーソルのある行の先頭から入力開始
A：カーソルのある行の末尾から入力開始
o：カーソルのある行の下に空白の行を挿入し、そこから記入を始める。
O：カーソルのある行の上に空白の行を挿入し、そこから記入を始める。

「-R」オプションを指定すると指定したファイルを読み取り専用で開く。

「test.txt」ファイルに含まれる全ての「pingt」という文字列を「hoge」に置換
sed -e s/pingt/hoge/g test.txt
sed s/pingt/hoge/g test.txt

splitコマンドでオプションを指定しなかった場合、1000行ごとに分割される。

splitコマンド：
split [-行数] [入力ファイル名 [出力ファイル名]]
split [-l 行数] [入力ファイル名 [出力ファイル名]]

「/proc」ディレクトリ：
擬似的なファイルシステム
配下にあるのは仮想ファイル

「/proc」ディレクトリはプロセス、ハードウェアおよびシステムリソースなどの情報を扱うための擬似的なファイルシステム。ハードディスク上にファイルは存在せず、システムが起動する際にメモリ上に作成される。

/procディレクトリ配下にある主なファイル
interrupts：IROに関する情報
ioports：I/Oアドレスの情報

新規作成・変更した変数を自動的に環境変数とする。
set -o allexport

シェルのオプション機能はsetコマンドで有効・無効を設定する。

setコマンド：
allexport：新規作成、変更した変数を自動的に環境変数とする。
emacs
ignoreeof：ctrl+Dを押してもログアウトしないようにする。
noclobber：リダイレクト演算子で既存のファイルを上書き不可に設定する。
noglob：パス名展開を無効に設定する。

set -o：シェルの設定状態の確認

viエディタを終了することなくカレントディレクトリにあるファイルを確認：
:!ls

ESP（EFIシステムパーティション）の説明
ブートローダや起動に必要なドライバなどが置かれている
UEFI（Unified Extensible Firmware Interface）を使ったシステムの領域である

ESP（EFIシステムパーティション）はUEFIシステムにおいて、物理的なマシンを起動し、ファームウエアが読み込まれた後、その後の起動シーケンスで最初にアクセスされる領域

シェル変数LPICの値をtestにするコマンド：
LPIC=test

exportは環境変数を設定するコマンド。また、変数の先頭に$を付けない。

Linuxで使用できる変数には、シェル変数と環境変数がある。

・シェル変数
変数を設定したシェル上でのみ有効な変数。シェル変数は以下のようにして作成することができる。
シェル変数名=値

・環境変数
変数を設定したシェル上と、そこから起動されるシェルやアプリケーション、コマンドで有効な変数。これは設定が引き継がれる事を意味する。
環境変数はexportコマンドを使用して作成することができる。
export 環境変数=値　

set：すべてのシェル変数と環境変数を表示
env：すべての環境変数を表示
printenv：一部またはすべての環境変数を表示。

teeコマンド:
標準入力の内容を、Tの字のように、標準出力先（デフォルトはディスプレイ）とファイルの双方に出力するコマンド

dmesgコマンドの標準出力を、ディスプレイに表示すると共に「log.txt」ファイルに保存
dmesg | tee log.txt

grepコマンド：
-c：マッチした行の行数のみ表示
-f：検索パターンをファイルから読み込む 
-i：大文字と小文字を区別しない
-n：先頭に行番号を付けて、マッチした行を表示
-v：マッチしなかった行を表示
-E：拡張正規表現機能を使用（egrepコマンドと同じ）
-F：検索パターンを正規表現ではなく、固定文字列とする（fgrepコマンドと同様）

「test.txt」ファイルから「ping」という文字列を含む行を、行番号をつけて表示
grep -n ping test.txt

ext3ファイルシステムの「/dev/sda1」を「/export」に読み取り専用でマウント
mount -t ext3 -o ro /dev/sda1 /export

ファイルシステムの種類を指定するには「-t」オプションを使用。また、読み取り専用でマウントするには、「-o」オプションを使用してマウントオプションの「ro」を指定。

改行コードと代表的なOSの組み合わせは以下のとおり。
・CRLF（\r\n）：Windows
・LF（\n）：Unix OS（Linux, Mac OS Xなど）
・CR（\r）：古いMacOS（バージョン9まで）

上記の通りWindowsとLinuxでは改行コードが異なるため、テキストファイルの扱いが問題になる場合がある。CRLF（\r\n）からCR（\r）を取り除くことでLinuxの認識できる改行コード：LF（\n）のみにでき、正しく扱うことができるようになる。

リダイレクト「>」によるファイルの上書きを禁止
set -o noclobber
オプションを有効にするには「-o」を指定し、解除するには「+o」を指定

rpmコマンドを使用して、インストールされている全パッケージの検査を行う。
rpm --verify --all
rpm -Va

findコマンドでファイルを検索する際、検索結果を改行区切りで表示
-print

find:指定したディレクトリ以下からファイルやディレクトリを検索するコマンド

 「bu+!」という正規表現は「bu!」、「buu!」、「buuu!」などの文字列にマッチ

「bu?!」は、文字「b」の後に「u」を0回もしくは1回繰り返す。

umountコマンドを発行したが、使用中である「busy」を示すエラーが表示
アンマウントしようとしているファイルシステムに、ユーザーがアクセスしている。
アンマウントしようとしているファイルシステムを、プロセスが使用している。

viエディタのコマンドモードで、カーソルを1文字下へ移動：j

カーソルおよび画面操作に関する主なviコマンド
h：１文字左へ移動
l：１文字右へ移動
k：１文字上へ移動
j：１文字下へ移動
0：行頭へ移動
^：行の先頭の文字へ移動
$：行末へ移動
H：画面の最上行へ移動
L：画面の最下行へ移動
gg：ファイルの先頭へ移動
G：ファイルの最終行へ移動
nG：ファイルのn行目に移動
:n：ファイルのn行目に移動
Ctrl+f：次の画面に移動
Ctrl+b：前の画面の移動

viエディタで現在編集しているファイルを閉じて、別の「newfile」ファイルを開きたい
:e newfile
:e! newfile

「tabfile.txt」ファイルの行頭のタブをスペース1つ分に置き換えて表示
expand -i -t 1 tabfile.txt
※ 行頭のタブの場合は-iをつける。

viエディタでファイルを編集する際、タブの幅を10にしたい。
:set tabstop=10
:set ts=10

CUI環境からGUI環境に移行するコマンド
startx

現在実行中のプロセスから特定の名前を持つプロセスIDを検索したい。
→ pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができる。
pgrep [ オプション ] 検索パターン

スワップ領域の説明
物理メモリが1GBの場合、物理メモリの2倍程度のサイズにする

RAMが2GB以下の場合：RAMの2倍
RAMが2GBを超過～8GB以下の場合：RAMと同量
RAMが8GBを超過～64GB以下の場合：4GBからRAMの0.5倍
RAMが64GBを超過：負荷に依存するが、少なくとも4GB

アクセス権が700の「dir」ディレクトリを作成:mkdir -m 700 dir

mkdir -p ：　中間ディレクトリがない場合に作成
mkdir -m アクセス権: 指定下アクセス権でディレクトリを作成

「test.tar」というアーカイブの内容を表示できるコマンド
tar ft test.tar
tar ftv test.tar
tar ファイル名の指定（ｆ）内容の一覧表示（t）詳細情報の表示（v） ファイル名（test.tar）

tar -c：新しいアーカイブを作成
tar -x：アーカイブからファイルを展開
tar -t：アーカイブの内容を一覧表示
tar -f： アーカイブファイル名を指定
tar -v：処理の詳細情報を表示
tar -z：gzipを通じて圧縮、展開
tar -j：bzip2を通じて圧縮、展開
tar -J：xzを通じて圧縮、展開 

現在マウントされているファイルシステムを確認するコマンド
cat /proc/self/mounts
cat /proc/mounts
mount
cat /etc/mtab

mount [オプション] [デバイス]　[マウント先]

マウントの設定ファイル「/etc/fstab」に設定が存在する場合は、「デバイス」か「マウント先」のどちらか片方だけ指定すれば、もう片方は 「/etc/fstab」が参照され自動的に決定される。

mount デバイス、mount マウント先

mount -t（ファイルシステムの種類を設定）　ext3 -o（マウントオプションの指定） ro（読み取りのみ） /dev/sda2 /mnt/mydata
mount -t ext3 -o ro /dev/sda2 mnt/mydata

ディスプレイマネージャの説明
デスクトップ環境の準備
initやsystemdにより、ディプレイマネージャーサービスが起動される。
ユーザーにGUI環境のログインを提供する。

X window systemの主なプログラムにディスプレイマネージャー、ウィンドウマネージャー、総合デスクトップ環境がある。

リダイレクト演算子の「<<」で終了文字を指定してcatコマンドを実行すると、終了文字を入力するまで標準入力への入力を続けることができます。これを「ヒアドキュメント」 という。

フォアグラウンドで実行中のジョブを一時停止：ctrl+z

ddコマンドのオプションのうち、入力ファイルから出力ファイルへブロックをコピーする回数を指定するオプション
count

testfileという５MBのファイルを作成する場合
dd if=/dev/zero of=testfile bs=1M count=5

D-Bus（Desktop Bus）とは？
Linuxで使われるプロセス間通信機構

umount -at xfs
umountコマンドは、デバイス名かマウントポイントのどちらかを指定すれば良い。

MBR（Master Boot Record）形式（従来のもの）のハードディスクに基本パーティションは最大何個作成できるか？
４つ
fdiskコマンドで拡張等を行う。

GPT(GUID Partition Table)は基本パーティションを128個作成できる。
ギガ　テラ　ペタ　エクサ　ゼタ
gdiskコマンド

taro
^t.*o$、^t..o$
^t（tから始まる）.*（任意の文字）o$（oで終わる）
^t..（任意の２文字）o$

[taro]
t,a,r,oのいずれかにマッチ

SCSIハードディスク
/dev/sda1：１番目のパーティション
/dev/sda：２番目のパーティション

　プログラムをどのユーザーが実行しても、プログラムの所有ユーザー権限で実行されるようにするには、SUIDを設定する。
設定方法　は通常のパーミションに4000を加えた値にする。もしくは所有ユーザーに+sをつける。chmod u+s

○特殊なパーミション
SUID：
SGID：プログラムの所有グループ権限で実行されるようにする。
設定方法は通常のパーミションに2000を加えた値にするか、sの権限をグループに付与する（g+s）
スティッキービット：ディレクトリに設定することで、そのディレクトリに書き込み権限を持つユーザーでも
自分が所有するファイル以外の書き込みができなくなる。
設定方法は通常のパーミションに1000を加えた値にするか、その他のユーザーに+tを加える（o+t）

yum deplist emacs
yumコマンドで「emacs」パッケージが依存しているパッケージの名前を一覧表示

実行プロセスをクリーンアップせずに強制終了
kill -SIGKILL 5884
kill -9 5884

クリーンアップして終了
term -15 5884
term -SIGTERM 5884

特定の名前を持つプロセスIDの検索
pgrep ssh

Linuxをインストールする際、ルートパーティションとは別に別のパーミションを割り当てることができるディレクトリ。
/boot、/tmp

/etc/fstabファイルに記述するマウントオプションで、バイナリの実行を禁止するもの。
noexec

一般ユーザーでマウントを可能にし、本人のみアンマウントできるようにする
user
users：一般ユーザーでマウントを可能にし、誰でもアンマウント可

killコマンドでシグナル（番号）を指定しない場合はデフォルトでTERM（SIGTERM）が使用される。

pgrep -l '(as|ss)h'

ハードリンク先のファイルを編集すると、元のファイルも変更される。

ハードリンクの数、inode番号
ls -il

ディレクトリのハードリンクは作成できない。
異なるファイルシステムにハードリンクは作成できない。

シンボリックリンクの作成
ls -s file1 file2

Linuxをインストールする際、ルートパーティションとは別に
dpkg -C
dpkg --audit