0%

[RHCE] RH124 Chapter 1~3 學習筆記

Introduction

Internationalization

若想要讓 desktop & console 環境的語系一致,可以加入以下的 script 到 ~/.bashrc 中

1
2
3
4
5
i=$(grep 'Language' /var/lib/AccountsService/users/${USER} | \
sed 's/Language=//')
if [ "$i" != "" ]; then
export LANG=$i
fi

透過 locale 可以查詢目前語系相關的設定 & 環境變數:

1
2
3
4
$ locale
LANG=zh_TW.UTF-8
.....(LANG-related environment variables)
LC_ALL=

若要修改整個系統的預設語系,可以透過以下指令:

1
$ localectl set-locale LANG=zh_TW.UTF-8

或是修改 /etc/locale.conf 檔案的內容:

1
2
$ cat /etc/locale.conf
LANG=zh_TW.UTF-8

Chapter 1. ACCESSING THE COMMAND LINE =====================================

1.1 Accessing the Command Line Using the Local Console

Virtual Console

在 RHEL 7 中,若有 GUI 環境,則會預設執行在第一個 virtual console,另外還會包含 5 個文字模式的 virtual console,可使用 Ctrl + Alt + F[1-6] 在不同的 virtual console 間切換。

若沒有 GUI 環境,則 6 個 virtual console 都會是純文字模式。

要調整 virtual console 的數量,可修改 /etc/systemd/login.conf 中的 NAutoVTs 的選項,

1.2 Accrssing the Command Line Using the Desktop

Windows 連線至 Linux GUI

要從 Windows 連線到 Linux GUI,可使用 pietty + Xming

使用說明可參考 => 八克里: 使用 xming 從windows 系統登入 Linux 系統

Auto Login

要在 RHEL 7 作到 Auto Login,要修改 /etc/gdm/custom.conf,並調整 daemon section 中的 AutomaticLoginEnable & AutomaticLogin 兩個參數

1.3 Executing Commands Using the Bash Shell

Examples of simple commands

file 可用來檢查檔案的型態 & 格式 (也可以用 stat)

1
2
3
4
5
$ file /etc/passwd
/etc/passwd: ASCII text

$ file /bin/passwd
/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x91a7160a019b7f5f754264d920e257522c5bce67, stripped
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ stat /etc/passwd
File: ‘/etc/passwd’
Size: 961 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1573453 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2016-01-20 07:38:22.557000000 -0500
Modify: 2015-10-02 10:38:00.710867846 -0400
Change: 2015-10-02 10:38:00.710867846 -0400
Birth: -

$ stat /bin/passwd
File: ‘/bin/passwd’
Size: 27832 Blocks: 56 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 2234382 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_exec_t:s0
Access: 2014-06-10 02:27:56.000000000 -0400
Modify: 2014-06-10 02:27:56.000000000 -0400
Change: 2015-10-02 10:30:36.743867846 -0400
Birth: -

# 甚至可以直接針對目錄來檢查
$ file /home
/home: directory

Editing the command Line

使用 command line 的實用快速鍵:

快速鍵 說明
Ctrl + a 游標跳至最前
Ctrl + e 游標跳至最後
Ctrl + u 清除整個命令中,從游標到最前面的內容
Ctrl + k 清除整個命令中,從游標到最後面的內容
`ESC + . 複製上一個命令中的最後一個參數到目前的命令中
`Alt + . 同上
Ctrl + r 可用 keyword 來尋找最近使用過的命令
Ctrl + l(小寫 L) 清除螢幕內容(效果等同 clear)

Chapter 2. MANAGING FILES FROM THE COMMAND LINE ===============================================

2.1 The file system hierarchy

RHEL 中的重要目錄:

路徑 目的
/usr
(Unix Software Resource)
安裝的軟體、shared library … 等資料都會放在此處,其中幾個重要目錄:
/usr/bin:使用者用指令
/usr/sbin:系統管理者用指令
/usr/local:使用者自行安裝的軟體
/etc 設定檔存放路徑
/var 持續不斷變動的資料,例如 log、print spool、資料庫檔案 … 等等
/run 從上次開機以來的 runtime 資訊(此目錄的資料在每次重開機都會清空)
/tmp 所有人都有權限存取的站存資料目錄(此目錄中日期大於 10 天的資料會被自動清除),若是在目錄 /var/tmp 中的資料,則是超過 30 天的資料會被清除
/boot 系統開機所需要的檔案
/dev 存放系統用來存取硬體裝置所需要的檔案

原本在 / 下的某些目錄,在 RHEL 7 後都被移到 /usr 下了,包含 /bin(=> /usr/bin)、/sbin(=> /usr/sbin)、/lib(=> /usr/lib)、/lib64(=> /usr/lib64)
但原本在 / 的以上四個目錄都還存在,只是改成用 symbolic link 的方式連到 /usr 中的子目錄

詳細資料可查詢 hier(7) man page

1
$ man 7 hier

2.2 Locating Files by name

檔名限制 & 特性:

  1. 完整檔案路徑長度不能超過 4095 bytes (含 /)

  2. 兩個 / 之間的長度不能超過 255 bytes

  3. 檔名可以是任意的 UTF-8 字元,但不能是 / & NUL

  4. Case-Sensative

  • touch

    touch 會更新檔案的 timestamp 到目前的時間,而不會改變檔案內容
    若是不存在的檔案,則會建立一個空白檔案

1
2
3
4
5
[vagrant@server ~]$ touch /tmp/test{1,2}.txt
[vagrant@server ~]$ ls -l /tmp/
total 0
-rw-rw-r--. 1 vagrant vagrant 0 Jan 30 00:23 test1.txt
-rw-rw-r--. 1 vagrant vagrant 0 Jan 30 00:23 test2.txt

2.3 Managing Files Using command-Line Tools

1
2
# 保留複製檔案的屬性
$ cp -a

2.4 Matching File Names Using Path Name Expansion

File globbing: path name Expansion

Pattern Matches
~+ 目前工作目錄
~- 上一個工作目錄
[abc...] 任何在中括號中的字母都符合
[!abc...] 不包含中括號中的任何一個字母
[^abc...] 同上
[[:punct:]] 任何可印出來的字元(但不包含空白 or 英文字母)

Brace Expansion

1
2
3
4
5
6
7
8
9
10
11
[vagrant@server ~]$ echo {Sunday,Month,Tuesday}.lo
Sunday.log Month.log Tuesday.log

[vagrant@server ~]$ echo file{a..c}.txt
filea.txt fileb.txt filec.txt

[vagrant@server ~]$ echo file{a,b}{1,2}.txt
filea1.txt filea2.txt fileb1.txt fileb2.txt

[vagrant@server ~]$ echo file{a{1,2},b,c}.txt
filea1.txt filea2.txt fileb.txt filec.txt

Command Substitution

  • 單引號中的變數 $ 無效

  • 雙引號中的變數 $ 有效

  • 較推薦加大括號確定變數名稱的方式,比較不容易跟單引號混淆

1
2
3
4
5
[vagrant@server ~]$ echo Today is `date +%A`
Today is Saturday

[vagrant@server ~]$ echo The time is $(date +%M) minutes past $(date +%l%p)
The time is 33 minutes past 8AM

2.5 Lab: Managing Files with Shell Expansion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[vagrant@server lab]$ touch tv_season{1,2}_episode{1..6}.ogg
[vagrant@server lab]$ ls
tv_season1_episode1.ogg tv_season1_episode3.ogg tv_season1_episode5.ogg tv_season2_episode1.ogg tv_season2_episode3.ogg tv_season2_episode5.ogg
tv_season1_episode2.ogg tv_season1_episode4.ogg tv_season1_episode6.ogg tv_season2_episode2.ogg tv_season2_episode4.ogg tv_season2_episode6.ogg

[vagrant@server lab]$ touch mystery_chapter{1..8}.odf
[vagrant@server lab]$ ls
mystery_chapter1.odf mystery_chapter4.odf mystery_chapter7.odf tv_season1_episode2.ogg tv_season1_episode5.ogg tv_season2_episode2.ogg tv_season2_episode5.ogg
mystery_chapter2.odf mystery_chapter5.odf mystery_chapter8.odf tv_season1_episode3.ogg tv_season1_episode6.ogg tv_season2_episode3.ogg tv_season2_episode6.ogg
mystery_chapter3.odf mystery_chapter6.odf tv_season1_episode1.ogg tv_season1_episode4.ogg tv_season2_episode1.ogg tv_season2_episode4.ogg

[vagrant@server lab]$ mkdir -p Videos/season{1,2}
[vagrant@server lab]$ ls Videos/
season1 season2

[vagrant@server lab]$ mv tv_season1* Videos/season1/
[vagrant@server lab]$ mv tv_season2* Videos/season2/
[vagrant@server lab]$ ls -R Videos/
Videos/:
season1 season2

Videos/season1:
tv_season1_episode1.ogg tv_season1_episode2.ogg tv_season1_episode3.ogg tv_season1_episode4.ogg tv_season1_episode5.ogg tv_season1_episode6.ogg

Videos/season2:
tv_season2_episode1.ogg tv_season2_episode2.ogg tv_season2_episode3.ogg tv_season2_episode4.ogg tv_season2_episode5.ogg tv_season2_episode6.ogg

[vagrant@server lab]$ mkdir -p ./my_bestseller ./chapters

[vagrant@server lab]$ mkdir ./my_bestseller/{editor,plot_change,vacation}
[vagrant@server lab]$ ls ./my_bestseller/
editor plot_change vacation

[vagrant@server lab]$ cd chapters/
[vagrant@server chapters]$ mv ../*chapter*.odf ./

[vagrant@server chapters]$ mv mystery_chapter{1,2}.odf ../my_bestseller/editor/

[vagrant@server chapters]$ mv mystery_chapter{7,8}.odf ../my_bestseller/vacation/

[vagrant@server chapters]$ cd ../Videos/season2/
[vagrant@server season2]$ cp tv_season2_episode1.ogg ../../my_bestseller/vacation/

[vagrant@server season2]$ cd /tmp/lab/my_bestseller/vacation/
[vagrant@server vacation]$ ls
mystery_chapter7.odf mystery_chapter8.odf tv_season2_episode1.ogg
[vagrant@server vacation]$ cd ~-
[vagrant@server season2]$ cp tv_season2_episode2.ogg ~-
[vagrant@server season2]$ cd ~-
[vagrant@server vacation]$ ls
mystery_chapter7.odf mystery_chapter8.odf tv_season2_episode1.ogg tv_season2_episode2.ogg

[vagrant@server vacation]$ cp /tmp/lab/chapters/mystery_chapter5.odf /tmp/lab/my_bestseller/plot_change/mystery_chapter5_$(date +%F).odf
[vagrant@server vacation]$ cp /tmp/lab/chapters/mystery_chapter5.odf /tmp/lab/my_bestseller/plot_change/mystery_chapter5_$(date +%s).odf
[vagrant@server vacation]$ cp /tmp/lab/chapters/mystery_chapter5.odf /tmp/lab/my_bestseller/plot_change/mystery_chapter5_$USER.odf
[vagrant@server vacation]$ ls /tmp/lab/my_bestseller/plot_change/
mystery_chapter5_1455368579.odf mystery_chapter5_2016-02-13.odf mystery_chapter5_vagrant.odf

Chapter 3. GETTING HELP IN RED HAT ENTERPRISE LINUX ===================================================

3.1 Reading Documentation Using man Command

3.1.1 Introducing the man command

Linux manual 包含多個 section:

Section Content Type
1 一般使用者命令(包含可執行程式 & shell script)
2 System calls(kernal routines invoked from user space)
3 Library functions (程式函式庫提供)
4 特殊檔案(例如:設備檔 /dev 目錄中的檔案)
5 檔案格式(設定檔 & 內容結構說明)
6 Games
7 慣例、標準、其他…等等(協定、檔案系統)
8 系統管理員以及特殊指令(用於維護工作)
9 Linux kernal API (internal kernel calls)

man 1 passwd or man passwd(未指定 section 則預設帶 1) 可以知道使用指令的方式 & 相關參數

man 5 passwd 則是說明 /etc/passwd 的檔案結構,組成內容….等資訊

以上資訊要安裝 man-pages 套件才會有

3.1.3 Searching for man pages by keywords

小寫 k 僅針對 title & description 搜尋關鍵字:

1
2
3
[vagrant@server ~]$ man -k passwd
grub2-mkpasswd-pbkdf2 (1) - Generate a PBKDF2 password hash.
sslpasswd (1ssl) - compute password hashes

大寫 K 會進行全文搜尋…..內容很多…

透過 mandb 指令可以立即強制 man page 資料庫更新,但系統其實已經將更新資料庫的工作放在 /etc/cron.daily/man-db.cron 中。

3.2 Reading Documentation Using pinfo Command

info 文件是以類似超連結網頁的方式進行編排,透過 pinfo 指令來啟動 lynx 文字網頁瀏覽器來瀏覽。

-- 在指令中代表 command option 的結束,表示後面接的是 command argument,例如:touch -- -r 會產生名稱為 -r 的檔案。