Linuxシステムの基礎(2)

PHP中文网
PHP中文网オリジナル
2017-06-20 11:19:382406ブラウズ
Linux ディスク管理
I/O ポート: I/O デバイス アドレス;
すべてがファイルです:
open()、read()、write()、close( )
ブロックデバイス: ブロック、アクセスユニット「ブロック」、ディスク
キャラクターデバイス: char、アクセスユニット「キャラクター」、キーボード
デバイスファイル: デバイスドライバープログラムに関連付けられています、対応するハードウェア デバイスと通信できます。 デバイス番号:
メジャー番号: メジャー番号、デバイス タイプを識別します
マイナー番号: マイナー番号、同じタイプを識別します。
ハードディスクインターフェースタイプ:
パラレル:
IDE:133MB/s
SCSI:640MB/s
シリアルポート:
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
rpm: 毎分回転数
/dev/DEV_FILE
ディスクデバイスのデバイスファイル名:
IDE: /dev/hd
SCSI、SATA、SAS、USB: /dev/sd
異なるデバイス: a-z
/dev/sda、/dev/sdb、. ..
同じデバイス上の異なるパーティション: 1、2、...
/dev/sda1、/dev/sda5
メカニカルハードドライブ:
track : トラック
cylinder: シリンダー
secotr: セクター
512bytes
分割方法:
シリンダーごと
0トラック0セクター:512バイト
MBR: マスターブートレコード
446bytes: ブートローダー
64bytes: パーティションテーブル
16bytes: パーティションを識別
2bytes: 55AA
4 プライマリ パーティション
3 つのプライマリ パーティション + 1 つの拡張 (N 個の論理パーティション)
論理パーティション
パーティション管理ツール: fdisk、parted、sfdisk
fdisk: ハードディスクの場合 一般的に言えば、最大 15 個のパーティションを管理
# fdisk -l [-u] [device...]
# fdisk device
サブコマンド: 管理関数
p: print 、既存のパーティションを表示します
n: 新規、作成
d: 削除、削除
w: 書き込み、ディスクに書き込み、終了
q: 終了、更新を放棄して終了
m: ヘルプを表示します
l: パーティション ID をリストします
t: パーティション ID を調整します
カーネルが新しいパーティションを認識したかどうかを確認します:
# cat / proc/partations
ハードディスクパーティションテーブルを再読み取るようにカーネルに通知します:
partx -a /dev/DEVICE
-n M:N
kpartx - /dev/DEVICE
-f:force
CentOS 5:partprobe を使用します
partprobe [/dev/DEVICE]
Linux ファイル システム管理:
Linux ファイル システム: ext2、ext3、ext4、xfs、btrfs、reiserfs、jfs、swap
swap: スワップ パーティション
CD: iso9660
Windows: fat32、ntfs
Unix: FFS、UFS、JFS2
ネットワークファイルシステム: NFS、CIFS
クラスターファイルシステム: GFS2、OCFS2
分散ファイルシステム:
moosefs、mogilefs、GlusterFS、Lustre
「ジャーナル」機能をサポートするかどうかによる:
ジャーナリングファイルシステム: ext3、ext4、xfs、...
非ジャーナリングファイルシステム: ext2、vfat
ファイルシステムのコンポーネント:
カーネル内のモジュール: ext4、xfs、vfat
ユーザー空間管理ツール: mkfs.ext4、mkfs.xfs、mkfs。
Linux 仮想ファイル システム: VFS
ファイル システムの作成:
mkfs コマンド:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
: ラベルを設定します :Mke2fs: EXT シリーズ ファイル システム特殊管理ツール
-T {EXT3 | 4096}
- LABEL'
-j: -t ext3
と同等 mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: データ空間 i ノード内のバイト数ごとに 1 つ作成します; このサイズはブロック サイズより小さくてはなりません。
-N #: データスペース用に作成される inode の数
-O FEATURE[,...]: 指定された機能を有効にする
-O ^FEATURE: 指定された機能をオフにする
mkswap: スワップパーティションを作成する
mkswap [オプション] device
-L 'LABEL'
前提条件: パーティションの ID を 82 に調整します
その他の一般的に使用されるツール:
blkid: ブロックデバイス属性の表示information
blkid [OPTION]...[DEVICE]
-U UUID: 指定されたUUIDに基づいて対応するデバイスを検索します
-L LABEL: 指定されたLABELに基づいて対応するデバイスを検索します
e2label: extシリーズのファイルシステムを管理するLABEL
# e2label DEVICE [LABEL]
tune2fs: extシリーズのファイルシステムの調整可能なパラメータの値をリセットします
-l: 指定されたファイルシステムのスーパーブロック情報を表示します
-L 'LABEL': ボリュームラベルを変更します
#: 管理者用に予約されているスペースの割合を変更します
-j: ext2 を ext3 にアップグレードします
-O: ファイル システム属性を有効または無効にします
-o: ファイル システムのデフォルトのマウント オプションを調整します
-U UUID: UUID 番号を変更します。
dumpe2fs:
-h: スーパーブロック情報の表示
ファイルシステム検出:
fsck: ファイルシステム CheCk
fsck.FS_TYPE
fsck -t FS_TYPE
-a: エラーを自動的に修正します
-r: エラーを対話的に修正します
注意: FS_TYPE はパーティション上の既存のファイルと同じタイプである必要があります
e2fsck: ext シリーズ ファイル専用の検出および修復ツール
-y: 自動応答はYesです。 -f: 強制修復 ;
ファイル システム管理:
追加のファイル システムをルート ファイル システムの既存のディレクトリに関連付け、このディレクトリを他のファイルへのアクセス エントリとして機能させることをマウントと呼びます。
この関連付けを解除するプロセスをアンインストールと呼びます。
デバイスをマウント ポイントに関連付けます: Mount Point
mount
を使用してくださいデバイスまたはマウント ポイントを使用することができます
umount
注: マウント ポイントの下の元のファイルは、マウントが完了すると一時的に非表示になります。
マウント方法: mount DEVICE MOUNT_POINT
mount: /etc/mtab ファイルを表示して、現在のシステムにマウントされているすべてのデバイスを表示します
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device: を指定しますデバイスをマウントするため;
(1) デバイスファイル: 例: /dev/sda5
(2) ボリュームラベル: -L 'LABEL'、例: -L 'MYDATA'
(3) uuid、-u 'uuid':たとえば、-u '0c50523c-43f1-45e7-85c0-a126711d406e(4)擬似ファイルシステム名:Proc、sysfs、devtmpfs、configfs
dir:マウントポイント
事前に存在します。空のディレクトリを使用することをお勧めします。
プロセスで使用されているデバイスはアンマウントできません。
-t vsftype:マウントするデバイス上のファイルを指定します。 システム タイプ
-r: 読み取り専用、読み取り専用マウント;
-n: 読み取りおよび書き込みマウント; /etc/mtab を更新しません
-a: 自動マウントをサポートするすべてのデバイスを自動的にマウントします (/etc/fstab ファイルで定義されており、マウント オプションに「自動マウント」機能があります)
-L 'LABEL': ボリュームラベルはマウントデバイスを指定します。
-U 'UUID': UUID でマウントされるデバイスを指定します。
-B、--bind: ディレクトリをバインドします。別のディレクトリへ;
注: カーネルによって追跡されているすべてのマウントされたデバイスを表示します: cat /proc/mounts
-o オプション: (ファイル システムをマウントするためのオプション)
async: 非同期モード;
sync: 同期モード;
atime/noatime: ディレクトリとファイルを含む;
diratime/noauto: 自動マウントをサポートするかどうか
exec/noexec: ファイル システム上でのアプリケーションの実行をプロセスとしてサポートするかどうか
dev/nodev: このファイル システム上でのデバイス ファイルの使用をサポートするかどうか
suid/nosuid:
remount: ロードの再マウント
ro:
rw:
user/nouser: 一般ユーザーにこのデバイスのマウントを許可するかどうか
acl: このファイルシステムでのacl機能を有効にする
注: 上記のオプションは、
で区切って同時に複数回使用できます。
デフォルトのマウントオプション:defaults
rw、suid、dev、exec、auto、nouser、および async
アンインストールコマンド:
# umount DEVICE
#マウント解除mount_point
指定されたファイル システムにアクセスするプロセスを表示します:
# FUSER -V Mount_point
エリア内でアクセスされているファイル システムのすべてのプロセスを終了します:
# FUSER -km MOUNT_POINT
マウント スワップ パーティション:
有効: swapon
swapon [オプション]...[デバイス]
-a: すべてのスワップ パーティションをアクティブ化します。
-p PRIORITY: 優先順位を指定します。
無効: swapoff [OPTION]... [DEVICE]
メモリ領域の使用状況:
free [OPTION]
- m: in MB
-g: GB単位
ファイルシステムのスペース使用量などの情報を表示するツール:
df:
-h: 人間が読める
[オプション]... DIR
-h: 人間が読める形式
-s: 概要
説明されたコマンド: mount、umount、free、df、du、swapon、swapoff、fuser
の設定ファイルファイルのマウント: /etc/fstab
各行はマウントされるファイルシステムを定義します
マウントされるデバイスまたは疑似ファイルシステム
マウントをクリックします
ファイルシステムタイプ
マウントオプション
ダンプ頻度
セルフチェックシーケンス
マウントされるデバイスまたは疑似ファイルシステム:
デバイスファイル、LABEL(LABEL="" : バックアップなし1: ダンプ間隔) day2: 1 日おきにダンプします
セルフチェックの順序:
0: セルフチェックなし
1: 通常、rootfs のみが 1 を使用します。
...
ファイル システムに関するその他の概念:
Inode: インデックス ノード、インデックス ノード
アドレス ポインタ:
ダイレクトポインタ:
間接ポインタ:
三次ポインタ:
inode ビットマップ: 各 i ノードがアイドル状態かどうかを識別するステータス情報
リンク ファイル:
ハードリンク:
ディレクトリに作成することはできません;
はパーティションをまたがって作成することはできません; ファイルへのハード リンクを作成すると、inode は新しい参照パスを作成します。参照カウント
シンボリック リンク:
はディレクトリに作成でき、
は別のファイルのパスを指します。ターゲットファイルの inode の参照数を増やしたり減らしたりしません
ln [-sv] SRC DEST
-s: シンボリックリンク
-v: 冗長
ファイルファイルの管理操作 影響:
ファイルの削除:
ファイルのコピー:
ファイルの移動:

1. ブロック サイズ 2048 の 20G ファイル システムを作成します。 ext4、およびボリューム ラベル。TEST では、起動後にこのパーティションが /testing ディレクトリに自動的にマウントされる必要があり、デフォルトで

(1) 20G パーティションを作成します。 ) 形式:
mke2fs - t ext4 -b 2048 -L 'TEST' /dev/DEVICE
(3) /etc/fstab ファイルを編集
LABEL='TEST'
/testing ext4
defaults, acl 0 03. 次の機能を完了するスクリプトを作成します。
(1) 現在のシステムによって認識されているすべてのディスクデバイスをリストします。 2) ディスクの数が 1 の場合、そのスペース使用量情報を表示します。それ以外の場合は、最後のディスクのスペース使用量情報を表示します。
fdisk -l /dev/[hs] da
else
fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh] ]d[a-]" | tail - 1 |cut -d' ' -f2)
fi
bash スクリプトのユーザーインタラクション:
read [オプション]... [名前。 ..]
- p 'PROMPT'
-t TIMEOUT
bash -n /path/to/some_script
スクリプト内の構文エラーを検出します
バッシュ-x /path/to/ some_script
デバッグ実行
例:
#!/bin/bash
# バージョン: 0.0.1
# : マエドゥ
# 説明: 読み取りテスト
read -p "ディスク特殊ファイルを入力してください: " diskfile
[ -z "$diskfile" ] && echo "Fool" && exit 1
if fdisk -l "^Disk $diskfile" &> then
fdisk -l $diskfile
else
echo "間違ったディスク スペシャル ファイルです。"
ex it 2
fi
RAID:
安価なディスクの冗長アレイ
: 安価なディスク RAID の冗長アレイのケース
IO 機能の向上:
並列ディスクの読み取りと書き込み
レベルを達成するためのディスク冗長性: 一緒に編成された複数のディスクは異なる動作をします。
RAIDの実装方法:
外部ディスクアレイ: 拡張カードによる適応機能を提供
内部RAID: マザーボード統合RAIDコントローラー
ソフトウェアRAID:
レベル: レベル
RAID-0: 0、ストライプボリューム、ストリップ;
RAID-1: 1、ミラーボリューム、ミラー;
RAID-2
...
RAID-5 :
RAID-6
RAID10
RAID01
RAID-0:
書き込みパフォーマンスの向上。
利用可能なスペース: N*min(S1,S2 ,...)
フォールトトレランスなし
ディスクの最小数: 2、2+
RAID-1:
読み取りパフォーマンスが向上、書き込みパフォーマンスがわずかに低下します。
利用可能なスペース: 1*分(S1,S2,...)
冗長性あり
最小ディスク数: 2、2+
RAID-4:
1101、0110、1011
RAID-5:
読み取りおよび書き込みパフォーマンスの向上
利用可能なスペース: (N-1)*min(S1,S2 ,...)
フォールトトレラント: 1 ディスク
最小ディスク数: 3、3+
RAID-6:
読み取りおよび書き込みパフォーマンスの向上
利用可能なスペース: (N - 2)*min(s1、s2、...)
fault耐性:2つのディスクdisks数:4、4+
mixedタイプ
RAID-10:
読み取りおよび書き込みパフォーマンスの向上
利用可能なスペース: N*min(S1,S2,...)/2
フォールトトレランス: 各ミラーセットは 1 つだけ持つことができます最大でも破損した部分
ディスクの最小数: 4、4+
RAID-01:
RAID-50、RAID7
JBOD: 単なるディスクの束
機能: 複数のディスクのスペースを 1 つの大きな連続スペースに結合します
利用可能なスペース: sum(S1,S2,...)
共通レベル: RAID-0、RAID- 1、RAID-5、RAID-10、RAID-50、JBOD
実装:
ハードウェア実装
ソフトウェア実装
CentOS 6 上の RAID:
カーネル内の md (マルチデバイス) と組み合わせる
mdadm: パターン化されたツール
コマンド構文形式: mdadm [mode]
サポートされている RAID レベル: LINEAR、RAID0、RAID1、RAID4、RAID5、RAID6、RAID10
作成: -C
克服: - a: 監視: - F
管理: -F, -R, -a
& LT; Raiddevice & GT ;: /DEV /MD#& & LT ;component-devices>: 任意のブロックデバイス
-C: 作成モード
-n #: # 個のブロックデバイスを使用してこの RAID を作成します。
-l #: 作成する RAID のレベルを指定します。
-a {yes|no}: ターゲット RAID を自動的に作成しますdevice デバイス ファイル;
-c CHUNK_SIZE: ブロック サイズを指定します。
#: 空きディスクの数を指定します。例: 10G の空き容量を持つ RAID5 を作成します。
-D: RAID の詳細情報を表示します。
mdadm -D /dev/md#
管理モード:
-f: 指定されたディスクを破損しているとマークします。
-a: ディスクを追加します
-r: ディスクを削除します
md のステータスを観察します:
cat /proc/mdstat
MDデバイスを停止します:
mdadm -S /dev/md#
watch コマンド:
-n #: 秒単位の更新間隔
watch -n# 'COMMAND'
LVM2:
LVM: 論理ボリュームマネージャー、バージョン: 2
dm: デバイスマッパー、1 つ以上の基礎となるブロックデバイスを論理デバイスに編成するモジュール
/ dev /dm-#
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/ root
pv管理ツール:
pvs: pv概要情報表示
pvdisplay: pv詳細情報表示
pvcreate /dev/DEVICE: pv作成
vg管理ツール:
vgs
vgdisplay
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath... ]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
最初に pvmove を実行します
vgremove
lv 管理ツール:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvremove /dev/VG_NAME/LV_NAME
論理ボリュームを拡張します:
# lvextend -L [+]# [mMgGtT] /dev/VG_NAME/LV_NAME
#size2fs /dev/VG_NAME/LV_NAME
論理ボリュームを削減します:
# umount /dev/VG_NAME/LV_NAME
#e2fsck - f /dev/VG_NAME/LV_NAME
#size2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
# mount
Snapshot: snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_nameoriginal_lv_name
ファイルシステムのマウント使用法:
光ディスクデバイスをマウントします。
ディスクデバイスファイル:
IDE: /dev/hdc
SATA: /dev/sr0
シンボリックリンクファイル:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
umount /dev /cdrom
ddコマンド: ファイルの変換とコピー
使用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: ブロックサイズ、コピーユニットサイズ;
count=#: コピーするBSの数:
dd if=/dev/sda of=/dev/sdb
MBR をバックアップします
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
MBR のブートローダーを破棄します:
dd if=/dev /zero of=/dev/sda bs=256 count=1
2 つの特別なデバイス:
/dev/null: データ ブラック ホール;
/dev/zero: ゼロ吐き出しマシン。
btrfs ファイルシステム:
テクニカルプレビュー
Btrfs (B-tree、Butter FS、Better FS)、GPL、Oracle 20、 07、カウ
ext3/ext4、xfs
コア機能:
複数の物理ボリュームのサポート: btrfs は複数の基盤となる物理ボリュームで構成でき、オンラインでの「追加」、「削除」、「変更」を使用できます。 ";
コピーオンライト更新メカニズム (CoW): 「インプレース」更新の代わりにポインターをコピー、更新、置換します;
データとメタデータのチェック コード: checksum
サブボリューム: sub_volume
スナップショット: スナップショットをサポートするスナップショット:
ファイルシステムの作成:
mkfs.btrfs
-L 'LABEL'
-d :raid0、raid1、raid5、raid6、raid10、シングル
-m <プロファイル>:raid0、raid1、raid5、raid6、raid10、シングル、dup
-O < feature>
-O list-all: サポートされているすべての機能をリストします
プロパティ ビュー:
btrfs filesystem show
マウント ファイル システム:
マウント -t btrfs /dev/sdb MOUNT_POINT
透過的な圧縮メカニズム:
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
サブコマンド: ファイルシステム、デバイス、バランス、サブボリューム
圧縮、解凍、およびアーカイブツール
圧縮/解凍: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz : . xz
zip/unzip
tar、cpio
1、gzip/gunzip
gzip [オプション]... ファイル...
-d:解凍、gunzip と同等
-c: 結果を標準出力に出力します。
-#: 1-9、圧縮率を指定します。
zcat: 明示的に展開されません。前提条件内のコンテンツ
2, bzip2/bunzip2/bzcat
bzip2 [オプション]... ファイル...
-k: 元のファイルを保持します。
-d: 解凍します
-#: 1-9、圧縮率、デフォルトは 6;
3、xz/unxz/xzcat
bzip2 [オプション]... ファイル ...
-k: 元のファイルを保持します。
-d: 解凍します
-#: 1-9、圧縮率、デフォルトは 6;
xzcat: 明示的に展開せずにテキスト ファイルの内容を表示します。
tar [オプション]...
(1)アーカイブ
tar -c -f /PATH/TO/SOMEFILE.tar ファイル...
tar -cf /PATH/TO/SOMEFILE.tar ファイル ..
を作成します。 (2) アーカイブ内のファイル一覧を表示
tar -t -f /PATH/TO/SOMEFILE.tar
(3) アーカイブを展開
tar -x -f /PATH /TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
圧縮ツールと組み合わせる: アーカイブと圧縮
-j: bzip2、-z: gzip、-J: xz
bash スクリプト:
if ステートメント、bash -n、bash -x
CON地区:
bash コマンド:
コマンドの実行ステータスの結果を使用します。
成功: true
失敗: flase
意味: 使用するコマンドによって異なります;
単一分岐:
if CONDITION; then
if-true
条件があれば
if-true
else
if-false
fi
複数の分岐:
if CONDITION1; then
if-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
...
esle
all -false
fi
初めて「true」条件に遭遇したとき、その分岐を実行して終了します。
例: ユーザーはファイルの種類を決定するためのスクリプトを入力します。 !/bin/bash
#
read -p "ファイルパスを入力してください: " filename
if [ -z "$filename " ] then
echo "使用法: ファイル パスを入力します。"
exit 2
fi
if [ ! -e $filename ]; then
echo "そのようなファイルはありません。"
exit 3
fi
if [ -f $filename ]; then
echo "共通ファイル"
elif [ -d $filename ]; then
echo "ディレクトリ。"
elif [ -L $filename ]; then
else
echo "その他の型"
fi
注: if ステートメントはネストできます
ループ: for、while 、 until
ループ本体: 実行されるコードは n 回実行されます。
終了条件:
for リスト内の変数名。
ループ本体
完了
実行メカニズム:
ループ本体は、各割り当ての後に 1 回ずつ実行されます。要素がなくなるとサイクルが終了します。例: 10 人のユーザーを追加します。user1-user10 はユーザー名と同じです。 「root のみ。」
fi
for i in {1..10}; if id user$i &>
echo "user$i が存在します。"
else
useradd user $i
if [ $? -eq 0 ];
エコー「ユーザー」 $ i "| passwd -stdin user $ i && gt; /dev /null
echo"ユーザー$を追加しました。 リスト生成方法:
(1) リストを直接与える;
(2) 整数リスト:
(a) {start..end}
(b) $(seq) [start [step]] end)
(3) リストを返すコマンド
(4 ) glob
(b) 変数参照; $@, $*
例: 特定のパスにあるすべてのファイルの種類を決定する
#!/bin/bash
#
for fileで$(ls /var); do
if [ -f /var/$file ]; then
echo "共通ファイル"
elif [ -L /var/$file ];
echo "シンボリックファイル。"
elif [ -d /var/$file ]; then
echo "ディレクトリ。"
else
echo "その他のタイプ。"
#!/bin/bash
#
declare -i estab=0
declare -i listen=0
declare -i other=0
$( netstat -tan | grep "^tcp>" | awk '{print $NF}'); do
if [ "$state" == 'ESTABLISHED' ] then
let estab++
elif [ "$state" == 'LISTEN' ]; then
let listen++
else
let other++
fi
完了
echo "確立: $estab"
echo "LISTEN: $listen"
echo "不明: $other"
/etc/rc.d/rc3.dディレクトリそれぞれ K と S で始まるファイルが複数あります。各ファイルを個別に読み取ります。K で始まるファイルの出力はファイル名に stop を加えたもので、S で始まるファイルの出力はファイル名に start を加えたものです。
「K34filename stop」
「S66filename start」
Linux パッケージ管理:
API: アプリケーション プログラムインターフェイス
POSIX: ポータブルOS
プログラムのソースコード --> 前処理 --> アセンブリ --> リンク
共有コンパイル: .so
ABI: アプリケーション バイナリ インターフェイス
Windows は Linux と互換性がありません
ライブラリ レベルの仮想化:
Linux: WINE
Windows: Cywin
システム レベルの開発
C
C++
アプリケーションレベルの開発
java
Python
php
perl
ruby
バイナリアプリケーション用 コンポーネント:
バイナリ、ライブラリ、設定ファイル、ヘルプファイル
パッケージマネージャー:
debian: deb、dpt
redhat: rpm、rpm
rpm: Redhat パッケージマネージャー
RPMはパッケージマネージャーです
Gentoo
Archlinux
ソースコード: name -VERSION.tar.gz
バージョン: メジャー.マイナー.リリース
rpm パッケージの命名方法:
name-VERSION-release.arch.rpm
VERSION: Major.minor.release
release.arch:
release: release.OS
zlib-1.2.7-13.el7.i686.rpm
共通アーチ:
x86: i386、i486、i586、i686
x86_64: x64、x86_64 、amd64
powerpc: ppc
プラットフォームに依存しない: noarch
testapp: 解凍
testapp-VERSION-ARCH.rpm: メインパッケージ
testapp-devel-VERSION-ARCH.rpm: サブパッケージ
testapp-testing-VERSION-ARHC.rpm
パッケージ間には依存関係があります
フロントエンド ツール;
zypper: Suse 上の rpm フロントエンド管理ツール
dnf: Fedora 22+ rpm パッケージ マネージャー フロントエンド管理ツール;
バイナリプログラムが依存するライブラリファイルを表示します:
ldd /PATH/TO/BINARY_FILE
このマシンにロードされたライブラリファイルを管理および表示します:
ldconfig
/sbin/ldconfig -p: このマシン上で使用可能なすべてのキャッシュ ファイルを表示します。 ライブラリ ファイル名とファイル パスのマッピング関係。
設定ファイルは次のとおりです: /etc/ld.so.conf、/etc/ld .so.conf.d/*.conf
キャッシュファイル: /etc/ld.so.cache
パッケージ管理:
機能: コンパイルされたアプリケーションの各コンポーネントファイルを 1 つにパッケージ化します。または複数のパッケージ ファイル。インストール、アンインストール、クエリ、アップグレード、検証などのパッケージ管理操作を迅速かつ簡単に実装できます。
1. プログラム コンポーネント リスト (各パッケージに固有)リスト
インストールまたはアンインストール中に実行
2、データベース (パブリック)
パッケージ名とバージョン
関数の説明
ファイルパスとチェックインストール情報によって生成された各ファイルのコード。Packageマネージャーを使用する方法:rpmを使用:yum、dnfの方法パッケージの取得:
(1) システムリリース CD または公式サーバー
CentOS イメージ:
(2)プロジェクト公式サイト
( 3) 第三者機関:
Fedora-EPEL
検索エンジン:
(4) 自分で作ってみましょう
推奨: 合法性を確認してください
ソースの正当性;
CentOS システム上の rpm コマンド管理パッケージ:
問い合わせ、確認、データベースのメンテナンス
インストール:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v: 冗長
-vv:
-h: パッケージ管理の実行の進行状況を # で表示します。各 # は 2% の進行状況を表します
[install-options]
--test : インストールをテストしますが、実際にはインストール プロセスを実行しません
--replacepkgs: 再インストール;ソースの正当性をチェックしません
--nodigest: パッケージの整合性をチェックしません。
--noscipts: パッケージスクリプトフラグメントを実行しません。
%pre: インストール前スクリプト。 post : インストール後のスクリプト; --nopost
%preun: アンインストール前のスクリプト; --nopostun
アップグレード:
rpm { -U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage:古いバージョンのプログラムがインストールされている場合は「アップグレード」、古いバージョンのパッケージが存在しない場合は「インストール」、古いバージョンのパッケージがインストールされている場合は「アップグレード」。存在しないため、アップグレード操作は実行されません。 --force: 強制アップグレード
注: (1) カーネルをアップグレードしないでください。Linux は複数のカーネル バージョンの共存をサポートしているため、新しいバージョンのカーネルを直接インストールすることをお勧めします。
(2) インストール後に元のパッケージの設定ファイルが変更されている場合、レベルが長い場合、新しいバージョンで提供される同じ設定ファイルは古いバージョンの設定ファイルを直接上書きするのではなく、古いバージョンの設定ファイルを上書きします。新しいバージョンは名前変更後も保持されます (FILENAME.rpmnew)。
[select-options]
-a: すべてのパッケージ
-f: 指定されたビュー ファイルを生成するためにインストールされているパッケージはどれですか?
-p /PATH/TO/PACKAGE_FILE:まだインストールされていないパッケージ ファイル
--whatprovides CAPABILITY: どのパッケージが提供されているかをクエリします。
--whatrequires CAPABILITY: 指定された CAPABILITY が依存しているパッケージをクエリします。
[query-options]
--changelog: rpm パッケージの変更ログをクエリ
-c: プログラムの設定ファイルをクエリ
-d: ドキュメントをクエリプログラム
-i: 情報
-l: 指定されたパッケージのインストール後に生成されたすべてのファイルを表示します
--scripts: パッケージに付属するスクリプト スニペット
- R: 指定されたパッケージが依存する CAPABILITY をクエリします。
--provides: 指定されたパッケージによって提供される CAPABILITY をリストします。 qc パッケージ、-ql パッケージ、-qd パッケージ
-qpi パッケージファイル、-qpl パッケージファイル、...
-qa
アンインストール:
rpm {- e|-- Erase} [--allmatches] [--nodeps] [--noscripts]
[--nottriggers] [--test] PACKAGE_NAME ..
検証:
rpm {-V| --verify} [select-options] [verify-options]
S ファイル サイズが異なります
M モードが異なります (権限とファイル タイプを含む)
5 ダイジェスト (以前の MD5 sum) が異なります
D デバイスのメジャー/マイナー番号の不一致
L readLink(2) パスの不一致
U ユーザーの所有権が異なります
G グループの所有権が異なります
T mTime が異なります
P 機能が異なります
パッケージソースの合法性検証と整合性検証:
整合性検証: 6
ソースの合法性検証: RSA
公開鍵暗号化:
対称暗号化: 暗号化と復号化に同じ鍵を使用します。
非対称暗号化: 鍵はペアであり、
公開鍵: 公開鍵、誰にでも公開されます
秘密鍵: 秘密鍵、公開できません
必要な公開鍵をインポートします:
rpm --import /PATH/FROM/GPG-PUBKEY -FILE
CentOS 7配布ディスクが提供するキーファイル: RPM-GPG-KEY-CentOS-7
データベース再構築:
rpm {--initdb|--rebuilddb }
initdb:Initialize
Ifデータベースが事前に存在しない場合は、作成します。それ以外の場合は、操作を実行しません。
rebuilddb: 現在存在するかどうかに関係なく、データベースを直接再構築します
復習: Linux パッケージ管理、rpm パッケージ マネージャーの実装
プログラム管理を実装する rpm コマンド:
インストール: -ivh、--nodeps、--replacepkgs
アンインストール: -e、- -nodeps
アップグレード: -Uvh、-Fvh、--nodeps、--oldpackage
クエリ: -q、-qa、-qf、-qi、-qd、-qc、-q --scripts 、-q --changlog、-q --provides、-q --requires
検証: -V
GPG キーのインポート: --import、-K、--nodigest、--nosignature
データベース再構築: --initdb、--rebuilddb
Linux パッケージ管理 (2)
CentOS: yum、dnf
URL: ftp://172 .16.0.1 /pub/
yum:黄色の犬、yellowdogアップデートモディファイアーリポジトリ:yumrepo
norは多くのrpmパッケージとパッケージに関連するメタデータファイル(特定に配置されていますディレクトリ: repodata);
ファイルサーバー:
ftp://
http://
nfs: //
file:///
yumクライアント:
設定ファイル:
/etc/yum.conf: すべてのリポジトリに共通の設定を提供します
/ etc/yum.repos.d/*.repo: の設定を提供しますウェアハウス ポイント
ウェアハウス ポイントの定義:
[repositoryID]
name=このリポジトリの名前
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1 |0}
フェイルオーバー方法={ラウンドロビン|優先度}
デフォルトは: ラウンドロビン、つまりランダム選択です。
cost=
デフォルトは1000です
Classroom yumソース: http://172.16 .0.1 /cobbler/ks_mirror/CentOS-6.6-x86_64/
CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
yum コマンドの使用法:
yum [オプション] [コマンド] [パッケージ ...]
コマンドは次のいずれかです:
* install package1 [package2] [...]
* update [package1] [package2] [. ..]
* [package1] [package2] に更新 [...]
* check-update
* [package1] [package2] にアップグレード [...]
* [package1] にアップグレード[package2] [...]
* 配布同期 [package1] [package2] [...]
* 削除 |消去 package1 [package2] [...]
* list [...]
* info [...]
* 提供 | whatprovides 機能 1 [機能 2] [...]
* クリーン [ パッケージ | 機能 2]メタデータ |キャッシュの期限切れ | rpmdb |プラグイン | all ]
* makecache
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
* search string1 [string2] [...]
* shell [filename]
*solvedep dep1 [dep2] [. ..]
* localinstall rpmfile1 [rpmfile2] [...]
(レガシーな理由のみで維持 - インストールを使用)
* localupdate rpmfile1 [rpmfile2] [...]
(レガシーな理由でのみ維持) - use update)
* 再インストール package1 [package2] [...]
* ダウングレード package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled |無効]
* バージョン [ すべて |インストールされています |利用可能 |グループ-* |グループなし* |グループリスト | groupinfo ]
* 履歴 [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* check
* help [command]
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:
list
# おいしいリスト [すべて | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [ ...]
reinstall package1 [package2] [...] (再インストール)
升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
检查可用升级:
check-update
卸売程序包:
削除 | Erase package1 [package2] [...]
查看程序包情報:
info [...]
查看指定的特性(可看或文件)是哪个程序包所提供:
が提供する | whatprovides 機能 1 [機能 2] [...]
清理本地缓存:
clean [ パッケージ |メタデータ |キャッシュの期限切れ | rpmdb |プラグイン | all ]
构建缓存:
makecache
搜検索:
検索 string1 [string2] [...]
に指定された关键字搜索程序包名及概要情報;
指定したパッケージが依存する機能を表示します:
deplist package1 [package2] [...]
yum トランザクション履歴を表示します:
history [info|list|packages-list|packages- info|summary|addon-info|redo|undo|rollback|new|sync|stats]
ローカル パッケージのインストールとアップグレード:
* localinstall rpmfile1 [rpmfile2] [...]
(維持レガシーの理由のみ - インストールを使用)
* LocalUpdate RPMFile1 [RPMFILE2] [...]
(レガシーの理由のみ - アップデートを使用) up1 [Group2] [...]
* groupupdate group1 [group2] [ ...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
ローカル yum リポジトリとしての CD:
(1) CD を /media/cdrom
などのディレクトリにマウントします
# mount -r -t iso9660 / dev/cdrom /media/cdrom
(2) 設定ファイルの作成
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum コマンドラインオプション:
--nogpgcheck: gpg チェックを無効にします。
-q: サイレントモード
- -disablerepo=repoidglob: ここで指定されたリポジトリを一時的に無効にします。
--enablerepo=repoidglob: ここで指定したリポジトリを一時的に有効化します。
--noplugins: すべてのプラグインを無効化します
設定ファイルで使用可能な変数:
$リリースバー:現在の OS リリース バージョンのメジャー バージョン番号
$basearch: 基本プラットフォーム; /os
yum リポジトリの作成:
createrepo [options]
パッケージのコンパイルとインストール:
testapp- VERSION-release.src.rpm --> 、 rpmbuild コマンドを使用して rpm パッケージをバイナリ形式で作成し、それをインストールします
ソースコード --> コンパイル (gcc) --> --> 実行
ソースコード構成形式:
複数のファイル: ファイル内のコード間にファイル間の依存関係が存在する可能性があります
C、C++: make (configure --> Makefile.in --> makefile)
java: maven
C コードをコンパイルしてインストールする 3 つのステップ:
./configure:
(1) オプションを介してパラメーターを渡し、有効な機能、インストール パスなどを指定します。実行時に、ユーザーの仕様と Makefile.in ファイルを参照して Makefile が生成されます。
(2) 依存関係を確認します。外部環境へ;
make:
Makefile ファイルに基づいてアプリケーションをビルドします。
make install
開発ツール:
autoconf: 構成スクリプトを生成する
automake: Makefile.inを生成する
推奨事項: インストール前にインストールと README を確認してください
オープンソース プログラムのソース コードを入手します:
公式の自作サイト:
apache.org (ASF)
mariadb.org
...
コードホスティング:
SourceForge
Github.com
code.google.com
c/c++: gcc (GNU C Complier)
Cソースをコンパイルするコード:
前提条件: 開発ツールと開発環境を提供する
開発ツール: make、gcc など
開発環境: 開発ライブラリ、ヘッダーファイル
glibc: 標準ライブラリ
「パッケージ」グループ経由で開発コンポーネントを提供します
CentOS 6: 「開発ツール」、「サーバー プラットフォーム開発」、
ステップ 1: スクリプトを構成します
オプション: インストール場所を指定します、有効な機能を指定します
--help: サポートされているオプションを取得します
オプション カテゴリ:
インストール パス設定:
--prefix=/PATH/TO/SOMEWHERE: デフォルトを指定しますインストール場所;デフォルトは /usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE: 設定ファイルのインストール場所;
システムタイプ:
オプション機能: オプション機能
--disable-FEATURE
--enable-FEATURE[=ARG]
オプションのパッケージ: オプションのパッケージ
--with-PACKAGE[= ARG]
--without-PACKAGE
2 番目のステップ: make
ステップ 3: make install
インストール後の設定:
(1)バイナリ プログラム ディレクトリを PATH にポートします環境変数;
ファイル /etc/profile.d/NAME.sh
を編集します
export PATH=/PATH/TO/BIN:$PATH
(2) ライブラリ ファイルのパスをエクスポートします
/etc/ld.so.conf.d/NAME.conf を編集します
新しいライブラリ ファイルが配置されているディレクトリをこのファイルに追加します
システムにキャッシュを再生成させます。
ldconfig [-v]
(3) ヘッダーファイルのエクスポート
リンクに基づいて実装:
ln -sv
(4) ヘルプマニュアルのエクスポート
/etc/man.config ファイルを編集します
MANPATH を追加します
Linux ネットワーク属性管理
LAN: イーサネット、トークンリング
イーサネット: CSMA/CD
ドメイン
ブロードキャスト ドメイン
インターネット プロトコル
ルーティングプロトコル
ルーテッドプロトコル
OSI、TCP/IP
tcp/ip層:
アプリケーション層
トランスポート層
インターネット層
データリンク層
物理層
トランスポート層プロトコル:
tcp、udp、sctp
ネットワーク層プロトコル:
ip
ipプロトコル:
IPv4アドレス分類:
ドット付き10進数: 0-255
0000 0000 - 1111 1111
0.0.0.0-255.255.255.255
カテゴリ A:
0 000 0000 - 0 111 1111: 1-127
ネットワーク数: 126、127
各ネットワークのホスト数: 2^24-2
デフォルトのサブネットマスク: 255.0。0.0
プライベートネットワークアドレス: 10.0.0.0/8
カテゴリB:
10 00 0000 - 10 11 111 1:128-191
番号ネットワークの:2^14
各ネットワーク内のホストの数:2^16-2
defaultSubnetMask:255.255.0.0
プライベートネットワークアドレス:172.16.0.0/16-172.31.0.0 /16
カテゴリ C:
110 0 0000 - 110 1 1111: 192-223
ネットワーク数: 2^21
番号各ネットワーク内のホストの数: 2^ 8-2
デフォルトのサブネットマスク: 255.255.255.0
プライベートネットワークアドレス: 192.168.0.0/24-192.168.255.0/24
クラス D : マルチキャスト
1110 0000 - 1110 1111 : 224-239
クラス E:
240-255
サブネットマスク:
172 .16.100.10 0/255.255.0.0、172.17.1.1
クロスネットワーク通信: ルーティング
ホストルーティング
ネットワークルーティング
デフォルトルーティング
Linuxホストをネットワークに接続します:
IP/マスク
ルート: デフォルトゲートウェイ
DNSサーバー
プライマリDNSサーバー
セカンダリDNSサーバー
サードDNSサーバー
設定方法:
静的仕様:
ifcfg: ifconfig、route、netstat
ip: オブジェクト {link、addr、route}、ss、tc
config file
system-config-network-tui (セットアップ)
CentOS 7:
nmcli、nmtui
動的割り当て:
DHCP:動的ホスト構成プロトコル
ネットワークインターフェースを構成します:
インターフェースの命名方法:
CentOS 6:
イーサネット: eth[0,1,2,...]
ppp: ppp[0,1,2,...]
ifconfigコマンド
fconfig[interface]
#ifconfig-a
#ifconfig iface [up | down] #ifconfig iface ip /mask [up]
iface ip netmask iface ip netmask iface ip netmask mask
ルートコマンド
ルート管理コマンド
もしターゲット: 192.168.1.3 ゲートウェイ: 172.16.0.1
~]# Route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
ターゲット: 192.168.0.0 ゲートウェイ: 172.16
0/24 gw 1​​72.16.0.1 dev eth0
デフォルトルート、ゲートウェイ: 172.16.0.1
~]# Route add -net 0.0.0.0 netmask 0.0.0.0 gw 1​​72.16.0.1
~]# Route add default gw 1​​72.16.0.1
R : 削除: Route Del
route Del [-st | -HOST]ターゲット[GW GW] [NetMask NM] [[dev] if]
ターゲット:192.168.1.3ゲートメント:172.16.0.1.〜]#ルートdel -Host192.168.1.3
宛先: 192.168.0.0 ゲートウェイ: 172.16.0.1
~]# Route del -net 192.168.0.0 netmask 255.255.255.0器 服务DNSサーバーは
を指定します
/ETC/Resolv.conf
nnamerverdns_server_ip1
nameserverdns_server_ip2
dnamerverdns_ip3
:: fqdn-&gt;️
netstat コマンド:
netstat - ネットワーク接続、ルーティング テーブル、インターフェイス統計、マスカレード接続、およびマルチキャスト メンバーを出力します |-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|- p]
-t: TCP プロトコル関連
-u: udpプロトコル関連
-w: rawソケット関連
-l: 監視中 リッスンstatus
-a: すべてのステータス n
-N: IP とポートを数値で表示
-E: 拡張形式
-P: 関連するプロセスと PID を表示
一般的な組み合わせ:
-- Tan、-uan、-tnl、-unl
表示ルーティング テーブル:
netstat {--route|-r} [--numeric|-n]
-r:カーネルルーティングテーブルを表示
ルーティングテーブル
-n:数値形式 - 拡張| -e] [ - プログラム| -p] [ - numeric | -n]
概要: ifcfg ファミリのコマンド設定
ifconfig/route/netstat
ifup/ifdown
Linux ネットワーク設定 (2)
設定 Linux ネットワーク プロパティ: ip コマンド
ip コマンド:
ip - ルーティング、デバイス、ポリシールーティング、およびトンネルを表示/操作します
ip [ OPTIONS ] OBJECT { COMMAND | help }
オブジェクト:= {リンク | アドレス | ルート }
リンク オブジェクト:
ip リンク - ネットワークデバイス構成
dev IFACE
setテーブルのプロパティ:
アップand down : 指定したインターフェースをアクティブ化または無効化します
show
[dev IFACE]: インターフェースを指定します
[up]: アクティブ化されたインターフェースのみを表示します
- プロトコルアドレス管理
ip addr { add | del } IFADDR dev STRING
[label LABEL]: アドレスを追加するときにネットワークカードのエイリアスを指定します
[scope {global|link|host] }]: ロールを指定します。
グローバル: グローバルで使用可能;
ホスト: ローカルで使用可能;
[ブロードキャストアドレス]: ブロードキャストアドレスを指定します
IPアドレス表示 - プロトコルアドレスを確認します
[dev DEVICE]
[label PATTERN]
[prim]二次および二次]
IPアドレスフラッシュ - プロトコルアドレスをフラッシュ
showと同じ形式を使用
IPルート - ルーティングテーブル管理
IPルート追加
追加ルート: ip Route add TARGET via GW dev IFACE SOURCE_IP
TARGET:
ホストルート: IP
ネットワークルート: NETWORK/MASK
ゲートウェイの追加: ip Route addデフォルト経由GW dev IF ACE
ipルート削除
ルート削除: ipルートデルターゲット
ipルートショー
ipルートフラッシュ
[開発IFACE]
[via PREFIX]
ssコマンド:
フォーマット: ss [OPTION]...[FILTER]
オプション:
-t: tcpプロトコル関連
-u: UDP プロトコル関連
-w: Naked ソケット関連
-x: Unix sock 関連
-l: リッスン状態接続
-a: すべて
- n : 数値形式
-p: 関連プログラムとPID
-e: 拡張情報
-m: メモリ使用量
-o: タイマー情報
Fフィルタ: = [ state TCP-STATE ] [ EXPRESSION ]
TCP の一般的な状態:
tcp 有限状態マシン:
LISTEN: リスニング
ESTABLISHED: 接続が確立されました
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
式:
dport =
sport =
例: '( dport = :ssh または Sport = :ssh )'
一般的な組み合わせ:
-tan、-tanl、-tanlp、-uan
Linux ネットワーク プロパティの構成 (3) : 構成を変更するファイル
IP、MASK、GW、DNS 関連の設定ファイル: /etc/sysconfig/network-scripts/ifcfg-IFACE
ルーティング関連の設定ファイル: /etc/sysconfig/network-scripts/route- IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
DEVICE: この設定ファイルが適用されるデバイス
HWADDR: 対応するデバイスの MAC アドレス。
BOOTPROTO: このデバイスをアクティブ化するときに使用されるアドレス構成プロトコル。一般的に使用される dhcp、static、none、bootp。
NM_CONTROLLED: NM は、このネットワーク カードが CentOS6 が推奨する NM 制御を受け入れるかどうか。 no";
ONBOOT: システムの起動時にこのデバイスをアクティブ化するかどうか;
TYPE: インターフェースのタイプ; 共通イーサネット、ブリッジ;
UUID: デバイスの一意の識別;
IPADDR: IP アドレスを指定します。
NETMASK: サブネットマスク;
DNS1: 最初の DNS サーバーを指します。
USERCTL : 一般ユーザーがこのデバイスを制御できるかどうか。
PEERDNS: BOOTPROTO の値が「dhcp」の場合、dhcp サーバーによって割り当てられた DNS サーバーポインティング情報を /etc/resolv.conf に直接上書きできるかどうか。ファイル;
/etc/sysconfig/network-scripts/route-IFACE
2 つのスタイル:
(1) GW 経由の TARGET
(2) 3 行ごとに定義ルート
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
ネットワークカードの複数のアドレスを構成します。 ifconfig:
ifconfig IFACE_ALIAS
ip
ip addr add
設定ファイル:
ifcfg-IFACE_ALIAS
DEVICE=IFACE_ALI AS
注: ゲートウェイ エイリアスは dhcp を使用して起動できませんプロトコル;
Linux ネットワーク属性設定 tui (テキスト ユーザー インターフェイス):
system-config-network-tui
を使用して見つけることもできます。 注意: ネットワーク サーバーを忘れずに再起動してください。有効になる可能性があります。
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
ネットワークインターフェース 関連する udev 設定ファイルを特定して名前を付けます:
/etc/udev/rules.d/70-persistent-net.rules
ネットワークカードをアンインストールしますドライバー:
modprobe -r e1000
アニメーション ネットワークカードドライバーをロードします:
Modprobe E1000
Centos 7 ネットワーク属性構成
従来の命名: イーサネット ETH [0,1,2, ...],,, wlan[0,1,2,...]
予測可能な機能
udev は、さまざまな命名スキームをサポートしています:
ファームウェア、トポロジ
(1) ネットワークカードの命名メカニズム
ネットワークデバイスの systemd 命名方法:
(a) デバイスのファームウェアまたは BIOS によって提供されるインデックス情報が、ネットワークカードに統合されている場合マザーボードが利用可能で予測可能な場合、名前はこのインデックスに基づきます (例: eno1)。(b) PCI-E 拡張スロットのファームウェアまたは BIOS によって提供されるインデックス情報が利用可能で予測可能な場合は、それに名前を付けます。
などのこのインデックスに基づいて (c) If ハードウェア インターフェイスの物理的な位置情報が利用可能な場合は、この情報に基づいて名前を付けることができます (例: enp2s0)。ユーザーが明示的に起動する場合は、MAC アドレス enx2387a1dc56 に基づいて名前を付けることもできます
(e) 上記のすべて 使用できない場合は、従来の命名メカニズムが使用されます
命名メカニズムには、biosdevname プログラムの参加が必要です。(2) 名前構成形式
en: ethernet
wl: wlan
ww: wwan
名前type:
o: 統合デバイス
のデバイスインデックス番号。
s: 拡張スロットのインデックス番号;
x: MAC アドレスに基づく名前;
ps: enp2s1
ネットワークカードデバイスの命名プロセス:
ステップ 1:
udev、補助ツールプログラム/lib/udev/rename_device、/usr/lib/udev/rules.d/60-net.rules
ステップ 2:
biosdevname は /usr/lib/udev/rules.d/71-biosdevname.rules に基づきます
ステップ 3:
に従って、ネットワーク インターフェイス デバイスを検出します。 /usr/lib/udev/rules.d/75-net-description
ID_NET_NAME_ONBOARD, ID_NET_NAME_SLOT, ID_NET_NAME_PATH
従来の命名方法に戻す:
(1) /etc/default を編集します/ grub 設定ファイル
GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb Quiet"
(2) grub2 の設定ファイルを生成します
grub2-mkconfig -o /etc/grub2.cfg
(3) システムを再起動します
アドレス設定ツール: nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
デバイス - ネットワークインターフェイスを表示および管理します
接続 - ネットワーク接続を開始、停止、管理します
IPアドレスなどのプロパティを変更する方法:
#nmcli connectionmodify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses
ipv4.gateway
ipv4.dns1
ipv 4.メソッド
マニュアル
ネットワークインターフェース構成tuiツール: nmtui
ホスト名構成ツール: hostnamectl
status
set-hostname
参考:
Web クライアント ツール:
lftp、ftp、lftpget、wget
# lftp [-p port] [-u user[,password]] SERVER
サブコマンド:
get
mget
ls
help
# lftpget URL
# ftp
#wget
wget [オプション] ... [ URL]...
-q: サイレントモード
-c: アップロードを再開
-O: 場所を保存
--limit-rates=: 転送速度を指定
レビュー: ip コマンド、ss コマンド; CentOS 7
ifcfg、ip、netstat、ss
/etc/sysconfig/ network-scripts/
ifcfg-IFNAME
route-IFNAME
CentOS 7: nmcli、nmtui
Linux プロセスとジョブ管理
カーネル機能: プロセス管理、ファイルシステム、ネットワーク機能、メモリ管理、ドライバー、セキュリティ機能
プロセス: 実行中のプログラムのコピー。
存在ライフサイクル
プロセス情報を保存するためのLinuxカーネルの固定形式: タスク構造体
複数のタスクのタスク構造体コンポーネントリンクリスト:タスクリスト
プロセスの作成:
init
親子関係
プロセス: 親プロセスによって作成されます
fork()、clone()
プロセスの優先度:
0-139:
1-99: リアルタイムの優先度;
100-139: 数値が小さいほど高くなります。優先度高:
-20,19
Big O
O(1)、O(logn)、O(n)、O(n ^ 2), O(2^n)
プロセスメモリ:
ページフレーム: ページデータを保存するために使用されるページフレーム
ストレージページ
MMU: メモリ管理ユニット
IPC: プロセス間通信
同じホスト上:
signal
shm: 共有メモリ
semerphor
異なるホスト上:
rpc: リモートプロシージャコール
ソケット:
Linux カーネル: プリエンプティブマルチタスク
プロセスタイプ:
デーモンプロセス: システムブートプロセス中に開始されるプロセス、ターミナルに依存しないプロセスが続きます。
フォアグラウンド プロセス: ターミナルを通じて開始されるターミナル関連のプロセス
注: フォアグラウンドで開始されたプロセスは、デーモン モードで実行するためにバックグラウンドに送信することもできます。
プロセスステータス:
実行ステータス: 実行中
準備完了ステータス: 準備完了
スリープステータス:
中断可能: 中断可能
中断不可: ruptable
停止状態: 一時停止メモリ内にありますが、手動で開始しない限りスケジュールされません
ゾンビ状態: ゾンビ
プロセス分類:
CPU バウンド
IO バウンド
「Linux カーネルの設計と実装」、「Linux カーネルの深い理解」
Linux プロセスを表示および管理するためのツール: pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、 dstat、kill、pkill、job、bg、fg、nohup
pstree コマンド:
pstree - プロセスのツリーを表示
ps: プロセスの状態
追記- 現在のプロセスのスナップショットをレポートします
Linux システムの各プロセスの関連情報は、/proc/PID ディレクトリの各ファイルに保存されます。
ps [オプション]...
オプション: 2 つのスタイルをサポートします
一般的な組み合わせ: aux
u: ユーザー中心のプロセスステータス情報表示の編成
a: ターミナル関連のプロセス
x : 端末に関係のないプロセス
~]# ps aux
USER e、仮想メモリセット
RSS: 常駐サイズ、常駐メモリセット
STAT: プロセスステータス
R: 実行中
S: 中断可能なスリープ
D: 中断不可能なスリープ
T: 停止中
Z: ゾンビ
+
: -ef
-e : 全プロセスの表示
-f: 全形式のプログラム情報の表示
よく使われる組み合わせ: -eFH
-F: 全形式のプロセス情報の表示
-H: プロセスの表示-プロセスレベル形式の関連情報
一般的な組み合わせ: -eo、axo
-eo pid,tid,class,rtprio,ni,pri ,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni: 素晴らしい値
pri: 優先順位、優先順位
psr: プロセッサー、CPU
rtprio: リアルタイム優先度
pgrep, pkill:
pgrep [オプション] pattern
pkill [オプション] pattern I u-UID: 有効なユーザー
-UID : Real User
-ターミナル: 指定したターミナルに関連するプロセス -a: プロセス名の完全な形式を表示
-P pid: 親プロセスが属するプロセスのリストを表示ここで指定されたプロセス
pidof:
プロセス名に基づいて PID を取得します;
top:
多くの組み込みコマンドがあります:
並べ替え:
P: CPU 占有率別 M: 占有メモリの割合
T: 累積 CPU 時間占有中;
ヘッダー情報の表示:
稼働時間情報: l コマンド
タスクと CPU 情報: t コマンド
cpu それぞれ表示: 1 (数字)
メモリ情報: m コマンド
終了コマンド: q
オプション:
htop コマンド:
オプション:
-d #: 遅延時間を指定します。指定したフィールドで並べ替えます。
コマンド:
s: 選択したプロセスのシステムコールを追跡します。
l: 選択したプロセスによって開かれたファイルのリストを表示します。
a: 選択したプロセスを変更します。指定された CPU コアにバインドします。
t: プロセス ツリーを表示します
注: Fedora-EPEL ソース
復習:
Linux の基本:
CPU :timeslice
メモリ:線形アドレス空間
I/O:
時分割多重化
プロセス表示ツール:pstree、ps、pgrep、pidof、top、htop
Linux プロセスの表示と管理 (2)
Linux プロセスの表示と管理ツール: pstree、ps、pidof、pgrep、top、htop、glances、pmap、vmstat、dstat、kill、pkill、job、bg 、fg、nohup
vmstat コマンド:
vmstat [オプション] [遅延 [カウント]]
procs:
r: 実行を待機しているプロセスの数。
b: 中断不可能なスリープ状態のプロセスの数 (ブロックされたキューの長さ);
swpd: 使用されているスワップメモリ​​の合計量空き物理メモリ;
buffer: バッファに使用されるメモリの合計量;
swap:
si: データがスワップデータに入るrate in (kb/s)
so: スワップを離れるデータのデータ速度 (kb/s)
io:
bi: データがブロックデバイスからシステムに読み取られる速度; (kb/s)
bo: ブロックデバイスへのデータ保存速度;
in: 割り込み、割り込み速度
cs: コンテキストスイッチ、プロセススイッチレート;
cpu:
us
sy
id
wa
st
オプション:
-s: ディスプレイメモリ統計
pmapコマンド:
pmap - プロセスのメモリマップをレポート
pmap [options] pid [...]
-x: 詳細形式で情報を表示;
別の実装:
# cat /proc/PID/maps
glances コマンド:
glances [-bdehmnrsvyz1] [-B バインド] [-c サーバー] [-C conffile] [-p ポート] [-P パスワード] [--パスワード] [-t [更新] [-f ファイル] [-o 出力]
内建コマンド:
a プロセスを自動的に並べ替える l ログの表示/非表示
c プロセスを CPU% で並べ替えるbネットワーク I/O のバイトまたはビット
m プロセスを MEM% で並べ替える w 警告ログを削除する
p プロセスを名前で並べ替える x 警告ログと重要なログを削除する
i I/O 速度別のプロセス 1グローバル CPU または CPU ごとの統計
d ディスク I/O 統計の表示/非表示
h このヘルプ画面の表示/非表示
f ファイルシステム統計の表示/非表示 t ネットワーク I/O を組み合わせて表示
n ネットワーク統計の表示/非表示 u 累積ネットワーク I/O の表示
s センサー統計の表示/非表示 q 終了 (Esc および Ctrl-C も機能します)
y hddtemp 統計の表示/非表示
常用选项:
-b: 以Byte单位显示网卡データ速度;
-d: 关闭磁盘I/O模块;
-f /path/to/somefile:入力文件位置;
-o {HTML|CSV}:出力形式;
-m: 禁止用マウント模块
-n: 禁止用网络模块
-t #: 延迟時間間隔
-1:CPU の関連データ個別表示;
C/S モード下行glances コマンド:
服务モード:
IPADDR
IPADDR: 本机哪个地址の指明监听
客端末モード:
glances -c IPADDR
IPADDR:要连入力された服务器端末地址
dstat コマンド:
dstat [-afv] [オプション..] [遅延 [カウント]]
-c: 显示cpu相关情報;
-C #,#,... ,total
-d: 显表示disk相关情報;
-D total,sda,sdb,...
-g:显表示ページ相关统计データ;
-m:表示メモリ関連の计データ;
-n: 表示ネットワーク関連のデータ;
-p: 表示プロセス関連のデータ;
-r: 表示io计要求相关的统计データ;
-s: スワップされた関連する统计データを表示します;
--tcp
--udp
--unix
--raw
--ソケット
--ipc
--top-cpu:最占用CPUの進行を表示;
--top-io:最占ioの進行を表示;
--top- mem: 最大占有内存続の経過を示す;
--top-lantency: 最長の延在を示す経過;
kill コマンド: 🎜🎜🎜プロセス管理を達成するためのプロセスへの信号を制御することをセンドします
現在のシステムで利用可能な信号を配置します:
#kill-l
#man 7 Signal一般的に使用されるシグナル:
1) SIGHUP: プロセスを閉じずに設定ファイルを再読み込みします。
2) SIGINT: Ctrl+c と同等。実行中のプロセスを強制終了します 実行中のプロセス;
15) SIGTERM: 実行中のプロセスを終了します。
( 1) シグナルの数値識別: 1、2、9
(2) シグナルの完全名。HUP
process:
kill [-SIGNAL] PID...
"name" の下のすべてのプロセスを強制終了します:
killall [-SIGNAL] Program
Linux 用ジョブ制御
フォアグラウンド ジョブ: ターミナル経由で開始され、起動後は常にターミナルを占有します。
バックグラウンド ジョブ: ターミナル経由で開始できますが、起動後はバックグラウンドで実行されます (ターミナルを解放します)。 ;
作り方 バックグラウンドでジョブが実行されていますか?
(1) 実行中のジョブ
Ctrl+z
(2) まだ開始されていないジョブ
# COMMAND &
このようなジョブはバックグラウンドで実行しますが、バックグラウンドに送信したい場合は、ターミナルとの関係を剥がします:
# nohup COMMAND &
すべてのジョブを表示:
# jobs
ジョブ制御:
# fg [[%]JOB_NUM]: 指定されたバックグラウンドジョブをフォアグラウンドに戻します
# bg [[%]JOB_NUM]:バックグラウンドに送信されたジョブはバックグラウンドで実行され続けます ;
# kill [%JOB_NUM]: 指定されたジョブを終了します
プロセス優先度調整:
静的優先度: 100-139
デフォルトでプロセスが開始される場合、nice の値は 0 で、優先度は 120 です。
renice コマンド:
renice [-n] priority pid...
View:
ps axo pid、comm、ni
関係しないコマンド: sar、tsar、iostat、iftop
Linux タスク計画、定期的なタスク実行
将来の特定の時点でタスクを実行します: at、batch
定期的なタスク: cron
電子メールサービス:
smtp: メールの送信に使用される単純なメール送信プロトコル
pop3: 郵便局プロトコル
imap4: インターネットメールアクセスプロトコル
mailx-インターネットメールの送信と受信
(1) 直接指定、Ctrl+d
(2) 入力リダイレクト;
(3) パイプ経由;
コマンド:
at [オプション] TIME
TIME:
HH:MM [YYYY-mm-dd]
正午、真夜中、
tomorrow
now+#{分、時間、日、または週}
共通オプション:
-q QUEUE:
-l: ジョブの実行を待機している指定されたキューをリストします。 ; atq
-d と同等: 指定されたジョブを削除; atrm
-c : 特定のジョブタスクを表示する;
-f : 指定されたファイルからのタスクの読み取り;
注: ジョブの実行結果は、関連するユーザーに電子メールで通知されます。
バッチ コマンド:
ここで指定されたタスクを実行するための独自の空き時間をシステムに選択させます。 ;
定期タスクスケジュール: cron
関連パッケージ:
cronie: メインパッケージは crond デーモンと関連補助ツールを提供します
cronie-anacron: cronie の補足プログラム。 ; cronie タスクの実行ステータスを監視するために使用されます。過去に実行されるべきときに cronie 内のタスクが正常に実行されなかった場合、その後 anacron がタスクを開始します。メンテナンスタスク;
crond デーモンが実行されていることを確認します:
CentOS 7:
systemctl status crond
...実行中...
C entOS 6:
サービス crond ステータス
定期的に実行されるようにスケジュールされたタスクは、ポイントツーポイント操作を実装する crond に送信されます。
システム cron タスク: システム メンテナンス ジョブ
/etc/crontab
ユーザー cron タスク:
crontab コマンド
システム cron タスク
#仕事の例定義:
# .------------- 分 (0 - 59)
# | - 23)
# | .---------- 月の日 (1 ~ 31)
# | 1 - 12) または 1 月、2 月、3 月、4 月 ...
# |火曜日、水曜日、金曜日、土曜日
#****** の名前が実行されます
例: 午後 9 時 10 分echo コマンドを実行します。
10 21 * * * gentoo /bin/echo "Howdy!"
時間表記:
指定された値。 sある時点での有効な値の範囲内; (2) *
特定の時点での有効な値の範囲内のすべての値
は「すべて...」を意味します。 ; (3) 離散値:,
#,#,#
(4) 連続値: -
#-#
(5) 指定された時間範囲で、ステップ サイズを定義します:
/#: # はステップ サイズです
例: echo コマンド 3 時間ごと
0 * /3 * * * gentoo /bin/echo "howdy!"
ユーザー cron:
crontab コマンド定義、各ユーザーには専用の cron タスク ファイルがあります: /var/spool/cron/USERNAME
crontab コマンド:
crontab [-u user] [-l | -r | -e] [-i]
-l: すべてのタスクをリストします。タスク;
-r: すべてのタスクを削除します;
-i: ユーザーが対話モードで指定されたタスクを選択的に削除できるようにします。 root によって、指定されたユーザーの cron タスクを管理します
(1) COMMAND > (2) コマンド &> /dev/null
cron タスクの場合、% をコマンド内で使用する場合は、% をエスケープする必要があります。引用符、またはエスケープなしで
考え:
(1) 第 2 レベルでタスクを実行するには?
* * * * * for min in 0 1 2; do echo "hi"; 完了
(2) 7 分ごとにタスクを実行する方法
:
睡眠番号[サフィックス]...
サフィックス:
s: 秒、デフォルト
m: 分
h:
d:日
CentOS 5と6の起動プロセス
Linux: kernel+rootfs
kernel: プロセス管理、メモリ管理、ネットワーク管理、ドライバー プログラム、ファイルシステム、セキュリティ関数
rootfs:
glibc
ライブラリ: 関数コレクション、関数、呼び出しインターフェイス
プロセス呼び出し: プロシージャ
関数呼び出し: 関数
プログラム
カーネル設計スクール:
単一カーネル設計: Linux
すべての機能を同じプログラムに統合
マイクロカーネル設計: Windows、ソラリス
各機能は個別のサブシステムを使用して実装されます。
Linux カーネルの機能: モジュール化のサポート: .ko
モジュールの動的ロードとアンロードをサポートします。 コンポーネント:
コアファイル: /boot /vmlinuz-version-release
ramdisk:
centos -release.img
モジュールファイル:/lib/modules/VERSION-release
CentOSシステム起動プロセス:
POST:電源オンセルフテスト
ROM:CMOS
BIOS: 基本的な入出力システム
ROM+RAM
BOOT シーケンス:
各ブートデバイスを順番に検索します。ブートプログラムを持つ最初のデバイスが、この起動に使用されるデバイスです。
windows: ntloader
Linux:
LILO: LINux ローダー
GRUB: GRand ユニフォームブートローダー
GRUB 0.X: GRUB Legacy
GRUB 1.x: GRUB2
特徴: 提供されるメニューユーザーがシステムをブートするか、別のカーネル バージョンを選択するかを選択できます。ユーザーが選択したカーネルをメモリ内の特定の領域にロードし、解凍し、展開し、システム制御をカーネルに転送します。
446: ブートローダー
64: fat
2: 55AA
GRUB:
ブートローダー: 第1ステージ
ディスク: 2ndステージ
カーネル:
自己初期化:
識別可能なハードウェア デバイスをすべて検出します。
ハードウェア ドライバーを読み取り専用としてロードします。ルート ファイル システムをマウントします。
ユーザー空間で最初のアプリケーションを実行します: /sbin/init
init プログラムの種類:
SysV: init、CentOS 5
設定ファイル: /etc/inittab
スタートアップ: init、CentOS 6
設定ファイル: /etc/inittab、/etc/init/*.conf
Systemd: systemd、CentOS 7
設定ファイル: /usr/lib/systemd/system、/etc/systemd/system
ramdisk:
カーネルの機能の 1 つ: バッファリングとキャッシュを使用した処理ディスク上のファイルへ;
ramdisk --> ramfs
CentOS 5: initrd、ツールプログラム: mkinitrd
CentOS 6: initramfs、ツールプログラム: mkinitrd、ドラカット
システムの初期化:
POST --> ブートシーケンス (BIOS) --> カーネル (RAM ディスク) -->
/sbin/init
CentOS 5:
実行レベル: システムの運用やメンテナンスなどのアプリケーション目的のために設定されます。
0 -6: 7 レベル
0: シャットダウン
1: シングルユーザーモード (root、ログイン不要)、シングル、メンテナンスモード
2: マルチユーザーモード、ネットワークが開始されます。機能しますが、メンテナンス モードは開始されません。
3: マルチユーザー モード、通常のテキスト インターフェイス。 : マルチユーザーモード、通常モード
6: 再起動
デフォルトレベル:
3、5
初期化 #
ビューレベル:
ランレベル
who -r
設定ファイル: /etc/inittab
各行はアクションとそれに対応するプロセスを定義します
id:runlevel:action:process
action:
wait: このレベルに切り替えて一度実行します。
respawn: このプロセスが終了した場合は再起動します。 : Set デフォルトの実行レベルを設定します。プロセスは省略されます。
: システムの初期化方法を設定します。ここでは通常 /etc/rc.d/rc.sysinit を指定します。
id :3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1 :1:wait:/etc/rc.d/rc 1
...
l6:6:wait:/etc/rc.d/rc 6
説明: rc 0 --> /etc/rc.d/rc0.d/
K*: K##*:##実行順序; 数値が小さいほど、最初に実行されます。番号、サービスが最初に実行されます。
S*: S##*: ## 実行順序は、番号が小さいほど早く実行されます。通常、service は、/etc/rc.d/rc0.d/K* の
$srv stop
に依存するサービスです。 for srv in /etc/rc.d/rc0 .d/s*; Do s $ SRV Start
done
chkconfig コマンド
すべてのレベルでサービスの設定を表示しますすべてのレベル:
chkconfig [ --list] [name]
追加:
SysV サービス スクリプトは /etc/rc.d/init.d に配置されます (/etc/init .d)
chkconfig --add name
#!/bin/bash
#
# chkconfig: LLL nn
削除:
chk config --del name
指定されたリンクタイプを変更します
chkconfig [--level レベル] name
--level LLLL: を指定します設定するレベル; 省略した場合は 2345;
注: 通常のレベルでは、S99local が開始した最後のサービスは /etc/rc.d/init.d サービス スクリプトにリンクされませんが、 /etc/rc.d/rc.local スクリプト; したがって、サービス スクリプトを作成して /etc/rc.d/init.d/ ディレクトリに配置するのは不便または不必要です。コマンドは起動時に自動的に実行されますが、これを /etc/rc.d/rc.local ファイルに直接配置することもできます。 2345:respawn:/usr/sbin/mingetty tty2
...
tty6: 2345:respawn:/usr/sbin/mingetty tty6
mingetty がログインプログラムを呼び出します
/etc/rc.d/rc.sysinit: システム初期化スクリプト
(1) ホスト名を設定します。
(3) udev と selinux をアクティブ化します。 ;
(4) /etc/fstab ファイルで定義されたファイルシステムをマウントします
(5) ルートファイルシステムを検出し、読み取り/書き込みモードでルートファイルシステムを再マウントします。 6) システムクロックを設定します。
(7) スワップデバイスをアクティブにします。
(9) /etc/sysctl.conf ファイルに従ってカーネルパラメータを設定します。ソフトウェア RAID デバイス;
(10) 追加デバイスのドライバーをロードする;
概要: /sbin/init --> (/etc/inittab) --> デフォルトの実行レベルを設定します --> システムの初期化を完了します --> 対応するサービスを終了します閉じる必要があります、起動にはサービスの開始が必要です --> ログイン端末をセットアップします
CentOS 6:
init プログラムは: upstart、その設定ファイル:
/etc/inittab、/etc /init/*.conf
注: /etc/init/*.conf ファイルの構文は、upstart 構成ファイルの構文に従います
POST --> BIOS) --> ブート ローダー (MBR) --> rootfs --> switchroot --> (/etc/inittab; init/*.conf) --> デフォルトの実行レベルを設定 --> システム初期化スクリプト --> ターミナル
を起動します。
grub: GRand Unified Bootloader
grub 0.x: grub レガシー
grub 1.x: grub2
grub レガシー:
ステージ1: mbr
stage1_5: mbr の後のセクターにより、stage1 のブートローダーが stage2 が配置されているパーティション上のファイル システムを認識できるようになります。 /boot/grub/grub.conf <-- /etc/grub.conf
stage2 とカーネルは通常、基本ディスク パーティションに配置されます
機能:
(1) を提供します。メニューと対話型インターフェイス
e: 編集モード、メニューの編集に使用します。
c: コマンド モード、対話型インターフェイス
(2 ) ユーザーが選択したカーネルまたはオペレーティング システムをロードします。
パラメータをカーネルに渡すことを許可します
このメニューを非表示にすることができます
(3) メニューの保護メカニズムを提供します
メニューを編集するための認証
カーネルを有効にするか操作するための証明書system
デバイスの識別方法:
(hd#,#)
hd#: 番号は 0 から始まります
#: パーティション番号、番号で表されます。番号は 0 から始まります
(hd0,0)
grub のコマンド ライン インターフェイス
ヘルプ: ヘルプ リストを取得します
キーワード: 詳細なヘルプ情報
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: これを設定する 初回起動時に使用されるカーネルファイル; さらに、カーネルでサポートされている多くのコマンドラインパラメータを追加できます
例: init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE : RAM ディスクを設定します。選択したカーネルに追加のファイルを提供します。
boot: 選択したカーネルをブートします。
grub コマンド ライン インターフェイスを介してシステムを手動で起動します。
grub> カーネル /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub>
設定ファイル: /boot/grub/grub.conf
設定項目:
default=#: タイトル番号を 0 から設定します。
timeout=#: メニュー項目がオプションの選択を待機する時間を指定します。
splashima=(hd#,#)/PATH/TO/XPM_PIC_FILE: メニューの背景画像ファイルのパスを指定します。 : メニューを非表示にする ;
password [--md5] STRING: メニュー編集認証;
title TITLE: 複数回表示できるメニュー項目「タイトル」を定義します。 ,#): grub 検索 stage2 およびカーネル ファイルが配置されるデバイス パーティション。これは grub の「ルート」です。
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]: 開始されたカーネル
initrd / PATH/TO/INITRAMFS_FILE: カーネルに一致する ramfs ファイル ;
password [--md5] STRING: 選択したカーネルまたはオペレーティング システムの起動時の認証
grub-md5-crypt コマンド
シングルユーザーモードに入ります:
(1) grub メニューを編集します (編集するタイトルを選択し、e コマンドを使用します)
(2)
1 を追加します。 、s、S、または選択したカーネルの後にシングル はい;
(3) カーネル行に「b」コマンドを入力します:
(1) grub-install grub-install - root- directory = root/disk
(2)grub
grub&gt; (hd#)
Linux カーネル:
シングルカーネル システム設計ですが、マイクロカーネル設計システムの利点を最大限に活用し、カーネルにモジュラー メカニズムを導入しています。
カーネルコンポーネント:
カーネルコア、通常はbzIma、通常はvmlinuz-VERSION-RELEASEという名前の/bootディレクトリにあります
カーネルオブジェクト: カーネルオブジェクト、通常は/lib/modulesに配置されます。 /VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
補助ファイル: ITRDで
initramfs
実行中のカーネル:
uname コマンド:
uname - システム情報を出力
uname [オプション]...
-n : ノード名を表示します;
-r: VERSION-RELEASE の表示
Module:
コアによってロードされたカーネルモジュールの表示
表示されるのはコンテンツの取得元: /proc/modules ファイル
modinfo コマンド:
モジュールの詳細な説明情報を表示
modinfo [ -k kernel ] [ modulename|filename... ]块-n:表示モジュールファイルパスのみ
-P:モジュールパラメーターを表示
-a:著者d:descripting
-l:license
modprobeコマンド:
カーネルモジュールのロードまたはアンロード
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]
設定ファイル: /etc/ modprobe.conf, /etc/modprobe.d/*.conf
modprobe [ -r ] モジュール名...
depmod コマンド:
Kernelモジュールの依存関係ファイルとシステム情報マッピングファイルを生成するためのTool:
insmodコマンド:
insmod[filename] [Module Options ...
出力します。
パラメータ:
読み取り専用: 情報を出力します
書き込み可能: カーネルの特定の関数または機能を設定するためのユーザー指定の「新しい値」を受け入れます
/proc/sys Y s (1) Sysctl コマンドは、このディレクトリ内の多くのパラメータを表示または設定するために使用されます。 .hostname=mail.madu.com
(2) echo コマンドは値を変更することもできます。
echo "VALUE" > /proc/sys/path/ to/parameter
~]# echo "www.madu.com" /proc/ sys/kernel/hostname
sysctl コマンド:
デフォルト設定ファイル: /etc/sysctl.conf
(1) パラメータを設定します
sysctl -wうえ
(2) 設定ファイルを読み込んでパラメータを設定する
sysctl -p [/path /to/ conf_file]
カーネル内のルート転送:
/proc/sys/net/ ipv4/ip_forward
よく使用されるいくつかのパラメータ:
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
/sys ディレクトリ:
sysfs: カーネルによって認識される各ハードウェア デバイスの関連属性情報を出力し、カーネル ペアのハードウェア機能設定情報も持ちます。一部のパラメーターは、ハードウェアの動作特性を調整するために変更できます。
udev は、このパスの下に出力される情報を通じて、各デバイスに必要なデバイス ファイルを動的に作成します。udev は、実行中のユーザー空間プログラムです: udevadmin、hotplug。デバイスの場合、事前に定義されたルール ファイルが読み取られます。通常は /etc/udev/rules.d ディレクトリと /usr/lib/udev/rules.d ディレクトリにあります。
RAM ディスク ファイルの作成:
(1) mkinitrdコマンド
現在使用しているカーネル用のRAMディスクファイルを再作成します
~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut コマンド
現在使用しているカーネルの ramdisk ファイルを再作成します
~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)
カーネルのコンパイル:
前提条件:
(1) 開発環境を準備します。
(2) ターゲット ホスト上のハードウェア デバイスに関する関連情報を取得します。
(3) 有効にするファイル システムなど、ターゲット ホスト システムの機能に関する関連情報を取得します。
www.kernel.org
開発環境の準備:
パッケージグループ (CentOS 6):
サーバープラットフォーム開発
開発ツール
Tarホストハードウェアデバイス関連情報の取得:
CPU:
~]# cat /proc/cpuinfo
~]# x86info -a
~]# lscpu
PCI デバイス:
~]#lspci
-v
-vv
~]# lsusb
-v
-vv
~]#lsblk
学ぶすべてのハードウェア デバイスに関する情報
~]# hal-device
テンプレート ファイルに基づく簡単な作成プロセス:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src
~]# cd /usr/src
~]# ln -sv linux-3.10.67 linux
~]# cd linux
~]# cp / boot/config-$ (uname -r) ./.config
~]# make menuconfig
~]# screen
~]# make -j #
~ ]# make modules_install
~]# make install
システムを再起動し、新しいカーネルを使用してテストします
Linux カーネルのコンパイル (2)
カーネル:
( 1) カーネル オプションの構成
は、構成の「更新」モードをサポートします:
(a) make config: コマンド ラインに基づいて、カーネル内で構成可能な各オプションをトラバーサル方式で構成します。
( b) make menuconfig:curses に基づくテキストウィンドウインターフェイス;
(c) make gconfig: GTK 開発環境に基づくウィンドウインターフェイス;
(d) make xconfig: Qt に基づくウィンドウインターフェイス開発環境;
構成の「新しい構成」モードをサポートします:
(a) make defconfig: ターゲット プラットフォームのカーネルによって提供される「デフォルト」構成に基づいて構成します。 make allnoconfig: すべてのオプションは "no" と答えられます
(2) コンパイル
make [-j #]
カーネル内の関数の一部のみをコンパイルする方法:
(a) 特定のサブルーチンのみをコンパイルします。 ディレクトリ内の関連コード:
# cd /usr/src/linux
# make dir/
(b) a のみをコンパイルします。特定のモジュール:
# cd /usr /src/linux
# make dir/file.ko
例: e1000 のみドライバーをコンパイルします:
# make drivers/ネット/イーサネット/インテル/e1000/e1000.ko
カーネルをクロスコンパイルする方法:
コンパイルされたターゲット プラットフォームは現在のプラットフォームとは異なります
# make ARCH=arch_name
特定のターゲットのヘルプを取得するにはplatform
# make ARCH=arch_name help
コンパイルされたカーネルソースツリーを再コンパイルする方法:
事前のクリーニング操作:
# make clean: コンパイル済みファイルの大部分をクリーンにするファイルは生成されますが、設定ファイルなどは保持されます。
# make mrproper: すべてのコンパイル済みファイル、設定ファイル、および一部のバックアップ ファイルを削除します。
# make distclean: mrproper、パッチ、およびエディターのバックアップ ファイル。
画面コマンド:
新しい画面を開く:
# screen
画面を終了して閉じる:
# exit
画面:
Ctrl +a,d
開いているすべての画面を表示:
screen -ls
画面を復元
screen -r [SESSION]
CentOSシステムのインストール
ブートローダー - & gt; kernel (initramfs)-& gt; rootfs-& gt;/sbin/init
Tui: Curses に基づくテキストウィンドウ
;
CentOSインストールプログラム起動プロセス:
MBR: boot.cat
stage2: isolinux/isolinux.bin
設定ファイル: isolinux/isolinux.cfg
対応する各メニューオプション:
カーネルのロード: isolinuz/vmlinuz
カーネルにパラメータを渡す: initrd=initrd.img ...
ルートファイルシステムをロードし、anaconda を起動
GUI インターフェースはデフォルトで開始されます
TUI インターフェースの使用を明示的に指定する場合:
"text" パラメーターをカーネルに渡すだけです
boot: linux text
注: 通常、上記のコンテンツはブート デバイスに配置されている必要があります。後続の anaconda とそのインストール パッケージにはいくつかの方法があります:
ローカル CD
ローカル ハード ドライブ
ftpサーバー: yumリポジトリ
httpサーバー: yumリポジトリ
nfsサーバー
インストール元を手動で指定したい場合:
boot: linuxメソッド
anaconda アプリケーション 作業プロセス:
インストール前の構成フェーズ
インストールプロセス中に使用される言語
キーボードの種類
ターゲットストレージデバイスのインストール
基本ストレージ: ローカルディスク
特殊な種類の機器: iSCSI
ホスト名の設定
ネットワークインターフェイスの設定
タイムゾーン
管理者パスワード
パーティション方法とMBRのインストール場所の設定
通常のパッケージを作成する ユーザー
がインストールするパッケージを選択します
インストールフェーズ
ターゲットディスク上にパーティションを作成し、フォーマット操作などを実行します
選択したパッケージをターゲットの場所にインストールします
ブートローダーをインストールします
初回起動
iptables
セリナックス
コアダンプ
anaconda設定方法:
(1) 対話型設定方法;
(2) 事前に指定された設定ファイルを読み取って自動的に設定を完了します。
特定の構文で指定される構成オプション;
インストールブートオプション:
text: テキストインストール方法
方法: インストールを手動で指定する使用する方法
ネットワーク関連の起動オプション:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname =NAME:MAC_ADDR
リモートアクセス機能に関連するブートオプション:
vnc
vncpassword='PASSWORD'
キックスタートファイルの場所を指定します
ks=
DVD ドライブ: ks=cdrom:/PATH/TO/KICKSTART_FILE
ハードドライブ: ks=hd:/device/drectory/KICKSTART_FILE
HTTPサーバー: ks=http://host:port/path/to /KICKSTART_FILE
FTPサーバー: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPSサーバー: ks=https://host:port/path/to/KICKSTART_FILE
緊急事態を開始レスキューモード:
rescue
公式ドキュメント: 「インストールガイド」
キックスタートファイル形式:
コマンドセクション: キーボードの種類、など;
パッケージセグメント: インストールするパッケージグループまたはパッケージ、インストールしないパッケージなどを指定します。
@group_name
package -package
%end
スクリプトセグメント:
%pre: インストール前スクリプト
実行環境: インストールメディア上で実行されるマイクロ Linux 環境
% post: インストール後のスクリプト
実行環境: インストールされているシステム
コマンドセクションのコマンド:
必要なコマンド
authconfig: 認証方法の設定
authconfig --useshadow --passalgo=sha512
bootloader: ブートローダーのインストール場所と関連構成
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb Quiet Quiet"
keyboard: キーボードの種類を設定
lang: 言語の種類
part: パーティションを作成
rootpw: root パスワードを指定
timezone: タイムゾーン
オプションのコマンド
インストールまたはアップグレード
text: テキストインストールインターフェース
ネットワーク
ファイアウォール
selinux
停止
電源オフ
再起動
リポ
ユーザー: インストールが完了したら、システムの新しいユーザーを作成します
url: インストールソースを指定します
キックスタートファイルの作成方法:
(1) 直接手動編集
(2) を使用できます。作成ツール: system-config-kickstart (CentOS 6)
テンプレートに基づいて新しい構成を変更および生成します
http://172.16.0.1/centos6.x86_64.cfg
syntaxエラーについてはKSファイルを確認します:ksvalidator#ksvalidator/path/to/kickstart_file
createブートディスク:
#mkisofs -r -j -t -v -no -emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso /
レビュー: CentOS システムのインストール
キックスタートファイル:
コマンドセクション
必須: authconfig、bootloader、...
オプション:セリナックス、再起動、 ...
プログラム パッケージ セグメント
%packages
@group_name
package
-package
%end
スクリプトセグメント
%前
...
%終了
%投稿
...
%終了
C関係ツール: system-config-kickstart
文法チェック: ksvalidator
インストールプロセス中にキックスタートファイルを取得する方法:
DVD: ks=cdrom:/PATH/TO/KS_FILE
HTTP: ks=http: //HOST:PORT/PATH/TO/KS_FILE
SELinux:
SELinux: Linux カーネルで動作する安全な拡張 Linux
DAC: 随意アクセス制御。
MAC: 必須のアクセス制御;
SELinux には 2 つの動作レベルがあります:
strict: すべてのプロセスが selinux によって制御されます。
targeted: 限られた数のプロセスのみが selinux によって制御されます。
簡単にハッキングされるプロセスのみを監視します
サンドボックス:
サブジェクト操作オブジェクト
サブジェクト: プロセス
オブジェクト: プロセス、ファイル、
File: open、read、write、close、chown、chmod
subject:domain
object:type
SELinux は、各ファイルにセキュリティ ラベルを提供し、また、プロセス;
user:role:type
user: SELinux ユーザー;
type: タイプ;
ルール: どのドメインにアクセスできるか、どのタイプのファイルにアクセスできるか
SELinux を構成する:
SELinux が有効かどうか;
特定のレイアウト特性を設定する;
SELinux ステータス: 必須、各サブジェクト必ず制限される;
有効: 制限された各プロセスの違反操作は禁止されませんが、監査ログに記録されます
関連コマンド:
: selinux の現在のステータスを取得します。
setenforce 0|1
0: permissive に設定します
1: enforcing に設定します。
設定ファイル: /etc/sysconfig/selinux、/etc/selinux/config
SELINUX={disabled|enforcing|permissive}
ファイルのマーキングをリセットします:
ちこん
chcon [オプション]... コンテキスト ファイル...
chcon [オプション]... [-u ユーザー] [-r ロール] [-t タイプ] ファイル...
chcon [オプション]... --reference=RFILE FILE...
-R: 再帰的マーキング;
ファイルのデフォルトのラベルを復元します:
restorecon [ -R] /path/to/somewhere
ブール規則:
getsebool
setsebool
getsebool コマンド: ゲセブール [-a] [ブール値]
setsebool コマンド:
setsebool [-P] ブール値 | bool1=val1 bool2=val2 ...
bash スクリプト:
...
実行ステータス戻り値;
if
case
特定のコードセグメントを複数回再実行します
ループの数は事前にわかっています:
ループの数は事前に不明です:
には開始条件と終了条件が必要です:
for, while, until
関数: 構造化プログラミングとコードの再利用
関数
for ループ構文:
for NAME in LIST;
ループボディ
完了
リスト生成方法:
(1) 整数リスト
{start..end}
$(seq start [[step]end])
( 2) glob
/etc/rc.d/rc3.d/K*
(3) コマンド
172.16.250.1-254 の範囲内のすべてのホストのオンライン ステータスを検出します。 ping コマンド
#!/bin/bash
#
net='172.16.250'
uphosts=0
downhosts=0
私は{1..20}で
pingを実行します-c1- w 1 ${net}.${i} &> /dev/null
if [ $? -eq 0 ]; then
echo "${net}.${i} が起動しています。" H Uphosts ++
Else
echo 「$ {Net}。$ {I} がダウンしています。」
Downhosts ++
echo 「Up hosts: $uphosts」をさせます。
echo "ダウンホスト: $downhosts."
while ループ:
while CONDITION;
ループ本体 完了
状態: ループ制御条件; ループに入る前に最初に判定を行います;
条件が「true」の場合は再度判定を行い、条件テストのステータスが「false」になるまでループを終了します。 ;
したがって: CONDTION には通常、ループ制御変数が必要です。この変数の値はループ本体内で継続的に変更されます。例: 100 以内のすべての正の整数の合計を求めます。 ;
#!/bin/bash
#
declare -i sum=0
declare -i i=1
while [ $i -le 100]; do
let sum+=$i
let i++
done
echo "$i"
echo "概要: $sum 。"
ユーザーを 10 人追加します
user1-user10
#!/bin/bash
#
declare -i i=1
declare -i
while [ $i -le 10 ]; do
if ! id user$i &> then
useradd user$i
echo " $i."
let users++
fi
let i++
echo "$users ユーザーを追加します。"
すべてのホストのオンラインステータスを検出しますping コマンドによる 172.16.250.1-254 の範囲 (while ループを使用)
#!/bin/bash
#
declare -i i=1
declare -i uphosts= 0
declare -i downhosts=0
net='172.16.250'
while [ $i -le 20 ]; if ping -c 1 -w 1 $net.$i &> /dev/null; then
echo "$net.$i が起動しています。"
let uphosts++
else
echo "$net.$i がダウンしています。"
let downhosts++
fi
let i++
done
echo "ホストを起動しています: $uphosts。 "
echo "Down hosts: $downhosts."
乗算表を出力します; (for ループと while ループをそれぞれ使用して実装)
#!/bin/bash
#
for j in {1..9}; do
for i in $(seq 1 $j); do
echo -e -n "${i}X${ j }=$[$i*$j]t"
完了
echo
完了
#!/bin/bash
#
宣言 -i i=1
宣言 -i j=1
while [ $j -le 9 ]; do
while [ $i -le $j ]; -e -n "${i}X${j}=$[$i*$j]t"
let i++
完了
echo
let i = 1
j++
done
RANDOM を使用して 10 個の乱数を生成し、それらの 10 個の数値を出力し、その中で最大のものと最小のものを表示します。 /bash
#
declare -i max=0
declare -i min=0
declare -i i=1
ながら [ $i -le 9 ]; do
rand=$RANDOM
echo $rand
if [ $i -eq 1 ]; 分 =$ rand
fi
if [ $rand -gt $max ]; then
max=$rand
fi
if [ $rand -lt $min ;
echo "MIN: $ min. "
レビュー: Selinux、WHILE
seelinux: コア、セキュリティ強化
:
/ETC/SYSCONFIG/ SELINUX,/ETC/SELINUX/Config
# setenforce
# getenforce
マーキング:
chcon [-t TYPE]
- R
ブール型:
getsebool [ -a]
setsebool [-P]
while ループ:
while CONDITION;体
完了
sed: 編集者
sed: ストリームエディタ、ラインエディタ;
使用法:
sed [オプション]... 'スクリプト' inputfile...
スクリプト:
』アドレスコマンド
共通オプション:
-n: モードのコンテンツを画面に出力しません。
-e: マルチポイント編集。 PATH/TO /SCRIPT_FILE: 指定されたファイルから編集スクリプトを読み取ります。
-i: その場で編集します。
(1) アドレスなし: 全文を処理します。
(2) 単一のアドレス:
#: 指定された行;
: ここのパターンと一致します。
(3) アドレス範囲:
#、#
#、+#
/pat1/、/pat2/
#、/pat1/
( 4) ~: ステップ
1~2
2~2
d: 削除
p: コンテンツの表示モードスペース内
a text: 行の後にテキストを追加します。n を使用して複数行の追加を実装します。
c を使用して行の前にテキストを挿入します。 text: 置換行は単一行または複数行のテキストです。
w /path/to/somefile: パターンスペースに一致する行を指定されたファイルに保存します
r /path/from/ somefile: 指定されたファイルのテキストを読み取り、パターン空間内の一致した行の後の行に進みます。
=: パターン空間内の行の行番号を出力します。
s///: 他の区切り文字、s@@@、s### の使用をサポートします。
置換マーク:
p:置換が成功した行を表示します。
w /PATH /TO/SOMEFILE: 置換が成功した結果を指定したファイルに保存します。
1: a で始まる行の先頭の空白文字をすべて削除します。 /boot/grub/grub.conf ファイル内は空白;
~]# sed 's@^[[:space:]]+@@' /etc/grub2.cfg
2: # で始まり、その後に少なくとも 1 つの # と空白文字の行の先頭にある空白文字が続くすべてのファイルを削除します
~]# sed 's@^#[[:space:]]+@@' /etc/fstab
3: echo sed コマンドへの絶対パスを指定し、そのベース名を取り出します。
~]# echo "/etc/sysconfig/" | sed 's@[^/]+/?$@@'
高度な編集コマンド:
h: パターン空間の内容を保持空間に上書きします。
H: 追加します。パターン空間のコンテンツを保持スペースに追加します。
g: 保持スペースからデータを取り出し、パターン空間に上書きします。パターン空間;
x: パターン空間の内容を保持空間の内容と交換します。
n: 一致した行の次の行をパターン空間に読み取ります。パターン空間に一致した行の次の行
d: パターン空間の行を削除します。
sed -n 'n;p' FILE: 偶数行を表示
sed '1!G;h;$!d' FILE: ファイルの内容を反転表示
sed '$!N ;$! D' FILE: ファイルの最後の 2 行を取り出します。
sed '$!d' FILE: ファイルの最後の行を取り出します。
sed '/^$/d;G' FILE:
sed 'n;d' FILE: 奇数行を表示
sed -n '1!G;h;$p' FILE: 表示ファイル内の各行を逆に実行します
bash スクリプト プログラミング
while CONDITION; do
ループ本体
エントリ条件: 条件は true です。
終了条件: false se
CONDITION; do
ループ本体
done
開始条件: false
終了条件: true
例: 100 以内のすべての正の整数の合計を求めます ;
#!/bin/bash
#
declare -i i=1
declare -i sum=0
[ $i -gt 100 ] まで
let sum+=$i
let i++
echo合計: $sum"
例: 九九を出力します
do
until [ $i -gt $j ]; do
echo -n -e "${i}X${j}=$ [$i*$j]t"
let i++
完了
echo
let i=1
let j++
完了
ループ制御ステートメント (ループ本体で使用):
continue [N]: N 番目の層の現在のサイクルを事前に終了し、次のラウンドの判定に直接入ります
while do
; CMD1
...
CONDITION2の場合は
続行
fi
CMDn
...
完了
Break [N]: ループを早期に終了します
CMD1
if CONDITION2;休憩
fi
CMDn
...
done
例 1: 100 内のすべての正の整数を走査するループが必要です。
#!/bin/bash
#
declare -i i=0
declare -i sum=0
until [ $i -gt 100 ]; do
if [ $[$i%2] -eq 1 ];
続ける
fi
let sum+=$i
done
echo "偶数の合計: $sum"
無限ループを作成します:
true の間、do
ループ本体
を false まで実行します。
例 2: 3 ごとログインしているユーザー情報をシステムから数秒で取得します。docker がログインすると、ログに記録されて終了します。
#
read -p " ユーザー名を入力してください: " username
if grep "^$username" &> then
;
スリープ 3
完了
echo "$username がログオンしました。" /tmp/user.log
Secon d 実装:
# !/bin/bash
#
read -p "ユーザー名を入力してください: " username
who grep "^$username" &>
Sleep 3
done
echo "$username logged on." /tmp/user.log
while ループの特殊な使用法 (すべての One のファイルを走査) line):
while read line; do
ループ本体
done < /PATH/FROM/SOMEFILE
は /PATH/FROM/SOMEFILE を読み取ります順番にファイルするの各行を入力し、行の値を変数 line に代入します。
例: ID 番号が偶数であるすべてのユーザーを検索し、ユーザー名と ID 番号を表示します
#!/bin/ bash
while read line;do
if [ $[`echo $line Cut -d: -f3` % 2] -eq 0 ];then
) /passwd
forループの特殊形式:
for((制御変数の初期化; 条件判定式; 制御変数の修正式));
制御変数の初期化: ループコードセグメントに突入するときに1回のみ実行されます。
制御変数の修正式: 各サイクルの終わりに、最初に制御変数の修正操作が実行され、次に条件判定が実行されます。 ;
例: 100 以内のすべての正の整数の合計を求めます;
#!/bin/bash
declare-i sum =0
for((i = 1; i&lt; = 100; i ++));完了
echo "Sum: $sum."
例 2: 乗算表を出力します
#!/bin/bash
#
for((j=1;j<=9;j++));do
for((i=1;i<=j;i++))do
echo -e -n "${ i (2) ユーザーに選択を促すオプション; (3) ユーザーが選択したコンテンツを表示します。
#
cpu) CPU 情報を表示します。
mem) メモリ情報を表示;
disk) ディスク情報を表示;
quit) quit
=================== ===== =====
EOF
read -p "オプションを入力してください: " option
while [ "$option" != 'cpu' -a "$ option" != ' mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
read -p "オプションが間違っています。もう一度入力してください: " option
完了
if [ "$option" == 'cpu' ]; then
lscpu
elif [ "$option" == 'mem' ]; cat /proc/meminfo
elif [ "$option" == 'disk' ]; then
fdisk -l
else
echo "終了"
0
fi
さらに:
表示が完了した後、ユーザーはスクリプトを選択して終了しません。代わりに、他のコンテンツを表示することを選択するようユーザーに求めます。 quit が使用されるまで;
条件判断: case ステートメント
PAT1)
branch1
;;
PAT2)
branch2
;;
.. .
*)
デフォルトブランチ
; #
猫< ;
cpu) CPU 情報を表示します;
mem) メモリ情報を表示;
disk) ディスク情報を表示;
quit) quit
==================== ========
EOF
read -p "オプションを入力してください: " option
while [ "$option" != 'cpu' -a "$option" != 'mem' -a "$option" != 'disk' -a "$option" != 'quit' ]; do
read -p "オプションが間違っています。もう一度入力してください: " option
完了
case "$option" in
cpu)
lscpu
;
ディスク)
fdisk -l
;;
*)
echo "終了..."
exit 0
;;
エサック
(1) スクリプトは、start、stop、restart、status のパラメータを受け入れることができます。
(2) パラメータがこれら 4 つのいずれでもない場合は、Exit 形式を使用するように求められます。エラー;
(3) start の場合: /var/lock/subsys/SCRIPT_NAME を作成し、「正常に開始されました」と表示します。
(4) 停止している場合: /var/lock/subsys/SCRIPT_NAME を削除し、「停止完了」を表示します
検討: 事前に停止されている場合はどうするか?
(5) 再起動の場合は、まず停止してから開始します。
考慮してください: 起動しない場合はどうすればよいですか?
(6) status の場合、
/var/lock/subsys/SCRIPT_NAME ファイルが存在する場合、「SCRIPT_NAME is running...」が表示されます。
/var/ の場合、 lock/subsys /SCRIPT_NAME ファイルが存在しない場合、「SCRIPT_NAME は停止しています...」が表示されます。
ここで、SCRIPT_NAME は現在のスクリプト名です
概要: until、while、for 、case
bash スクリプトプログラミング:
case ステートメント:
case 変数参照 in
PAT1)
ブランチ 1
;;
PAT2)
支店2
;;
...
*)
支店n
;
ケースはグロブスタイルのワイルドカードをサポートしています:
*: 任意の長さの文字;
?: 指定された範囲内の任意の 1 文字;
a|b: a または b
関数: 関数
手続き型プログラミング: コードの再利用
モジュラープログラミング
構造化プログラミング
構文 1:
関数f_name {
...関数体...
}
構文 2:
f_name() {
...関数本体...
}
Call: 関数は呼び出されたときにのみ実行されます。
呼び出し: 関数名を指定すると
、関数名が表示される場合、関数のライフサイクル: 呼び出されたときに作成され、返されたときに終了します。 ;
return コマンドはカスタム ステータスの結果を返します
1-255: 失敗
#!/bin/bash
#
関数 adduser {
if id $username &> then
echo "$username が存在します。"
else Useradd $username
[ $? - eq 0 ] && echo "$username の追加が完了しました。" && return 0
}
のユーザー名=myuser$ i
adduser
done
例: サービススクリプト
#!/bin/bash
#
# chkconfig: - 88 12
# description: テストサービススクリプト
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog
start() {
if [ -e $lockfile ]; then
echo "$prog はすでに実行されています。"
return 0
else
touch $lockfile
[ $ ? -eq 0 ] && echo "$prog の開始が完了しました。"
rm - f $lockfile && echo "$prog を停止します。"
else
echo "$prog はまだ停止しています。" fi
}
status() {
if [ -e $lockfile ]; then
echo "$prog が実行中です。"
その他
echo "$prog は停止しています。"
fi
}
usage() {
echo "使用法: $prog {start|stop|restart|status}"
} if [$# -lt 1];
;;
停止)
停止
;;
再起動)
停止
開始
;;
ステータス)
ステータス
;;
*)
使用状況
esac
関数の戻り値:
関数実行結果の戻り値:
(1) echo または print コマンドを使用して出力します。
(2) 関数本体で呼び出されたコマンドの実行結果。関数:
(1) デフォルトは、関数本体で実行された最後のコマンドの終了ステータス コードに依存します。
(2) カスタム終了ステータス コード:
return
関数はパラメータを受け入れることができます:
関数にパラメータを渡す: 関数を呼び出すときは、指定されたパラメータリストを関数名の後ろに空白で区切るだけです。たとえば、「testfunc arg1 arg2...」
関数本体では、 $1 、 $2 、... を使用してこれらのパラメーターを呼び出すことができます。また、 $@、 $*、 $# などの特殊変数も使用できます。 例: 10 人のユーザーを追加する
#!/bin/bash
#
function adduser {
if [ $# -lt 1 ] then
return 2
#2 : 引数なし
fi
if id $1 &> then
echo "$1 が存在します。"
return 1
useradd $1
[ $? -eq 0 | done
関数を使用して NN 乗算表を出力します。
ローカル変数:現在のシェル プロセス; スクリプトを実行するために、専用のシェル プロセスが開始されます。したがって、ローカル変数のスコープは現在のシェル スクリプト ファイルです。関数が終了すると自動的に破棄されます。
関数内にローカル変数がある場合、その名前はローカル変数と同じになります。
関数内でローカル変数を定義する方法:
=VALUE
関数の再帰:
関数はそれ自体を直接または間接的に呼び出します
N !=N(n-1)(n-2)...1
n(n-1)! = n(n-1)(n-2)!
# !/bin/bash
#
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]; then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact 5
n 次のフィボナッチ数列を見つけます
#! / ビン/バッシュ
#
fab() {
if [ $1 -eq 1 ]; then
echo 1
elif [ $1 -eq 2 ]; then
echo 1
その他
echo $[$(fab $[$1-1])+$(fab $[$1-2])]
fi
}
fab 7
Systemd:
POST --> カーネル + initramfs(initrd) --> rootfs -->
init:
CentOS 5: SysV init
CentOS 6: Upstart
CentOS 7: Systemd
Systemd機能:
システム起動時実装サービスの並列起動
システムステータスのスナップショット
コアコンセプト: ユニット
設定ファイルファイルには主にシステム サービス、リスニング ソケット、保存されたシステム スナップショット、その他の初期化関連情報が含まれています。
/usr/lib/systemd/system
/run/ systemd/system
/etc/systemd/system
ユニットタイプ:
サービスユニット: ファイル拡張子は .service で、システムサービスを定義するために使用されます。
ターゲットユニット:ファイル拡張子は .target、「実行レベル」の実装をシミュレートするために使用されます。
デバイス ユニット: .device、カーネルによって認識されるデバイスを定義するために使用されます。
マウント ユニット: .mount、定義ファイル システムマウントポイント;
ソケットユニット: .socket、プロセス間通信用のソケットファイルを識別するために使用されます。
スナップショットユニット: .swap、システムスナップショットを管理します。スワップ デバイスを識別します。
Automount ユニット: .automount、ファイル システムの自動マウント ポイント;
パス ユニット:
のファイルまたはディレクトリを定義するために使用されます。
主な機能:
ソケットベースのアクティブ化メカニズム: ソケットとサービスプログラムが分離されています。
バスベースのアクティブ化メカニズム:
デバイスベースのアクティブ化メカニズム:
パスベースのアクティブ化。メカニズム:
システムスナップショット: 各ユニットの現在のステータス情報を永続ストレージデバイスに保存します。
sysv init スクリプトとの下位互換性があります。
systemctl コマンドは修正されています。
サービスはsystemdによって開始されていないため、systemctlはそれらと通信できません
システムサービスの管理:
CentOS 7:サービスユニット
注:初期のサービススクリプトと互換性があります
コマンド: systemctl コマンド名.service
Start: サービス名 start ==> systemctl start name.service
Stop: サービス名 stop ==> systemctl stop name.service
Restart: サービス名 restart ==> name.service
status: サービス名 status ==> systemctl status name.service
条件付き再起動: サービス名 condrestart ==> systemctl try-restart name.service
reload またはサービスを再起動します。 systemctl reload-or-restart name.service
サービスをリロードまたは条件付きで再起動します: systemctl reload-or-try-restart name.service
起動時に自動的に開始する設定を禁止します: systemctl マスク名 .service
禁止を解除し、起動時に自動的に開始するように設定します: systemctl unmask name.service
現在サービスがアクティブ化されているかどうかのステータスを表示します: systemctl is-active name.service
アクティブ化されたすべてのサービスを表示:
systemctl list-units --type service
すべてのサービスを表示:
systemctl list-units --type service --all
chkconfig コマンド:
起動時にサービスを自動的に開始するように設定します: chkconfig name on ==> systemctl enable name.service
Disable: chkconfig name off ==> systemctl disable name.service
すべてのサービスの自動起動ステータス:
chkconfig --list ==> systemctl list-unit-files --type service
起動時にサービスが自動的に起動するかどうかを確認します: systemctl is-enabled name.service
その他のコマンド:
サービス依存関係の表示: systemctl list-dependency name.service
ターゲットユニット:
ユニット構成ファイル:ゲット
ランレベル:
0 ==> runlevel0.target、poweroff.target
1 ==> runlevel1.target、rescue.target
2 ==> user.target
3 ==> runlevel3.target、multi-user.target
4 ==> runlevel4.target、multi-user.target
5 ==> 、graphical.target
6 ==> runlevel6.target、reboot.target
レベル切り替え:
init N ==> レベルの表示:
runlevel ==> systemctl list-units --type target
デフォルトのランレベルの取得:
/etc/inittab ==> systemctl get-default
デフォルトレベルを変更します:
/etc/inittab ==> systemctl set-default name.target
緊急レスキューモードに切り替えます:
systemctlレスキュー
緊急モードに切り替える:
systemctlEmergency
その他の一般的なコマンド:
シャットダウン: systemctl halt、systemctl poweroff
reboot: systemctl reboot
ハング: systemctl stop
スナップショット: systemctl hibernate
スナップショットとサスペンド: systemctl hybrid-sleep
レビュー: bash スクリプト、systemd
関数: モジュラープログラミング
function f_name {
...関数本体...
}
f_name() {
...機能本体...
}
return コマンド;
パラメータ:
関数本体のパラメータを呼び出す: $1, $2, ...
$*, $@ , $#
関数にパラメータを渡します:
関数名パラメータリスト
systemd: システムとサービス
unit:
Type: サービス、ターゲット
.Service、.target
SystemCTL
bash スクリプト プログラミング:
配列:
変数: 単一要素のメモリ空間を格納します。複数の要素を保存する複数の要素の連続メモリ空間。
配列名
インデックス: 数値は 0 から始まり、数値インデックスです。
注: インデックスは数値だけでなくカスタム形式の使用もサポートします。形式;
bash の配列は、
配列内の要素を参照します: ${ARRAY_NAME[INDEX]}
配列を宣言します:
-a ARRAY_N AME を宣言します
宣言 -A ARRAY_NAME: 連想配列;
配列要素の割り当て:
(1)
ARRAY_NAME[INDEX]=VALUE
weekdays[ 0] ="Sunday"
weekdays[4]="木曜日"
(2) すべての要素を一度に割り当てます:
ARRAY_NAME=("VAL1" "VAL2" "VAL3) " ...)
(3) 特定の要素のみを割り当てます:
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 読み取り-a ARRAY
配列要素の参照: ${ARRAY_NAME[INDEX]}
注: [INDEX] を省略すると、添え字 0 を持つ要素を参照することになります
配列の長さ (配列内の要素の数): ${#ARRAY_NAME[*]}、${#ARRAY_NAME[@]}
例: 10 個の乱数を生成して配列に保存し、その最大値と最小値;
# !/bin/bash
#
declare -a rand
declare -i max=0
9 }; do
rand [$i]=$RANDOM
echo ${rand[$i]}
[ ${rand[$i]} -gt $max ] && max=$ {rand[$i]}
done
echo "Max: $max"
配列を定義します。配列内の要素はすべて で終わるファイルです。 /var/log ディレクトリにログインします。 添字が偶数であるファイルの行数の合計をカウントするには、
#!/bin/bash
#
declare -a files
files=(/var /log/*.log)
declare -i Lines=0
for i in $(seq 0 $[${#files[*]} -1]);
if [ $[$i%2] -eq 0 ];then
let Lines+=$(wc -l ${files[$i]} | Cut -d' ' -f1)
Fi
done
echo "Lines: $lines."
配列内の参照要素:
すべての要素: ${AR RAY [@]} , ${ARRAY[*]}
配列のスライス: ${ARRAY[@]:offset:number}
offset: スキップされる要素の数
number: スキップされる要素数値を取得し、オフセット後のすべての要素を取得します: ${ARRAY[@]:offset}; 要素を配列に追加します:
ARRAY[${#ARRAY[*]}]
配列内の要素を削除します:
unset ARRAY[INDEX]
連想配列:
declare -A ARRAY_NAME
ARRAY_NAME=([インデックス名1]=' val1' [index_name2]='val2' ...)
bashの文字列処理ツール:
文字列スライス:
${var:offset:number}
文字列の右端の文字を取得します: ${var: -lengh}
注: コロンの後には空白文字が必要です
パターンに基づいて部分文字列を取得します:
${var#*word}: word には指定された任意の文字を指定できます。関数: var 変数に格納された文字列内で最初に出現した word を左から右に検索し、先頭から最初の単語を削除します。
${var##*word}: 上記と同じですが、削除されるのは、文字列の先頭と word で指定された最後の文字の間のすべてです。
file="/var/log/messages"
${file##*/}: メッセージ
${var%word*}: ここで、word は指定された任意の文字です。 function : 右から左に、var 変数に格納された文字列内で最初に出現した word を検索し、文字列の最後の文字と最初に出現した word の間のすべての文字を削除します。
file= "/var/ log/messages"
${file%/*}: /var/log
${var%%word*}: 文字列の右端の部分が削除されることを除いて、上記と同じです。左から単語文字の最後の出現の間のすべての文字: url=:80
${url##*:}
${url%%:* }
検索と置換:
${var/pattern/substi}: var で表される文字列内で pattern に一致する最初の文字列を検索し、それを
${var //pattern/substi}: var で表される文字列内の pattern に一致するすべての文字列を検索し、それらを substi に置き換えます
${var/#pattern /substi}: に一致する文字列を検索します。 var で表される文字列の行の先頭にある pattern を検索し、それを substi に置き換えます
${var/%pattern/substi}: var で表される文字列を検索し、末尾の pattern に一致する文字列を置き換えます。 substi を含む行の
を検索して削除します:
${var/pattern}: var で表される文字列を検索し、pattern に一致する文字列を 1 回削除します
${var/ /pattern}:
${var/#pattern}:
${var/%pattern}:
大文字と小文字の変換:
${var^^}: 変換var 内のすべての小文字を大文字に変換します。
${var,,}: var 内のすべての大文字を小文字に変換します。
変数の割り当て:
${var:-value}: var が空であるか設定されていない場合は、戻ります。 value; それ以外の場合は、var の値を返します。
${var:=value}: var が空であるか設定されていない場合は、value を返し、それ以外の場合は var の値を返します。
${var:+value}: var が空でない場合は値を返します。
${var:?error_info}: var が空であるか設定されていない場合は error_info を返し、それ以外の場合は値を返します。 var;
スクリプト プログラムの設定ファイルを使用します:
(1) テキスト ファイルを定義し、各行に "name=value" を定義します
(2) これをスクリプト ファイルのみ
コマンド:
mktemp コマンド:
mktemp [OPTION]... [TEMPLATE]
TEMPLATE: filename.XXX
XXX 少なくとも 3 つ出現するそれぞれ;
オプション:
--tmpdir=/PATH/TO/SOMEDIR: 一時ファイルディレクトリの場所を指定します。 :
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE。 ..
[オプション]をインストール... -d DIRECTORY...
オプション:
-m MODE
-o OWNER
- g GROUP
GNU awk:
テキスト処理用の 3 つのツール: grep、sed、awk
grep、egrep、fgrep: テキスト フィルタリング ツール。
sed: ラインエディター
パターンスペース、ホールドスペース
awk: レポートジェネレーター、フォーマットされたテキスト出力
AWK: Aho、Weinberger、Kernighan --> 新しい AWK、NAWK
GNU awk、gawk
gawk - パターンスキャンおよび処理言語
基本的な使用法: gawk [オプション] 'プログラム' FILE ...
プログラム:声明文}
ステートメントはセミコロンで区切ります
print、printf
オプション:
-F: 入力時に使用するフィールド区切り文字を指定します。
V-V VAR = 値: カスタム変数;
1, Print
print item1, item2, ...
(1) カンマ区切り文字
(2)各出力項目は、現在のレコードのフィールド、変数、または数値です。
(3) 項目が省略された場合は、 $0 を出力するのと同等です。 2. 変数
2.1 組み込み変数
FS: 入力フィールドの区切り文字、デフォルトは空白文字です。
OFS: 出力フィールドの区切り文字、デフォルトは空白文字です。
RS: 入力レコード区切り文字、入力時の改行文字;
ORS: 出力レコード区切り文字、出力時の改行文字
NF: フィールドの数、フィールドの数
{ print NF}、{print $NF}
NR: レコード数、行数;
FNR: 各ファイルの行数をカウントします。
ARGC: コマンドラインパラメータの数;
ARGV: コマンドラインで指定されたパラメータを保存する配列
2.2 カスタム変数
(1) -v var=value
変数名は大文字と小文字が区別されます。
(2) プログラム内で
3 を直接定義します。
化出力: printf FORMAT、item1、item2、...
(1) FORMAT を指定する必要があります。
(2) 自動的に折り返されず、改行制御文字 n
を明示的に指定する必要があります。
(3) FORMAT では、後続の各項目に書式設定記号を指定する必要があります。
%c: 文字の ASCII コードを表示します。 , %i: 10 進整数を表示します。科学表記法での値、または浮動小数点形式で数値を表示します。
%u: % 自体を表示します。修飾子:
#[.#]: 最初の数値は表示の幅を制御します; 2 番目の # は小数点以下の精度を示します
%3.1f
-: 左揃え
+: 数値を表示 記号
4、演算子
算術演算子:
x+y、x-y、x*y、x/y、x^y、x %y
-x
+x: 数値に変換します。
文字列演算子: 符号なし演算子、文字列連結
代入演算子:
=、+ =、-=、*=、/=、%=、^=
++、--
比較演算子:
>、>=、<、< =、!=、==
パターンマッチング演算子:
~: 一致するかどうか
!~: 一致しないかどうか
論理演算子:
&&
||
!
関数呼び出し:
function_name(argu1, argu2, ...)
Cond条件式:
セレクター? if-true-expression:if-false-expression
# awk -F: '{$3>=1000?usertype="共通ユーザー":usertype="Sysadmin または SysUser";printf "% 15s: %-sn",$1,usertype}' /etc/passwd
5, PATTERN
(1) 空: 空のパターン、すべての行に一致;
(2) /normal式/: ここではパターンと一致する行のみを処理します。
(3) 関係式: 結果は「true」または「false」になります。結果が「true」の場合にのみ処理されます。 value、空でない文字列;
(4) line ranges: line ranges,
startline, endline:/pat1/,/pat2/
注: 数値を直接与える形式はサポートされていません
~] # awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd
(5) BEGIN/END モード
BEGIN{ }: ファイルの処理を開始します。テキストの前に 1 回だけ実行されます。
6. 共通のアクション
(1)式
(2) 制御ステートメント: if、while など;
(3) 複合ステートメント: 組み合わせステートメント
(4) 入力ステートメント
(5) 出力ステートメント
7. 制御ステートメント
if(条件) {ステートメント}
if(条件) {ステートメント} else {ステートメント}
while(条件) {ステートメント}
do {statements} while(condition)
for(expr1;expr2;expr3) {statements}
break
Continue
delete array[index]
配列を削除
終了
{ ステートメント }
7.1 if-else
構文: if (条件) ステートメント [else ステートメント]
~]# awk - F: '{if($3>= 1000) {printf "共通ユーザー: %sn",$1} else {printf "root または Sysuser: %sn",$1}}' /etc/passwd
~]# awk -F: '{if ($NF=="/bin/bash") print $1}' /etc/passwd
~]# awk '{if(NF>5) print $0 }' /etc/fstab
~]# df -h | awk -F[%] '/^/dev/{print $1}' awk '{if($NF>=20) print $1 }'
使用シナリオ: awk で取得した行全体または特定のフィールドに対して条件判定を行う
7.2 while ループ
文法: while (条件) 文
条件 "true"、ループに入ります; 条件 "false" 、ループを終了します;
使用シナリオ: 複数のフィールドを 1 つずつ処理する場合に使用され、配列内の各要素を 1 つずつ処理する場合に使用されます。 1 つずつ;
~]# awk '/ ^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); }}' /etc/grub2.cfg
~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($ i)>=7) {print $i,length($ i)}; i++}}' /etc/grub2.cfg
7.3 do-while ループ
構文: do ステートメント while(条件)
意味: ループ本体を少なくとも 1 回実行する
~ ]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg
特別な使用法:
は配列内の要素を走査できます
構文: for (var in array) {ボディ用}
7.5 switch ステートメント
構文: switch(expression) {case VALUE1 または /REGEXP/: ステートメント; case VALUE2 または /REGEXP2/: ステートメント}
7.6 Break and continue
break [n]
Continue
7.7 next
この行の処理を早めに終了し、直接次の行に進みます
~] # awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd
8, array
連想配列: 配列[index-expression]
index-expression:
(1) 任意の文字列を使用できます。文字列には二重引用符を使用する必要があります。
(2) 配列要素が存在しない場合引用符で囲むと、awk は自動的にこの要素を作成し、その値を「空の文字列」に初期化します。 weekdays[mon]="Monday"
配列内の各要素を反復するには、for(var in array) {for-body}
を使用します。 ~]# awk 'BEGIN{weekdays["mon"]="月曜日";weekdays["tue"]="火曜日";for(i in平日) {print Weekdays[i]}}'
注: var は配列の各インデックスを走査します。 '/^tcp>/{state[$NF]++}END{for(i in state) { print i,state[i]}}'
~]# awk '{ip[$1] ++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log
1: /etc/fstab 内の各ファイル システム タイプの統計ファイルの出現回数;
~]# awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab
2: 指定されたファイル内の各単語の出現数をカウントします
~]# awk '{for(i=1;i<=NF;i++){count[$i]+ +}} END{for(i in count) {print i,count[i]}}' /etc/fstab
9, function
9.1 組み込み関数
数値処理:
rand(): 0 から 1 までの乱数を返します。
文字列処理:
length([s]): 指定された文字列の長さを返します。
sub( r,s,[t]): r で表されるパターンを使用して、t で表される文字内の一致するコンテンツを検索し、その最初の出現を s で表されるコンテンツに置き換えます。 , s,[t]): r で表されるパターンを使用して、t で表される文字内の一致するコンテンツを検索し、その出現箇所をすべて s で表されるコンテンツに置き換えます。 ,r]): r を区切り文字として使用して文字 s を切り取り、切り取った結果を a; で表される配列に保存します。 ($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}'
9.2 カスタマイズ機能
《sedとawk》
DNF 新しい世代の RPM パッケージ マネージャー。これは Fedora 18 で初めて登場しました。
DNF パケット マネージャーは、YUM パケット マネージャーのいくつかの問題を克服し、ユーザー テスト、内部保存、分析への依存を強化しました。
DNF は、RPM、libsolv、および hawkey パッケージを使用してパケット管理操作を実行します。 CentOS および RHEL 7 には事前にインストールされていませんが、YUM を使用しながら DNF を使用できます。
DNF の最新の発行バージョンは 1.0 で、発行日は 2015 年 5 月 11 日です。 このバージョンの DNF パケット管理者 (他の以前のすべてのバージョンを含む) の大部分は Python を使用しており、発行されています。 GPL v2 にすることができます。
YUM の依存関係解決は悪夢であり、SUSE ライブラリ 'libsolv' と Python ラッパーと C Hawkey を使用して DNF で解決されました。
YUM には文書化された API がありません。
新しい機能の構築は困難です。
Python 以外の拡張機能はサポートされていません。
メモリの削減が少なく、メタデータの自動同期が少なく、時間のかかるプロセスです。

以上がLinuxシステムの基礎(2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。