LPICのまとめサイト
LINUXのまとめ資料。

- LPIC -LINUXについてのまとめ
- Level1 Ver4.0 と Level2 Ver4.0のまとめのまとめ


■$ 一般ユーザ、# rootユーザ

■デバイス
/dev ハードをファイルとして仮想認識→ファイル読み書きでデバイスを操作(udevデーモンで自動認識)
/proc カーネル認識しているデバイス
lspci リストpciデバイス
lsusb リストUSBデバイス
lsmod リストモジュール(デバイスドライバ)
modprobe 手動デバイス認識

■起動順
BIOS / UEFI > ブートローダ > カーネル > init / systemd
dmesg ディスクライブメッセージ(システム起動時を表示)
journalctl カーネルバッファ(システム起動)
dmesg | grep enp NIC一覧を出す(enpはethernet pathの略)

■システム起動ログ
/var/log/messages, dmesg, boot.log

■Shutdown
シャット。再起動、時間設定やメッセージ表示だけも
systemctl reboot, power off
shut down reboot, halt, poweroff
ctrl + alt + del -> シャットダウン
ランレベル 0 停止
      1 シングルユーザ(rootだけ利用可)
      2-5 マルチユーザ
      6 再起動
init rootで実行
telinit ランレベルの変更
runlevel ランレベル表示
wall 警告文をマルチユーザに送る
/etc/rc<ランレベル>.d ランレベルでの起動/終了
/etc/init.d/httpd start サービス起動
              stop 停止
/etc/inittab ランレベル等の起動設定府アイル
systemctl start, stop, restart, status, is_active, disable, enable pstfix.service メールサーバのサービス開始
ls /etc/systemd/system/multi-user.target.wants マルチユーザに含まれるinit=サービス

■FHS(ファイルシステム ハイエラルキー スタンダード)
/home 各一般ユーザ(別パーティションがいい)
/var ログやメールスプール(別パーティションがいい)
/usr プログラム・ライブラリ・ドキュメント
/boot ブート用パーティション
スワップ 仮想メモリ(物理メモリと同じ~2倍がいい)
bin, sbin, etc, dev, lib はルート

■LVM(logical volume manager)
物理 > 束ね >切り出し > 論理ボリューム


■ライブラリ
スタティックリンク(コンパイル時に埋込)
ダイナミックリンク(実行時に読み出す、DLL)
(シンボリックリンク)
(ハードリンク)

■Cloud-init
ホスト名、SSH公開鍵、一般ユーザ、インストールするパッケージ をクラウドの各インスタンス用に変えられる
/etc/machine-id 各インスタンスで違うID割り当て

■パッケージ
dpkg Debianのパッケージ扱いの基礎コマンドでredhatのrpmに相当、Cent/Fedoraのunm
apt-get
apt-get update -> apt-get upgrade
apt-cache
apt install
apt remove
apt search
apt autoremove
/etc/apt/sources.list にURLが記載されている

■実行制御
Ctrl + a 行の先頭
Ctrl + E 行のエンド
Ctrl + D 1文字削除/ログアウト
Ctrl + H バックスペース
Ctrl + L クリアしてカレント行
Ctrl + C 中断
Ctrl + S ロック
Ctrl + Q 再開
Ctrl + Z 処理を一時中止・サスペンド
cd ~ ユーザホームへ

■シェル変数
EV_SHELL = baka シェル変数を設定
export EV_SHELL 環境変数に格上げ
echo $EV_SHELL 変数を呼び出しは$を付ける
unset EV_SHELL 削除
env 環境変数の一覧表示
printenv 環境変数の一覧表示
set 一覧表示(シェル変数も)

■環境変数 PATH
echo $PATH 表示
PATH = $PATH:/opt/bin 追加
PATH = /opt/bin 上書き

■コマンド
セミコロン→エラーが出ても次のコマンドを実行
pwd; ls
&&→1つ目のコマンドが正常のときの次のコマンドを実行
ls && pwd
||→エラーのときのみ次のコマンドを実行
cat temp || echo "A file not found"
()→まとめる
(date; pwd; ls) > a.log 日とpwdとリストの結果をa.logに書く(コマンドは新たなシェルで実行するが本体は現在のシェル内で実行する)
ダブルクォーテーション→展開
echo "今日は$DATE。" 今日は8/1。
echo "カレント$(pwd)。" カレント/home。
バックスラッシュ→エスケープ
echo "今日は\DATE。" 今日はDATE
バッククォート→コマンド実行した結果を展開
DATE=date; echo `$DATE` Sun Feb 8 12:42:18 JST 2022
シングルクォート→文字列
echo '$DATE' $DATE

history コマンド履歴
!5 5番目を再実行
man man マニュアルのマニュアルを見る
less 1画面ずつ表示、/検索文字 で下に検索、?検索文字 で上に検索
touch タイムスタンプの更新(ファイルの)
head -n 5 /etc/service ファイルの先頭5行を表示
tail -f /var/log/message ファイル末尾を表示(-f で表示を続ける)
cut(??)
tr(??)
paste(??)
split(??)
sort(??)
uniq(??)
nl 行番号を付ける nl /etc/passwd
grep -i ab s.txt 次にマッチした行を表示するab Ab aB AB、-iは大文字小文字を区別しない
grep -v '^#' s.txt #以外の行を表示
expand タブをスペースに変換
unexpand 空白をタブに変換
wc 行数、単語数、文字数
xavgs 標準入力から受けた文字を引く数にしてcmdに戻す echo * | xargs rm

■オプション
-f →force 上書き
-p →property 同じ属性で
-r → recursive 再帰的(ディレクトリ内も)

■メタキャラクタ
* 0文字以上にヒット(0文字でも5文字でも) ls *.txt で全テキストファイル
? 1文字にヒット a?c でabc, acc等にヒット
[] いずれか z[a-c] でza, zb, zcにヒット
! 否定 a[!bc] でab,acは駄目、aaはヒット
{} or test{1,2} でtest1かtest2

■リダイレクト
> ファイルに上書き ls > a.txt
>> ファイルに追記 ls >> a.txt
< 標準入力切替 grep "a" < in.txt > result.txt in.txtを入力しgrepを掛けresult.txtに結果を書き込む

■ヒアドキュメント <<  bashのヒアドキュメントを活用する - Qiita
次の行から終了文字まで標準入力を続ける、下記であ<改行>いを書き込む
cat > sample.txt << EOS


EOS

■パイプ
tee 十字分岐し書き込む ls | tee a.txt | wc -l リストの内容をa.txtに書き込みをしつつword countにつなげる
| パイプ、コマンドのstd outを次のstd inへ渡す
2> 標準エラー出力を書く
cmd > /dev/null 2>&1 cmd結果をdevnullは特殊なファイルで入力されたデータを通す、そしてエラーと標準出力をリダイレクト
cat file1 file2 > newfile ファイルの内容をStd outへ出すが今回は2つのファイルをnewfileにまとめる

■正規表現
. 1文字ピリオド
^ 行頭
$ 行末
* 繰り返し0回以上
+ 1回以上の繰り返し
? 0回もしくは1回
| 左右のいずれか
\ バックスラッシュでESC
[123] 123のいずれか

■grep
grep オプション パターン 対象ファイル
sed s/検索パターン/置換パターン 各行の最初のみを置換(sコマンド
sed s/検索パターン/置換パターン/g 全部置換(gスイッチ
sed y/ABC/123/ Aを1、Bを2、Cを3 に置換(yコマンド
sed `1, 5d` a.txt > b.txt 1~5削除しつつbを保存、dコマンドで削除

■ハッシュ(ファイルの中身をハッシュ値
sha1sum s.txt
sha256sum s.txt
sha512sum s.txt
md5sum s.txt

■ファイル圧縮
gzip a.txt 圧縮(元ファイル削除)、-rでフォルダ(個々ファイルなくなる)
gzip -c a.txt > a.gz 元を残す圧縮
gunzip 解凍
tar cvf /dev/s0 /home ホームのアーカイブをdev/st0に
tar xvzf a.tar.gz
tar xvf /dev/sdb1 rar/log/sec /dev/sdb1/rar/log/secで取り出し
dd if=/dev/sdb of=/dev/sdc 丸ごとコピーin->of

■パーミッション
- rwx r-x r--
 421(7) 5 4
 所有者 グループ その他、グループは作成時の所有者の所属グループ
- ファイル
d ディレクトリ
| リンク
r 読み w書き x実行

■suid/sgid (set user id/set group id)
通常は実行者権限で実行するがroot所有の実行権のあるユーザでPW変更等が可能
rws --x --x (実行権s) 4711(4000を足す)
rwx r-s r-x グループなら2711

■スティッキービット
所有者とrootユーザのみが名前の変更と削除が可能(実際の権限は関係ない)
d rwx rwx rwt (実行権t) 1000を足す

■変更
chgrp グループ ファイル グループ変更
chmod u+s a.sh / chmod 4755 testdata.txt suid
chmod g+s passwd / chmod 2755 testdata.txt sgid
chmod o+t testdir / chmod 1777 testdir スティッキービット