Linux shell 整理之 基本概念篇(二)


參考文章系列

Linux shell 整理之 基本概念篇(一)

Linux shell 整理之 基本概念篇(二)

Linux shell 整理之 用戶權限篇(三)

shell三種登錄模式

1. 登錄shell模式

用戶通過ssh /tty 方式(ctrl+alt+F1…F7)等登錄方式登錄的模式

特點 
1. 會加載 /etc/profile 中的代碼塊
2. 在之前的基礎上依次加載登錄用戶home目錄中的 /home/.bash_profile(.bashrc)(.bash_login)(.profile) 文件定義的變量與函數

2. 交互式shell模式

在登錄模式內(用戶登錄狀態下),用戶使用bash命令或者在GUI等桌面情況下創建的terminal,此時會繼承當前登錄shell模式下的變量.

特點

1. 不加載 /etc/profile代碼塊,意味着即使在當前交互式shell模式下修改了/etc/profile中暴露的變量,也不會在新創建的交互式shell模式中顯示新的被修改結果,如果要使修改之後的變量生效,有兩種方法
 
a) 臨時生效
宏方法(C++ 中的內聯函數/#define)
  source /etc/profile

b) 永久生效
重新新建一個登錄模式的terminal,或者重啓
2. 很顯然,會加載 /home/$USER/.bash_profile(.bashrc)(.bash_login)(.profile) 中的代碼塊, 而且每次新建交互式shell模式都會加載這些文件,因此,在這些模塊中修改暴露的變量

3. 非交互式shell模式

運行可執行文件所處的狀態,可以理解爲 無提示符的模式

後臺進程 (daemon)

通過 top 查看被掛起的進程ip

普通命令轉換爲後臺進程的方式

  1. 通過 &指定

    並通過jobs查看,但是一旦退出當前會話(shell),進程就會結束,這樣也好理解

  2. 通過nohup 。。。 & 指定

    通過nohup 是忽略(免疫)掛斷信號的,也就是說當以遠程terminal連接到服務器的時候,通過nohup 執行一條命令,即使當前會話被各種原因(人爲。網絡環境)掐斷了,nohup說包裹的命令也不會接收到掛斷信號,也就不會停止了

# man nohup
NAME
       nohup - run a command immune to hangups, with output to a non-tty
        執行一條免疫掛斷的命令,不在普通的tty終端輸出結果
SYNOPSIS
       nohup COMMAND [ARG]...
       nohup OPTION

DESCRIPTION
       Run COMMAND, ignoring hangup signals.
       忽略掛斷信號

子shell (非後臺)(child shell 也叫 subshell這兩者是等價的)

進入子shell的三種方式

$1 (ls;pwd;echo $BASH_SUBSHELL)(進程列表)
$2 coproc sleep 10 (協程)
$bash (/bin/bash啓動命令)

特點

1. 子shell無法修改全局變量的值,但是會繼承父shell暴露的全局變量

無論是修改,刪除(unset)變量都不會影響父shell中暴露的變量,但是會影響子shell進程,畢竟子shell是通過父shell繼承的

$ my_var="I am"
$ export my_var
$ bash
$ my_var="I am sub"
$ echo $my_var
    I am sub
$ exit
$ echo $my_var
    I am
2. 子shell同樣不會獲取父進程的局部變量

這個與一般的高級語言中有些出入,不過也好理解,在子shell中意味這是被開闢一個新的進程用來執行代碼段的,不過在開闢新進程的時候會繼承父進程所暴露(export)的變量.但不會傳遞父進程的局部變量(沒有export的變量)

3. BASH_ENV 環境變量

默認情況下 BASH_ENV是沒有設置的,所以很多用戶也不會去關注它,但是它的存在,爲一些實際情況提供了便利

比如,有些變量不想暴露給登錄模式/交互式模式,只是想在非交互式環境中能使用的變量,那麼設置BASH_ENV就非常有意義

環境變量什麼時候加$ ,什麼時候不需要

在想要獲取值的場景加$,而操作變量的時候不用

文件管理系統

文件類型

ext

extended system 在基本的unix文件系統的基礎上做的一個擴展

擴展的內容

  1. 文件名
  2. 文件大小
  3. 文件的屬主
  4. 文件的屬組
  5. 文件的訪問權限
  6. 指向存有文件數據的每個硬盤塊的指針

該系統核心之一時使用索引節點號來標誌文件(搜索,查找,刪除等等,都是通過這個id,該id存在內核中的索引節點表中)

ext2

在ext基礎上擴展
k擴展內容

  1. 支持文件大小 由ext(2g) 到 2T (32T)進發,適用於數據庫的存儲
  2. 分配磁盤,優化ext(磁盤碎片導致搜索性能降低)

缺點
如果計算機系統在存儲文件和更新索引節點表之間發生了什麼,這二者的內容就不同步了。
ext2文件系統由於容易在系統崩潰或斷電時損壞而臭名昭著。即使文件數據正常保存到了物理設備上,如果索引節點表記錄沒完成更新的話,ext2文件系統甚至都不知道那個文件存在!
元數據就是保存在索引節點表中

日誌服務系統

在hbase中也有相關的思想 wal

其擴展了 ext2
原理
在文件更改寫入臨時文件(journal),等到文件成功寫入磁盤中,再刪除臨時文件
根據寫入臨時文件的數據類型分爲

表8-1 文件系統日誌方法

方 法 描 述
數據模式 索引節點和文件都會被寫入日誌;丟失數據風險低,但性能差

有序模式 只有索引節點數據會被寫入日誌,但只有數據成功寫入後才刪除;在性能

和安全性之間取得了 良好的折中

回寫模式 只有索引節點數據會被寫入日誌,但不控制文件數據何時寫入;丟失數據風險高,但仍比不用 日
ext3

默認爲有序模式,折中方案,可以通過命令修改日誌模式

ext4

在ext3的基礎上添加,加密,壓縮,誤刪恢復等等功能

  1. Reiser文件系統 ===> 只支持回寫日誌模式
  2. JFS 文件系統 ===> 有序日誌模式
  3. XFS 文件系統 ===> 系統採用回寫模式的日誌
寫時複製文件系統 copy-on-write,COW

特點:
在修改文件的時候,只是在另一塊磁盤中添加修改的記錄,並不覆蓋原有數據,在合適的時間進行合併??
B tree 節點可刪可增加
Btrf文件系統
能夠動態調整已掛載文件系統的大小

操作文件系統實戰

核心指令 fdisk 分盤

# fdisk -l
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 1832AEB2-F335-4847-8271-1E2C04174EED

Device          Start        End    Sectors   Size Type
/dev/sda1        2048    1050623    1048576   512M EFI System
/dev/sda2     1050624 1936914431 1935863808 923.1G Linux filesystem
/dev/sda3  1936914432 1953523711   16609280   7.9G Linux swap

目前系統有三個分區

進入sda2分區中

homewell:/home/hadoop/shareh/abcd$ sudo fdisk /dev/sda2
[sudo] password for homewell: 

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

/dev/sda2: device contains a valid 'ext4' signature; it is strongly recommended to wipe the device with wipefs(8) if this is unexpected, in order to avoid possible collisions

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x6508267c.



主分區

系統直接格式化的分區
默認一個分區中如上面的sda2分區中,只有4個主分區
所以再進行劃分的時候想要多於4個分區,那麼,至少其中一個是擴展分區,用來擴展邏輯上的分區

擴展分區

用來支持邏輯分區的分區,在擴展分區中可以定義多個擴展分區
缺點肯定是性能不好啊,要多繞幾個彎才能找到數據

常用的fdisk 命令

 m => 查看相關指令
 l => 查看相關文件系統格式及其標誌碼
 p => 查看當前分區的情況,是否有分區,分區的情況
 n => 創建一個新分區,並根據提示依次創建 分區類型,大小,
 w => write 保存退出

查看系統支持的系統文件類型

homewell:/home/hadoop/shareh/abcd$ type mkefs
-bash: type: mkefs: not found
homewell:/home/hadoop/shareh/abcd$ type mke2fs
mke2fs is /sbin/mke2fs
homewell:/home/hadoop/shareh/abcd$ type mkfs.ext3
mkfs.ext3 is /sbin/mkfs.ext3
homewell:/home/hadoop/shareh/abcd$ type mkfs.ext4
mkfs.ext4 is /sbin/mkfs.ext4
homewell:/home/hadoop/shareh/abcd$ type mkreiserfs
-bash: type: mkreiserfs: not found
homewell:/home/hadoop/shareh/abcd$ type jfs_mkfs
-bash: type: jfs_mkfs: not found
homewell:/home/hadoop/shareh/abcd$ type mkfs.xfs
-bash: type: mkfs.xfs: not found
homewell:/home/hadoop/shareh/abcd$ type mkfs.zfs
-bash: type: mkfs.zfs: not found
homewell:/home/hadoop/shareh/abcd$ type mkfs.btrfs
-bash: type: mkfs.btrfs: not found

啓動直接掛載磁盤

核心文件 /etc/fstab

默認分區之後需要

# mount -t ext4 /dev/sdba /home/someplace

此係統重啓之後是不會自動掛載的
需要在覈心文件中掛載磁盤

homewell:/home/hadoop/shareh/abcd$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=aef31698-9b53-4c50-9148-1eacc2f14ce8 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=F934-6BE1  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/sda3 during installation
UUID=0317d445-f233-46a1-b89a-a5a57ff262d6 none            swap    sw              0       0

文件修復

計算機不是萬能的,她也有脆弱的時候,一旦斷電或者程序出現問題,會有一定的小概率出現數據損壞,如何修復是一件很頭痛的事情,不過有這麼一個前端腳本命令(fsck)能夠根據系統分配的唯一的分區id(UUID),來對其上的塊的類型做修復

前提是要umount才能修復

邏輯卷管理

一般,要對磁盤進行擴容,不得不先copy一份數據到新的大磁盤中,然後再掛載,這樣太麻煩

但是在邏輯卷管理的世界中,不必這麼麻煩.

在其中的有兩大非常重要的概念

邏輯卷(LV)

在物理世界中相當於物理磁盤分區(C盤,D盤,E盤等等)
是邏輯卷管理系統管理的單位

特點

因爲是邏輯的,所以可以跨磁盤 ,以不同磁盤上的物理分區同時加載到一塊邏輯卷中

卷組 (VG)

邏輯卷的組合,也就是卷組.在邏輯卷管理系統中,對待卷組相當於操作系統對待一塊物理磁盤.

也就是說多個邏輯卷一起組成一塊卷組.邏輯卷管理系統在邏輯上動態管理添加邏輯卷,並把它加入卷組中,而不必像物理磁盤那樣換一塊新的大磁盤.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章