Linux基本指令(包含vim,用戶,文件等方面)超詳細

文章目錄

  • Linux 基本指令
  • 前序
  • Vim
    • 編輯器分為兩種
    • 設計理念
    • 模式
      • 轉化指令解釋
    • Normal模式
      • 移動光標(motion 核心)
        • 常用指令
      • 動作(action)
        • 常用指令
          • 將動作與移動進行組合
      • 查找(正則表達式)
      • 替換(substitude)
      • 文本對象
        • action + textobj
          • 文本對象與motion的區別
      • 多窗口
      • 對文件的操作
        • 常用指令
    • 視圖模式(visual)
        • 批量注釋
  • Linux模型(體系結構)
  • 用戶子系統命令
    • linux用戶
    • 命令
  • 常用命令
    • 查看幫助手冊
  • 文件子系統
    • 常見目錄
    • 與目錄有關的指令
      • 查看當前工作目錄(pwd)
      • 改變當前工作目錄(cd)
      • 創建目錄(mkdir)
      • 刪除空目錄(rmdir)
      • 通配符
      • 查看目錄內容(ls)
        • 查看目錄項的詳細信息
      • 以樹狀結構顯示目錄內容(tree)
      • 復制文件或目錄(cp)
      • 文件和目錄的移動或重命名(mv)
      • 刪除文件和目錄(rm)
    • 文件相關指令
      • 創建文件
      • 查找文件
        • which
        • find
      • 查看文件內容
        • cat
        • head
        • tail
        • less(more)
    • 重定向
    • 搜索文件內容
        • grep
    • 正則表達式
    • 命令的組合
        • |(管道)
    • 改變文件權限
        • chmod
    • 文件創建掩碼
      • umask
    • 鏈接
      • ln
    • 遠程復制
      • scp
    • 打包壓縮
      • tar(text archive)
    • 別名
      • alias

Linux 基本指令

前序

如果使用虛擬機

? 在關機之前要先將虛擬機關閉

  • shutdown
    • -h --halt
      • Halt the machine(停止系統并關閉電源 加 now 會馬上關機如果在服務器等環境中只是停止系統運行,不會直接切斷電源)
    • -p --poweroff
      • Power-off the machine(默認)
    • -r --reboot
      • Reboot the machine(重啟計算機)
    • -c
      • Cancle a pending shutdown(取消關機)

Vim

編輯器分為兩種

  • 所見及所得(編輯模式)

  • 多模式(在不同模式下,可以左不同的事情)

設計理念

  • 組合
    • 例如在 Vim 中,“d” 表示刪除,“j” 移動到下一行,組合 “dj” 表示刪除當前行和下一
      行;“^” 代表行首,故組合 “d^” 表示刪除到行首;“ " 代表行尾, " d " 代表行尾,"d "代表行尾,"d” 表示刪除到
      行尾。而且我們還可以指定命令重復的次數:“dd” 表示刪除光標所在行,“2dd” 或
      “d2d” 表示連續刪除兩行,效果和 “dj” 一致。
  • 簡單,快捷

模式

Vim 有多種模式,最常用的是:普通(命令)模式、插入(編輯)模式和視圖模式。這些模式之間可以相互轉換,如下圖所示:

  • 普通模式(Normal)

  • 視覺模式(又叫視圖模式)

  • 插入模式

轉化指令解釋

  • 普通模式轉插入模式
    • i (insert) : 在光標前面插入
    • a(after) : 在光標后面插入
    • I(大寫) :在行首插入
    • A :在行尾插入
    • o(open) : 在下面另起一行插入
    • O : 在上面另起一行插入
  • 普通模式轉視覺模式
    • v ( visual) :行選
    • [ctrl + v ] (v-Block) : 豎選

Normal模式

Normal 又叫命令模式,就是用來執行命令的模式。

  • 命令
    • 短命令
      • i a o等命令
    • 底部命令(長命令)
      • :wq[enter]

移動光標(motion 核心)

常用指令
  • h :向左移動

  • j : 向下移動

  • k:向上移動

  • i : 向右移動

  • [n] - : 向上移動 n 行

  • [n] + : 向下移動 n 行

  • :[n] ([n]G):移動到第n行

  • gg : 到文件的第一行

  • G : 到文件的最后一行

  • 0 : 將光標移動到行首

  • ^ : 移動到第一個非空白字符

  • $ : 行尾

  • w (word) : 下一個詞首

    • W (與小寫的w的劃分方式不同 單詞與單詞之間以空白字符分割) : 下一個詞首
  • b (before) : 上一個詞首

    • B(同上): 上一個詞首
  • t(to): t) 向后查找,將光標移動到)的前一個字符

    • T :T" 向前查找,將光標移動到 “ 的后一個字符
  • f(find):向后查找,將光標移動到)

    • F : T" 向前查找,將光標移動到 “

動作(action)

常用指令
  • d (delete) : 刪除

  • y (yank) : 復制

  • c ( change): 刪除并進行插入模式

  • u (undo) : 撤銷

  • [ctrl ] + r (recovery) : 恢復
    -

  • p / P (paste) : 粘貼

將動作與移動進行組合
  • 刪除(delete)文本

Vim 中的刪除類似 Windows 中的剪切,會將刪除的內容復制到 Vim 的"剪切板"中。

  • 復制(yank)文本

  • 修改文本

查找(正則表達式)

  • /pattern : 向下查找 pattern為正則表達式 可以簡單先理解為要查找的字段
  • ?pattern:向上查找
  • n :移動到下一個匹配項
  • N : 移動到上一個匹配項

替換(substitude)

因為linux操作系統循序 最小前綴原則 所以 :q 和 :quit 等效

  • 格式:

    • 😒/pattern/substitute/選項 將匹配pattern的內容替換為substitute

    • 😒/pattern/substitute 只會替換光標所在行的第一個匹配項

    • 😒/pattern/substitute/g 替換光標所在行的所有匹配項 (g for globally)

    • :[m],[n]s/pattern/substitute/g 替換[m,n]行的所有匹配項

    • :%s/pattern/substitute/g 替換全文的所有匹配項

文本對象

action + textobj
文本對象與motion的區別

  • a(, a)
    • 包含邊界
    • a{, a}
    • a[, a]
    • a<, a>
    • a’’
    • a’
    • ap (paragraph)
      • p的就是空行
  • i(, i)
    • 不包含邊界
    • i{, i}
    • i[, i]
    • i<, i>
    • i’’
    • i’
    • ip (paragraph)
      • p的就是空行

多窗口

對文件的操作

常用指令
  • :w :將buffer里面的內容寫入文件中,即保存
  • :q :退出
  • :q!:不保存退出
  • :wq :保存退出
  • 注意:[ctrl] + s 不是保存 ,而是進入僵死狀態;[ctrl] + q 退出僵死狀態

視圖模式(visual)

批量注釋
  • 原生方法

    • [ctrl] + v 切換為豎選模式
    • 選擇要注釋的范圍
    • 輸入I 切換為插入模式
    • 輸入//
    • 輸入ESC
  • 使用vimplus插件

    • gc :g表示轉義 c comment 注釋

    • gdc :注釋一行 或者 解除注釋一行(就是與motion 結合使用)

Linux模型(體系結構)

Linux 的體系結構源自于 Unix,主要分為三層,從內到外依次是:內核 --> 系統調用–> 應用層。

  • 內核(kernel)負責兩個功能:管理計算機硬件資源;為上層應用程序提供運行環境。
  • 系統調用(system calls):內核給上層應用程序提供的接口。
  • 庫函數(library routines):通常我們會把系統調用封裝成庫函數,主要的目的是方便程序員使用。系統調用往往設計得比較繁瑣復雜,相對于系統調用而言,庫函數的設計會更加友好。比如: malloc 、 free 、 printf 、 scanf 等。
  • shell 是一個命令行解釋器,它讀取用戶輸入,然后執行命令,然后等待用戶的下一次輸入。
    shell 擁有很多版本,我們將使用 bash(Bourne-again shell),它位于/bin/bash。

用戶子系統命令

linux用戶

  • root 根目錄,超級用戶 皇帝:擁有至高無上的權利
  • sudoer:管理員用戶 安裝unbantu時,創建的用戶默認為sudoer
    • 可以使用sudo 臨時提升自己的權利
    • 太監
  • 普通用戶

命令

  • 查看所有用戶

    • cat /etc/passwd

    • 每一行對應一條記錄,每條記錄有多個字段,字段之間以 : 分割。我們可以在5號手冊中查看 passwd 文件的格式和規范:

  • 創建用戶

    • useradd [選項] username

      • 常見選項

        • -m – create -home
          • 如果不存在,則創建用戶目錄
        • -s --shell
          • 用戶的登錄使用的shell
      • 例子

        • sudo useradd test1 這樣創建的用戶不會自動創建用戶的家目錄,默認的shell為sh

        • $ sudo useradd -m -s /bin/bash test2 這樣創建的用戶會自動創建用戶的家目錄,并可以指定使用哪個shell

  • 刪除用戶

    • userdel [選項] username

      • 常用選項:
      • -r, --remove 用戶主目錄中的文件將隨用戶主目錄和用戶郵箱一起刪除。
    • 例子

      • sudo userdel test1 這樣刪除用戶,不會刪除用戶的家目錄和用戶的郵箱。

      • $ sudo userdel -r test2 這樣刪除用戶,會把用戶的家目錄和用戶的郵箱一起刪除。

  • 修改用戶密碼

    • man passwd passwd 命令用來更改用戶賬戶的密碼。普通用戶通常只更改其自己賬戶的密碼,而超級用戶可以更改任何賬戶的密碼。

    • passwd [選項] [username]

      • sudo passwd test1

      • sudo passwd root

  • 切換用戶

    • su + 用戶
  • 退出切換

    • exit

常用命令

查看幫助手冊

使用 man(manual) 命令可以查看 Linux 內置的幫助手冊。該手冊分為多卷:第一卷是用來查看 shell 命令的;第二卷是用來查看系統調用相關信息的;第三卷是用來查看庫函數信息的…

  • man命令

    • man [手冊編號] cmd
    • man man
    • man 3 mkdir
  • 進入幫助頁面后,我們可以按照按下面按鍵進行操作

    • d(down) 向下翻半頁
    • u(up) 向上翻半頁
    • f(forward) 向下翻一整頁
    • b(backward)向上翻一整頁
    • q ( quit ) 退出
    • 還有一點 在查看手冊時,vim的motion指令也是兼容的

文件子系統

和 Windows 不一樣,Linux是以樹的結構來管理文件系統的。我們將樹的根結點稱為根目錄,用 / 表示。

常見目錄

在linux中,以分門別類的方式管理文件,也就是功能相似的文件放在同一目錄下進行管理

  • /bin(binary) 存放可執行程序或者腳本文件
  • /sys(system)存放和系統相關的文件
  • /dev(device)存放設備文件
  • /etc 一般用來存放配置文件或者啟動腳本
  • /lib(library)存放系統庫文件
  • /var(variable)存放變化很快的文件,比如日志文件
  • /proc(process)存放進程相關數據
  • /root root用戶的家目錄
  • /home/{username} 普通用戶的家目錄

與目錄有關的指令

查看當前工作目錄(pwd)

  • pwd(print working directory)命令可以查看當前工作目錄

改變當前工作目錄(cd)

  • cd(change directory)命令可以改變工作目錄
  • man cd
    • cd [選項] [directory]
    • cd #切換到家目錄
    • cd /usr/lib #切換到/usr/libm目錄
    • cd / #切換到 / 目錄
    • cd ~ #切換到用戶家目錄
    • cd . # 切換到當前工作目錄
    • cd … #切換到父目錄
    • cd - #切換到上次目錄
    • 注意:上次目錄保存的環境變量OLDPWD中(可以通過env命令查看),他不是用棧結構管理的

創建目錄(mkdir)

  • mkdir

  • man mkdir

    • mkdir - make directories

    • mkdir [選項] directory …

    • -p, --parents 如果父目錄不存在,則創建父目錄

    • mkdir dir

    • mkdir dir1 dir2 dir3

    • mkdir -p a/b/c r如果父節點不存在,則創建父節點

刪除空目錄(rmdir)

  • rmdir (remove directory) 只能用來刪除空目錄

  • man rmdir

    • rmdir - remove empty directories

    • rmdir [選項] dirctory…

    • -p, --parents 遞歸刪除空目錄

    • rmdir dir

    • rmdir dir1 dir2 dir3

    • rmdir -p a/b/c

通配符

  • 可以用來匹配單個或者多個字符

  • *: 匹配任意多個字符(包括0個)

  • ?: 匹配任意一個字符

  • 集合(類): [characters]匹配集合內任意一個字符。

  • [!characters]匹配集合外任意一個字符。 比如:[abc], [!abc], [0-9], [a-z], [0-9A-Za-z_]等

  • rmdir 命令可以和通配符一起使用 (通配符可以提升命令的威力):

  • rmdir dir? 例如:刪除dira dir1

  • rmdir dir* 例如:刪除dir開頭的所有空目錄

  • rmdir [!abc] 刪除dir開頭后面一個字符不為abc的空文件

查看目錄內容(ls)

  • ls (list) 命令可以查看目錄內容
  • man ls
  • ls - list directory contents
    • ls [選項] [FILE]…
    • -a, --all 顯示所有的內容,包括以.開頭的文件和目錄
    • -i, --inode 顯示文件的inode編號(inode是物理文件的標識)。
      • 顯示文件 通過 inode 編號找到物理文件進行訪問
    • -l 以長格式的形式顯示目錄中的內容
    • -h, --human-readable 和-l選項一起使用,以人類可讀的方式顯示文件的大小。
  • 常見方式
  • ls # 查看當前工作目錄
  • ls dir # 查看dir
  • ls dir1 dir2 dir3 # 查看dir1,dir2,dir3
  • ls -a dir # 查看dir中的所有內容,包括以.開頭的文件和目錄
  • ls -ilh dir # 顯示inode編號,顯示詳細信息,并以人類可讀的方式顯示文件的大小
查看目錄項的詳細信息

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 第一列的第一個字母來表示文件的類型
    • -: 普通文件
    • d(directory): 目錄
    • c(character): 字符設備文件(鼠標,鍵盤,顯示器…
    • b(block): 塊設備文件(磁盤)
    • l(symbolic link): 符號鏈接
    • s(socket): 本地套接字
    • p(named pipe): 有名管道
  • 第1列后面九個字符(分為3組)表示權限。
    • 依次代表擁有者、擁有組和其他用戶的讀、寫、執行權限。可讀則顯示r,可寫則顯示w,可執行則顯示x, 沒有相關權限則顯示-。 可以使用3個二進制數字表示 寫1表示存在,寫0表示-
  • 第2列表示硬鏈接數。 顯示文件 通過 inode 編號找到物理文件進行訪問
  • 第3列表示擁有者。
  • 第4列表示擁有組。
  • 第5列表示文件所占空間的大小。
  • 第6列表示最近修改時間。
  • 第7列為文件名。

以樹狀結構顯示目錄內容(tree)

tree 命令不是Linux系統自帶的命令,使用之前,我們必須先安裝 tree 命令

  • sudo apt install tree

tree 命令可以以樹狀結構顯示目錄內容

  • man tree
  • tree - list contents of directories in a tree-like format.
  • tree [選項] [directory]…
    • tree # 以樹狀結構顯示當前工作目錄的內容
    • tree dir # 以樹狀結構顯示目錄dir中的內容
    • tree dir1 dir2 dir3 # 以樹狀結構顯示目錄dir1, dir2, dir3中的內容

復制文件或目錄(cp)

cp(copy) 命令可以用來復制文件和目錄。

  • man cp

  • cp - copy files and directories

  • cp [選項] source dest

  • cp [選項] source… dest

  • 常用選項:

    • -n, --no-clobber 如果文件已存在,則不覆蓋(默認會覆蓋已有文件)。
    • -i, --interactive 如果文件存在,則給用戶提示信息(由用戶決定是否覆蓋?)
    • -R, -r, --recursive 遞歸復制(用于copy目錄)
  • cp text1 text2 # 將text1復制到text2中;如果text2存在,則覆蓋。

  • cp text1 text2 text3 dir # 將text1,text2,text3復制到目錄dir中;如果文件已存在,則覆蓋。

  • cp -n text1 text2 # 將text1復制到text2中;如果text2存在,不覆蓋。

  • cp -i text1 text2 text3 dir # 將text1,text2,text3復制到目錄dir中;如果文件已存在,則提示用戶是否覆蓋。

  • cp -r dir1 dir2 # 遞歸地將目錄dir1復制到目錄dir2

文件和目錄的移動或重命名(mv)

mv(move) 命令可以用來移動文件和目錄,我們也可以用 mv 命令對文件和目錄重命名。

  • man mv
  • mv - move (rename) files
  • mv [選項] SOURCE DEST
  • mv [選項] SOURCE… DEST
  • Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
  • 常用選項:
  • -n, --no-clobber 如果文件已存在,則不覆蓋(默認會覆蓋已有文件)。
  • -i, --interactive 如果文件存在,則給用戶提示信息(由用戶決定是否覆蓋?)

為什么移動目錄時,不需要指定-r選項?

本質是修改目錄的元數據(如路徑、名稱),而非復制內容。目錄作為一個整體(包含其下所有文件和子目錄的結構)直接被 “搬遷”,無需遞歸遍歷內部內容(類似文件重命名,只是對象是目錄)

mv text1 text2 # 將text1重命名為text2;如果text2存在,
則覆蓋。
mv dir1 dir2 # 將dir1重命名為dir2
mv -n text1 text2 # 將text1重命名為text2;如果text2存在,
不覆蓋。
mv text1 text2 text3 dir # 將text1,text2,text3移動到目錄dir中;
如果文件已存在,則覆蓋。
mv -i text1 text2 text3 dir # 將text1,text2,text3移動到目錄dir中;
如果文件已存在,則提示用戶是否覆蓋。

刪除文件和目錄(rm)

rm(remove)命令可以刪除文件和目錄

$ man rm
rm - remove files or directories
格式:
rm [選項] FILE...
常用選項:
-f, --force
忽略不存在的文件,永遠不提示
-i
在每次刪除前,都提示用戶是否刪除
-r, -R, --recursive
遞歸刪除

常用方式

$ rm text1 # 刪除文件text1
$ rm text1 text2 text3 # 刪除文件text1, text2, text3
$ rm -i *.txt # 刪除當前目錄下所有以.txt結尾的文件,并提示用戶是否刪除
$ rm -rf dir # 遞歸刪除目錄dir, 不給出任何提示

mv的本質是將text1,進行復制一份與inode進行關聯,然后將原來的text1,刪除。

注意:使用rm命令刪除文件和目錄后,就很難恢復了(Linux系統沒有所謂的回收站)。所以除非必要,不要以 root 身份或者使用 sudo 權限來執行 rm 命令!

文件相關指令

創建文件

在linux下創建文件的方式有很多,常用的是以下三種方式:

$ echo "Hello Linus Torvalds" > text 	# 創建文件text, 并且文件中包含內容"Hello Linus Torvalds"
$ touch text1 text2 text3 				# 創建空文件text1, text2, text3(要求text1,text2,text3不存在)
$ vim hello.c 							# 編輯hello.c, 按:wq退出。

查找文件

which

使用which命令來查找可執行程序的路徑

$ man whichwhich - locate a command
格式:which [-a] cmd...
選項:-a    顯示所有匹配的路徑    不加 -a 會找到一個之后直接返回打印到屏幕上

常用方式

$ which bash # 查看bash的路徑
$ which ls tree # 查看命令ls和tree的路徑
$ which -a vim # 查看vim的所有路徑 (我們可能裝了多個版本的vim)

which 是根據 PATH環境變量中的路徑依次進行查找的,然后顯示第一個匹配項,或者顯示全部匹配項

在這里插入圖片描述

每條之間的分隔為:,依次查找

find

find可以在一個目錄中遞歸的查找符合指定條件的文件。它的功能非常強大。

$ man findfind - search for files in a directory hierarchy
格式:find [start-point...] 查找條件 # 省略start-point,默認起始點為當前工作目錄
常用選項:-name pattern	查找文件名符合pattern(正則表達式)的文件-type c			查找類型為c的文件:b(block): 塊設備文件c(character): 字符設備文件d(directory): 目錄p(named pipe): 有名管道f(file): 普通文件l(symbolic link): 符號鏈接s(socket): 套接字-size n[cwbkMG] 	(向上查找)File uses n units of space, rounding up.b: for 512-byte blocks (this is the default if no suffix is used)c: for bytesw: for two-byte wordsk: for Kibibytes (KiB, units of 1024 bytes)M: for Mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)G: for Gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes)可以在n前面添加'+'和'-',表示大于和小于。-empty			查找空的文件或空的文件夾-user username, -uid uid  	根據用戶名和用戶id查找-group groupname, -gid gid	根據組名和組id查找-perm mode					根據權限查找根據時間查找:-amin n, -atime n, -cmin n, -ctime n, -mmin n, -mtime n三個時間戳		a(access): 文件訪問的時間c(change): 文件屬性發生改變的時間 (用戶,組 ,權限)m(modify): 文件內容發生改變的時間min: 以分鐘為單位time: 以天為單位可以在n前面添加'+'和'-',表示大于和小于。組合查找:-a(and), -o(or), !(not): 分別表示與、或、非

“+” " - " 號的理解:

常用的方法

$ find /usr/include -name "stdio.h" 	# 在/usr/include目錄下查找stdio.h文件
$ find . -name "*.c" 					# 在當前工作目錄下查找所有以.c結尾的文件
$ find /dev -type b 					# 在/dev目錄下查找所有的塊設備文件
$ find . -size 5M 						# 在當前工作目錄下查找所有大小為5M的文件
$ find . -size +5M						# 在當前工作目錄下查找所有大于5M的文件
$ find dir1 dir2 dir3 -empty 			# 在dir1,dir2,dir3目錄下查找所有空的文件和空的文件夾
$ find . -user he 						# 在當前工作目錄下查找he用戶擁有的文件
$ find . -gid 0 						# 在當前工作目錄下查找root組(gid=0)擁有的文件
$ find . -perm 664 						# 在當前工作目錄下查找權限為664(rw-rw-r--)的文件
$ find . -mtime 1 						# 在當前工作目錄下查找在[1, 2)天前內容發生修改的文件 (find會省略小數部分)
$ find . -mtime +2 						# 在當前工作目錄下查找在[3, )天前內容發生修改的文件
$ find /dev -type c -a -name "tty*" 	# 在/dev目錄下查找以tty開頭的字符設備文件
$ find /dev -type b -o -name "tty*"	 	# 在/dev目錄下查找塊設備文件或者是以tty開頭的文件
$ find /dev -type c -a ! -name "tty*" 	# 在/dev目錄下查找不以tty開頭的字符設備文件

查看文件內容

cat
$ man catcat - concatenate files and print on the standard output
格式:cat [選項] [file]...
常見選項:-n, --number		對每一行進行編號

常見用法

$ cat /etc/passwd
$ cat -n /etc/passwd
$ sudo cat /etc/passwd /etc/shadow (已拼接的方式查看) 這里加sudo因為shadow存儲的為密碼,所以普通用戶不能查看
head

查看文件的前幾行

$ man headhead - output the first part of files
格式:head [選項] [file]...
常見選項:-n, --lines=[-]NUM		顯示前NUM行;若在NUM前面添加'-'號,則顯示除了后NUM行的所有行

常見用法

$ head text1 				# 顯示text1的前10行
$ head text1 text2 text3 	# 顯示text1,text2,text3的前10行
$ head -n 5 text1 			# 顯示text1的前5行
$ head -n -5 text1 			# 顯示除了最后5行的所有行
tail

查看文件的后幾行

$ man tailtail - output the last part of files
格式:tail [選項] [file]...
常見選項:-n, --lines=[+]NUM	顯示后NUM行;若在NUM前面添加'+'號,則從第NUM開始顯示-F					顯示后面追加的數據。一般用于查看日志文件。

-F 指令可以用于多窗口操作,查看不會關閉,如果在其他窗口,對文件進行改變,該命令會一直顯示文件變化情況。

常見用法

$ tail text1 					# 顯示text1的后10行
$ tail text1 text2 text3 		# 顯示text1,text2,text3的后10行
$ tail -n 5 text1 				# 顯示text1的后5行
$ tail -n +5 text1 				# 從第5行開始顯示
$ tail -F server.log 			# 顯示后10行,并且會顯示后面追加的數據
less(more)
$ man moremore - file perusal filter for crt viewing (說人話就是單頁瀏覽)
格式:more [選項] file...

提示:less是more的高級版本,若系統中沒有less命令,才會考慮使用more

常見用法

$ less text1 		# 瀏覽text1
$ less text1 text2 	# 瀏覽text1, text2

進入瀏覽界面后

f(forward) 		往后翻一頁
b(backward) 	往前翻一頁
:n(next) 		查看下一個文件
:p(previous)	查看上一個文件
q(quit) 		退出瀏覽界面

重定向

cat, head, tail等命令經常和重定向一起使用,比如:tail -n 20 text1 > a.txt。重定向的示意圖如下:

默認情況下,stdin(標準輸入)是與鍵盤相互綁定的,stdout stderr 與屏幕綁定。

在講重定向之前,我們需要引入文件描述符的概念(后面我們會詳細講解這個概念,現在我們只需要知道它是一個非負整數即可)。

一個 > 表示追加重定向 >> 就表示重定向 會將原來的內容進行覆蓋

常見用法

$ who > users
$ echo "liu yi fei" >> users
$ wc -l < users
$ cat users file1 > text 		# file1不存在
$ cat users file1 2> text 		# file1不存在
$ cat users file1 >& text 		# file1不存在

wc 命令 watch count 查看行數 兩條命令的區別

搜索文件內容

grep

grep(globally search for a regular expression)命令可以用于搜索文件內容,它的功能非常強大!grep 命令會按正則表達式去搜索文件,如果文件中某一行匹配指定的正則表達式,grep命令則會顯示這一行。

$ man grepgrep - print lines matching a pattern
格式:grep [選項] pattern [file]...
常見選項:-E, --extended-regexp		使用擴展的正則表達式-i, --ignore-case			忽略大小寫-v, --invert-match			顯示不匹配正則表達式的行-n, --line-number			顯示行號-c, --count					不顯示匹配的行,顯示匹配行的個數

常見用法

$ grep -nE "firmament" The_Holy_Bible.txt   # 顯示The_Holy_Bible.txt中包含"firmament"的所有行,并顯示行號
$ grep -cvE "firmament" The_Holy_Bible.txt  # 統計The_Holy_Bible.txt中不包含"firmament"的行數

正則表達式

正則表達式語法有點復雜,而且不同的工具使用的語法還不盡相同。下面我們介紹一些常用的正則表達式語法規則:

1. 基本單位基本單位主要包含:字符、轉義字符、.(匹配任意一個字符)、集合(比如,[abc],[^abc])(expr)
2. 基本操作操作的對象是基本單位,主要包含兩個基本操作:連接和重復a. 連接:"ab", "[abc]x", ".txt", "\.txt"b. 重復+: 重復至少一次(>=1), 比如:"abc+", "[abc]+"?: 重復零次或一次(0|1), 比如:"abc?", "[abc]?"*: 重復任意次數(>=0), 比如:"abc*", "[abc]*", ".*"{m}: 重復m次{m,n}: 重復m到n次([m,n]){n, }: 至少重復n次([>=n])
3. 指定基本單位出現的位置^: 行首,比如:"^abc"$: 行尾,比如:"xyz$"\<: 詞首        默認以空白字符分割\>: 詞尾

(expr) expr 為正則表達式 ()表示一個單位

對 \ . txt 的理解 因為 .在正則表達式中為元字符 ,加\ 進行轉義后,變為 普通字符 .

Q: 以f開頭,以t結尾的單詞的正則表達式如何寫?(單詞之間以空格分隔)

\<f[^ ]*t\>       #中間字符非空格重復任意次數 

命令的組合

|(管道)

grep 命令之所以強大,主要在于它可以和其它命令組合使用。命令的組合主要有以下三種方式:

1. cmd1 ; cmd2先執行cmd1,再執行cmd2。如:mkdir dir; cd dir
2. cmd1 | cmd2 (管道)將上一個命令的輸出作為下一個命令的輸入。如:history | tail -n 20
3. cmd1 | xargs cmd2xargs(extended arguments) 可以將標準輸入里面的每一行轉換成命令的參數xargs往往和管道一起使用,如:cmd1 | xargs cmd2,它把cmd1輸出的每一行作為cmd2的參數find . -name "*.c" | xargs grep -nE "\<main\("

管道是進程之間進行通信的一種方式,是內存中的,由內核管理的數據結構。

xargs 是將管道搜索到的內容作為命令行參數 可以理解為上面 加一大堆的的.c 文件,如下面第一行所示。

在這里插入圖片描述

改變文件權限

chmod

chmod 命令可以改變文件和目錄的權限。

目錄:本質就是一個文件。 這個文件的內容是一個一個目錄項(directory entry),在邏輯上,目錄項之間是用鏈表的方式鏈接起來的。

每個目錄項都是由一條單鏈表連接起來的。

權限對于普通文件和目錄文件而言,其含義是不太一樣的:

普通文件
r: 可讀
w: 可寫
x: 可執行 (可執行程序和腳本文件需要x權限才能直接運行)
目錄
r: 可讀 (ls)
w:可寫 (在目錄下添加和刪除文件)
x: 可執行 (cd,讀寫權限依賴于x權限,所以目錄一般都設置了x權限)

目錄本質上一個文件 文件里面的內容為一個個目錄項,邏輯上鏈表的形式銜接,讀可不可以查看,寫修改,x最基本 不能切換到該目錄項 如cd操作等

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

chmod 目錄的用法如下:

1. 文字設定法 (較少使用)chmod [ugoa][+=-][rwx] file/diru: userg: groupo: othera: all+: 添加權限-: 刪除權限=: 將權限設置為
2. 數字設定法 (常用)chmod mode file/dirmode: 三位八進制數字

常見用法

$ chmod o+w text1
$ chmod u=rwx,g=rx,o=r text1
$ chmod 664 text1

文件創建掩碼

umask

文件和目錄在創建的時候都有一個默認的權限,該權限是由文件創建掩碼 umask 決定的。
我們可以用 umask 命令查看當前的文件創建掩碼:

$ umask0002 # 當前的文件創建掩碼為2

創建文件 text 和目錄 dir,查看它們的權限:

$ ls -l
drwxrwxr-x 2 he he 4096 312 20:55 dir/
-rw-rw-r-- 1 he he 0 313 20:34 text

可見當 umask = 0002 時,目錄的默認權限為 775,文件的默認權限為 664

將文件創建掩碼 umask 設置為 0023

$ umask 0023

再創建文件 text1 和目錄 dir1,查看它們的權限

$ ls -l
drwxr-xr-- 2 he he 4096 313 20:40 dir1
-rw-r--r-- 1 he he 0 313 20:40 text1

可見當 umask = 0023 時,目錄的默認權限為 754,文件的默認權限為 644

那么文件創建掩碼是怎么進行工作的呢?

? 主要看umask后三位 后三位設置的想去掉的權限 工作原理不是相減,對umask進行按位取反,然后再按位與,文件按位與666(因為文件沒有執行權限,cd不進去),目錄按位與777(讀寫執行)

目錄:777 & (~umask)
文件:666 & (~umask)

鏈接

ln

我們可以用 ln 命令創建硬鏈接和符號連接(軟鏈接)。

Inode 磁盤上文件的唯一標識

創建硬鏈接

$ ln text1 h_link
$ ls -li268648 -rw-r--r-- 2 he he 0 313 20:40 h_link268648 -rw-r--r-- 2 he he 0 313 20:40 text1

? 可見 text1 和 h_link 是指向同一個文件的,并且硬鏈接數也由原來的 1 變成了 2。刪除 text1 或 h_link 只會減少硬鏈接數,當鏈接數為 0 的時候,才會真正刪除磁盤上的文件。(使用的是引用計數技術)

$ rm text1
$ ls -li268648 -rw-r--r-- 1 he he 0 313 20:40 h_link # 硬鏈接數變為了 1
$ rm h_link

創建符號鏈接(軟鏈接)

$ ln -s text s_link
$ ls -li268648 lrwxrwxrwx 1 he he 4 313 21:24 s_link -> text # s_link文件的內容為text,因此大小為4264859 -rw-rw-r-- 1 he he 0 313 20:34 text

文件大小為4,存放的就是text4個字符,1111表示為軟硬鏈接的標識,建立一個硬鏈接就會變為2,就相當于連了幾根線在inode上。

image-20250603114706795

可見 text 和 s_link 是指向不同文件的,text 的硬鏈接數不會發生改變。刪除 text 會導致符號鏈接 s_link 懸空:

$ rm text
$ ls -li268648 lrwxrwxrwx 1 he he 4 313 21:24 s_link -> text # 顏色會發生改變

硬鏈接與軟鏈接的原理如圖

我們可以將符號鏈接和 Windows 系統上的快捷方式,或者 C 語言中的指針做類比。
對于大多數命令(rm除外),如果參數是符號鏈接,其實操作的是符號鏈接指向的文件(類似指針的解引用操作):

$ echo "I love xixi\n" > text
$ cat s_linkI love xixi
$ rm s_link # 刪除符號鏈接

遠程復制

scp

scp 命令可以用于上傳和下載文件

上傳:將本地的文件復制到遠程
下載:將遠程的文件復制到本地

scp 的用法和 cp 非常類似

$ man scpscp -- secure copy (remote file copy program)
格式:scp [選項] SRC... DEST本地路徑:可以用絕對路徑,也可以用相對路徑遠程路徑:用戶名@IP:路徑
常用選項:-r		遞歸復制整個目錄

常見用法

$ scp he@IP:~/text1 . 	# 將he用戶家目錄下的text1文件下載到當前工作目錄
$ scp ./file he@IP:~ 	# 將當前工作目錄下的file文件上傳到he用戶的家目錄下

打包壓縮

tar(text archive)

我們可以用 tar 命令打包和壓縮文件。tar 是一個非常有歷史的工具,這里我們只介紹它的傳統(經典)用法:

格式:
tar [主選項+輔選項] 包名 [文件或目錄]...
主選項(有且只能選擇其中一個):c: 創建r: 追加x: 釋放
輔選項:f: 指定包文件的名稱v: 顯示詳細信息z: 使用gzip算法壓縮或解壓縮包文件

常見用法

$ tar cvf package.tar text*
$ tar rvf package.tar The_Holy_Bible.txt
$ tar xvf package.tar
$ tar czvf package.tar.gz *
$ tar xzvf package.tar.gz

別名

alias

有些命令比較長,自然我們就想給這些命令起一個別名,方便以后使用,alias 命令就是用來做這事情的。

$ man alias
alias — define or display aliases
格式:
alias [命令=別名]...

常見用法

$ alias # 查看別名alias g++11='g++ -std=c++11'alias ll='ls -alF'alias ls='ls --color=auto'...
$ alias h='history' # 設置別名

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86892.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何徹底刪除Neo4j中的所有數據:完整指南

如何徹底刪除Neo4j中的所有數據&#xff1a;完整指南 Neo4j作為領先的圖數據庫&#xff0c;在某些場景下我們需要完全清空數據庫中的所有數據。本文將介紹多種刪除Neo4j數據的有效方法&#xff0c;涵蓋不同版本和部署方式的操作步驟。 一、Neo4j數據刪除的常見需求場景 開發…

Keil無法下載程序到STM32 Error: Flash Download failed - Target DLL has been cancelled

背景 Keil通過st-link v2連接STM32&#xff0c;下載報錯 Error: Flash Download failed - Target DLL has been cancelled 我有多臺STM32需要下載程序&#xff0c;會出現這個問題 原因 應該是Keil保存了設備的相關信息&#xff0c;當換了設備之后下載就會出錯 解決辦法 斷…

CIM和建筑風貌管控平臺

2025年的雄安新區&#xff0c;中央綠谷的碧波倒映著現代建筑群&#xff0c;中國星網總部大廈的曲面幕墻與古風飛檐相映成趣。這座“未來之城”的每一處建筑肌理&#xff0c;都離不開一項關鍵技術——城市信息模型&#xff08;CIM&#xff09;與建筑風貌管控平臺的支撐。從雄安到…

REBT 分類任務中,`loss`(損失值)和 `logits`(原始預測分數)是什么

REBT 分類任務中,loss(損失值)和 logits(原始預測分數)是什么 在分類任務中,loss(損失值)和 logits(原始預測分數)的含義及計算邏輯可以通過具體示例清晰解釋。以下結合你提供的數值(loss=0.7478,logits=[-0.1955, -0.3021])進行說明 一、logits 的本質:未歸一化…

6月13日day52打卡

神經網絡調參指南 知識點回顧&#xff1a; 隨機種子內參的初始化神經網絡調參指南 參數的分類調參的順序各部分參數的調整心得 作業&#xff1a;對于day41的簡單cnn&#xff0c;看看是否可以借助調參指南進一步提高精度。 用“燒水調溫”的日常場景來打比方&#xff1a; 每個…

穿越時空的刀劍之旅:走進VR刀劍博物館?

VR 刀劍博物館不僅僅是一個展示刀劍的場所&#xff0c;更是文化傳承與教育的重要基地&#xff0c;在弘揚刀劍文化、增強民族文化認同感以及開展教育活動等方面發揮著不可替代的重要作用。? 從文化傳承的角度來看&#xff0c;刀劍文化源遠流長&#xff0c;它承載著不同國家、不…

基于GA遺傳優化的PID控制器最優控制參數整定matlab仿真

PID&#xff08;比例-積分-微分&#xff09;控制器是工業控制領域中最常用的控制器之一。通過調節PID控制器的三個參數&#xff1a;比例&#xff08;Kp&#xff09;、積分&#xff08;Ki&#xff09;和微分&#xff08;Kd&#xff09;&#xff0c;可以實現系統的穩定控制。然而…

華為OD最新機試真題-上班之路-OD統一考試(B卷)

題目描述 Jungle 生活在美麗的藍鯨城,大馬路都是方方正正,但是每天馬路的封閉情況都不一樣。地圖由以下元素組成: .—空地,可以達到 *—路障,不可達到; S—Jungle的家。 T—公司;

大模型驅動數據分析革新:美林數據智能問數解決方案破局傳統 BI 痛點

在數字化向智能化躍遷的時代浪潮中&#xff0c;大模型技術正驅動企業數據分析模式迎來顛覆性變革。傳統自助式BI工具主導的數據分析模式&#xff0c;雖在降低分析門檻、提升報表開發效率層面發揮了一定作用&#xff0c;但隨著數據應用場景的深化&#xff0c;其指標固化、響應滯…

(Note)基于Pytorch手搓RNN參考

Coding a Recurrent Neural Network (RNN) from scratch using PytorchPyTorch RNN from Scratch - Jake Taelearning pytorch 3: coding an RNN, GRU, LSTM | Kaggle

《網絡安全與防護》知識點復習

? 一、網絡安全基礎&#xff08;CIA / AAA / 安全服務&#xff09; 概念快速記憶CIA 三元組機密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;、可用性&#xff08;Availability&#xff09;安全服務&#xff08;OSI&#xff09;鑒別…

編譯,多面體庫

1&#xff09; barvinok是一個用于計算整數點數的庫 在參數和非參數多面體以及投影中 這樣的集合。 對于參數多面體&#xff0c;計數由以下任一表示 顯式函數或生成函數。 第一種是分段階躍多項式的形式。 這是Ehrhart擬多項式的推廣 以及向量分割函數。 第二個是Ehrhart級數的…

Kotlin基礎語法一

語言聲明變量與內置數據類型 var&#xff1a;數據可變 val: 數據不可變 內置數據類型 String 字符串 Char 單字符 Boolean true/false Int 整形 Double 小數 List 集合 Set 無重復的元素集合 Map 鍵值對的集合 Kotlin語言的類型推斷 val info : String "Hello KT&quo…

無人機避障——感知篇(在Ubuntu20.04的Orin nx上基于ZED2實現Vins Fusion)

設備&#xff1a;Jetson Orin nx 系統&#xff1a;Ubuntu 20.04 雙目視覺&#xff1a;zed 2 結果展示&#xff1a; 官網中的rosdep install --from-paths src --ignore-src -r -y如果連不上&#xff0c;可以用小魚rosdepc進行替換&#xff1a; 安裝標定工具&#xff1a; 1、…

從零構建端到端AI天氣預測系統:不依賴第三方API的實踐指南

引言&#xff1a;自主可控的AI氣象解決方案 在當今數據隱私和系統自主性日益重要的背景下&#xff0c;本文將詳細介紹如何完全不依賴任何第三方API&#xff0c;從數據采集到模型部署&#xff0c;構建一個完整的本地化AI天氣預測系統。這個方案特別適合對數據主權有要求的企業或…

扣子數據庫實戰案例:搭建AI登記助手

《扣子開發AI Agent智能體應用&#xff08;人工智能技術叢書&#xff09;》(宋立桓&#xff0c;王東健&#xff0c;陳銘毅&#xff0c;程東升)【摘要 書評 試讀】- 京東圖書 在當今的數字化生活場景中&#xff0c;無論是拜訪公司還是進入小區&#xff0c;登記信息似乎已經成為…

STA(Station)模式與AP(Access Point)模式

以下是STA&#xff08;Station&#xff09;模式與AP&#xff08;Access Point&#xff09;模式的核心區別對比表&#xff0c;綜合各搜索結果的關鍵信息整理&#xff1a; 對比維度?STA模式??AP模式?角色定位?無線終端&#xff08;客戶端&#xff09;無線接入點&#xff08…

【prometheus+Grafana篇】基于Prometheus+Grafana實現postgreSQL數據庫的監控與可視化

&#x1f4ab;《博主主頁》&#xff1a; &#x1f50e; CSDN主頁__奈斯DB &#x1f50e; IF Club社區主頁__奈斯、 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、N…

什么是探索式測試,應該怎么做?

探索式測試&#xff08;Exploratory Testing&#xff09;是一種強調“測試設計與執行同步進行”的軟件測試方法&#xff0c;它將測試人員的知識、經驗、直覺與系統探索相結合&#xff0c;在動態執行中靈活設計用例并發現缺陷。與傳統的基于文檔的測試&#xff08;如預先設計好詳…

使用 ollama 在 mac 本地部署一個 qwen3:8b 模型

前言 ollama 就是一個運行大模型的框架。要運行大模型&#xff0c;還需要大模型本身。 下載安裝 ollama 從 ollama 官網 下載mac 版本的 ollama。 啟動 ollama 安裝好選擇啟動即可&#xff0c;如果沒有選擇啟動&#xff0c;可以使用命令啟動。 ollama serve使用 ollama 運…