日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 学习笔记

發布時間:2023/12/9 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 學習筆記

作者:Grey

原文地址:

博客園:Linux 學習筆記

CSDN:Linux 學習筆記

說明

本文如果沒有特別說明,環境是 CentOS 7, 主要是日常學到的一些筆記,所以內容相對零散。

常用命令

將一個目錄中的所有HTML文件復制到目標目錄,同時確保僅復制那些目標目錄中不存在或是比目標目錄中同名文件版本更新的文件。

cp -u *.html destination

mv命令類似

假設我們下載了一個被分割成好幾部分的文件,希望能將其組合還原。如果這些文件的命名方式如下:

move.mpeg.001 move.mpeg.002 ... move.mpeg.099

我們可以用下列命令將其恢復原狀:

cat move.mpeg.0* > movie.mpeg

單引號,無引號,雙引號的效果

root@debian:/data/workspace/shell # echo text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER text /data/workspace/shell/out.txt a b foo 4 root root@debian:/data/workspace/shell # echo "text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER" text /data/workspace/shell/*.txt {a,b} foo 4 root root@debian:/data/workspace/shell # echo 'text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER' text /data/workspace/shell/*.txt {a,b} $(echo foo) $((2+2)) $USER

可以看出,從上到下,越來越多的擴展被禁止

可以使用history命令隨時查看命令的歷史紀錄, 假設輸出結果中有這樣一行

189 cd /usr/bin

189是歷史記錄中該命令的編號,通過

!189

可以立即重用這個命令。

root@debian:/ # history | grep /usr/bin189 cd /usr/bin197 cd /usr/bin/301 history | grep /usr/bin root@debian:/ # !189 cd /usr/bin root@debian:/usr/bin #

/目錄下文件夾主要作用

[root@linux /]# ll / total 16 lrwxrwxrwx. 1 root root 7 Aug 17 02:40 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Sep 13 22:03 boot drwxr-xr-x. 20 root root 3200 Sep 13 21:58 dev drwxr-xr-x. 74 root root 8192 Sep 13 22:03 etc drwxr-xr-x. 2 root root 6 Apr 11 2018 home lrwxrwxrwx. 1 root root 7 Aug 17 02:40 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Aug 17 02:40 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 Apr 11 2018 media drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt drwxr-xr-x. 2 root root 6 Apr 11 2018 opt dr-xr-xr-x. 109 root root 0 Sep 13 21:58 proc dr-xr-x---. 2 root root 151 Sep 13 21:59 root drwxr-xr-x. 25 root root 740 Sep 13 22:03 run lrwxrwxrwx. 1 root root 8 Aug 17 02:40 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Apr 11 2018 srv dr-xr-xr-x. 13 root root 0 Sep 13 21:58 sys drwxrwxrwt. 8 root root 172 Sep 13 22:58 tmp drwxr-xr-x. 13 root root 155 Aug 17 02:40 usr drwxr-xr-x. 19 root root 267 Aug 17 02:45 var

其中:

/boot

系統啟動相關的文件,如內核,initrd,以及grub(bootloader)

/dev

設備文件

/etc

配置文件

/home

用戶的家目錄,每一個用戶的家目錄通常默認為:/home/USERNAME

/root

管理員的家目錄

/lib

庫文件

/media

掛載點目錄,移動設備

/mnt

掛載點目錄,額外的臨時文件系統

/opt

可選目錄,第三方程序的安裝目錄

/proc

偽文件系統,內核映射文件

/sys

偽文件系統,跟硬件設備相關的屬性映射文件

/tmp

臨時文件,/var/tmp

/var

可變化的文件,比如:日志文件,數據文件

/bin

可執行文件,用戶命令

/sbin

管理命令

文件系統相關命令

df 顯示磁盤的使用情況

du 顯示文件系統的使用情況

ls 顯示目錄

Linux中的文件類型

- 普通文件

d 目錄文件

b 塊設備文件(block)

c 字符設備文件

l 符號鏈接文件(symbolic link file)

p 命令管道文件(pipe)

s 套接字文件(socket)

文件權限信息說明

權限屬性文件目錄
r允許打開并讀取文件允許列出目錄內容(如果也設置了執行屬性)
w允許寫入或截斷文件;但是,不允許重命名或者刪除文件。文件的刪除或者重命名是由目錄屬性決定的允許在目錄內創建,刪除,重命名文件(如果也設置了執行屬性)
x允許將該文件作為程序執行。以腳本語言編寫的程序文件必須設置為可讀才能被執行允許進入該目錄,例如 cd directory

Linux的umask命令指定在建立文件時預設的權限掩碼。權限掩碼是由3個八進制的數字所組成,將現有的存取權限減掉權限掩碼后,即可產生建立文件時預設的權限。

使用指令umask查看當前權限掩碼,則輸入下面的命令

執行上面的指令后,輸出信息如下:0022

接下來,使用指令mkdir創建一個目錄,并使用指令ls獲取該目錄的詳細信息,輸入命令如下:

mkdir test1 ls –d –l test1/

執行上面的命令后,將顯示新創建目錄的詳細信息,如下所示:

drwxr-xr-x 2 rootlocal rootlocal 4096 2011-9-19 21:46 test1/

注意:在上面的輸出信息中,

"drwxr-xr-x"="777-022=755"

Linux下還有一些特殊的權限,參考:Linux特殊權限詳解

如何建立環境

登錄Shell會話讀取的啟動文件

文件內容
/etc/profile應用于所有用戶的全局配置腳本
~/.bash_profile用戶的個人啟動文件。可用于擴展或者覆蓋全局配置腳本中的設置
~/.bash_login如果沒有找到~/.bash_profile,Bash會嘗試讀取該腳本
~/.profile如果/.bash_profile和/.bash_login都沒有找到,Bash會嘗試讀取該腳本,這是基于Debian發行版(如Ubuntu)的默認文件

非登錄Shell會話讀取的啟動文件

文件內容
/etc/bash.bashrc應用于所有用戶的全局配置腳本
~/.bashrc用戶的個人啟動文件,可用于擴展或者覆蓋全局配置中的設置

隨機生成數據

shuf train.txt -o test.txt -n 30

從train.txt文件中隨機讀取30行文本輸出到test.txt

掛載/卸載

/boot目錄的加載和卸載
在/下:

umount /dev/sda1 mount /dev/sda1 /boot

更多可查看Linux 下模擬制作塊設備并掛載

文件描述符操作實驗

第一步,創建一個文件,并寫入一些內容。

vi abc.txt

寫入一些內容

dfasdfasdfasdfa1 asdfasdfasd2 sadfasdfasd3

將abc.txt讀入4號文件描述符

exec 4< abc.txt

查看當前進程所有文件描述符

ll /proc/$$/fd [root@linux data]# ll /proc/$$/fd total 0 lrwx------. 1 root root 64 Sep 14 02:44 0 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 02:44 1 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 02:44 2 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 02:46 255 -> /dev/pts/0 lr-x------. 1 root root 64 Sep 14 02:46 4 -> /data/abc.txt

查看當前進程打開的文件

lsof -p $$ [root@linux data]# lsof -p $$ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME .... bash 1252 root 4r REG 253,0 84 34172896 /data/abc.txt ....

將abc.txt第一行讀出來

[root@linux data]# read a 0<& 4 [root@linux data]# echo $a sdfasdfasdfasdfasdfasdfasdfasd

文件偏移量實驗

每個進程的偏移量互不影響,每個fd會單獨維護一個seek(指針)
查看文件偏移量

lsof -op $$

可以看到,一開始偏移量(OFFSET字段):0t31

[root@linux data]# lsof -op $$ COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME .... bash 1252 root 4r REG 253,0 0t31 34172896 /data/abc.txt ....

重新打開一個,并再次查看文件偏移量,0t0。

exec 4< /data/abc.txt [root@linux data]# lsof -op $$ COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME .... bash 1252 root 4r REG 253,0 0t0 34172896 /data/abc.txt ....

模擬socket實驗

模擬和baidu建立tcp連接

cd /proc/$$/fd && exec 8<> /dev/tcp/www.baidu.com/80 [root@linux fd]# ll total 0 lrwx------. 1 root root 64 Sep 14 05:54 0 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 05:54 1 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 05:54 2 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 05:55 255 -> /dev/pts/0 lrwx------. 1 root root 64 Sep 14 05:58 8 -> socket:[21649]

可以看到建立了一個socket連接

使用lsof查看對應的文件描述符信息

[root@linux fd]# lsof -op $$ COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME .... bash 1275 root 8u IPv4 21834 0t0 TCP 192.168.118.136:40794->183.232.231.172:http (ESTABLISHED) ....

標準輸入/輸出/錯誤輸出,以及重定向

設備設備名文件描述符類型
鍵盤/dev/stdin0標準輸入
顯示器/dev/stdout1標準輸出
顯示器/dev/stderr2標準錯誤輸出

輸入重定向符號: <

read var < /path/to/a/file

輸出重定向 > >> 2> &>

清空輸入

echo 123 > /path/to/a/file

追加

echo 123 >> /path/to/a/file

錯誤輸入

echo 12343 2> /path/to/a/file

全部輸入

echo 122 &> /path/to/a/file

示例1:其中/asdfasdfasdf目錄不存在,所以執行ls會報錯

[root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out ls: cannot access '/asdfasdfasdf': No such file or directory [root@sec ~]# cat ls01.out ./: abc.txt anaconda-ks.cfg cat.out ls01.out ls.out

由于1表示標準輸出,所以ls01.out中只記錄了非錯誤的信息,即ls ./的內容

如果要保存錯誤信息,可以通過如下方式:

[root@sec ~]# ls ./ /asdfasdfasdf 1>ls01.out 2>ls03.out [root@sec ~]# cat ls03.out ls: cannot access '/asdfasdfasdf': No such file or directory# 或者這樣 [root@sec ~]# ls ./ /asdfasdfasdf 1> ls04.out 2>&1 [root@sec ~]# cat ls04.out ls: cannot access '/asdfasdfasdf': No such file or directory ./: a abc.txt anaconda-ks.cfg cat.out ls01.out ls02.out ls03.out ls04.out ls.out

如果要丟棄用不著的輸出結果,可以使用如下命令

ls -l /bin/usr 2> /dev/null

父子進程

當前進程的id號

echo $$

父進程PID是1275

再啟動一個bash

/bin/bash

再次查看當前進程號

echo $$

子進程PID為1820

在子進程中查看父子進程關系, 先安裝pstree

yum install psmisc -y

用pstree指令可以查看進程的父子關系

也可以通過

ps -ef |grep 1275

查看父子進程的關系

父進程中定義的變量和子進程中定義的變量是互相隔離的,如果需要子進程訪問父進程的變量,父進程要執行export命令。

管道

示例1:查詢abc.txt中的第五行數據

head -5 abc.txt | tail -1

示例2:管道會開辟兩個子進程,并且左邊輸出銜接到右邊輸入,所以a=9是在子進程中執行的,父進程中a還是等于1

$$的優先級比管道高
$BASHPID優先級比管道低

[root@linux /]# { echo $BASHPID; read x; } | { cat; echo $BASHPID; read y;} 1953

1953是子進程ID

[root@linux /]# { echo $$; read x; } | { cat; echo $$; read y;} 1275

1275是父進程ID

Linux 中的內部命令和外部命令

什么是Shell?

bash shell,就是一個程序,就是Linux系統安裝的一個軟件,用戶通過用戶名密碼登錄操作系統后,直接進入bash shell軟件

如果平時退出不了某個程序,可以復制一個ssh對話,用ps -ef找到那個進程,用kill -9退出即可

Shell 命令分為外部命令和內置命令:

比較內置命令外部命名
定義Bash Shell 自帶的命令Linux 系統中的應用程序
執行效率
執行過程調用當前 Shell 進程的一個函數觸發磁盤 I/O,fork 出一個單獨的進程,執行完成后退出

內部命令( Shell 自帶的命令)

查看cd命令

type cd

顯示:cd is a shell builtin

說明cd命令是shell自帶的命令

通過

help -d

可以查看所有內置命令

外部命令(不是Shell自帶的命令,由用戶安裝的)

比如ifconfig命令

type ifconfig

顯示:ifconfig is /usr/sbin/ifconfig

使用file命令查看命令是一個什么類型的文件

file /usr/sbin/ifconfig

顯示:

/usr/sbin/ifconfig: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=22d5b3be8d3ce3c71cad5b982581ede262397b56, stripped

使用whereis查看某個命令在哪個位置

whereis ifconfig

顯示

ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

此外:

內部命令的幫助用help指令,外部命令的幫助用man指令

bash shell在執行命令的時候,做了兩步優化:

第一個優化,通過PATH來(echo $PATH) 。

第二個優化,通過hash來,hash查看,hash -r(清空hash)

編寫腳本時候, 如需要執行,要賦予該文件執行權限chmod u+rx filename

如果bash執行,不需要賦予執行權限

bash ./filename.sh ./filename.sh

以上兩種執行方式都是新開一個進程

source ./filename.sh .filename.sh

這種方式執行不會產生新的子進程

變量賦值

a=123 let a=10+2 l=ls let c=$(ls -l /etc) let c=`ls -l /etc`

變量值有空格等特殊字符可以包括在"" 或 ``中

可以通過echo ${變量名}查看變量的值

變量的導出使用export命令,讓子進程獲得父進程的變量值

變量的刪除使用unset命令

stat和touch 組合使用,可以增量監控數據改變的時間

詳見:linux命令系列 stat & touch

Linux的進程優先級

Linux采用了兩種不同的優先級范圍,一種是用nice值,它的范圍從-20 ~ +19, 默認為0;越大的nice值意味著更低的優先級,在Mac OS X中,進程的nice值代表分配給進程的時間片的絕對值;而Linux系統中,nice則代表時間片的比例。ps el命令中的NI列就是該進程的nice值。

另一種范圍是實時優先級,其值是可以配置的,默認情況下它的變化范圍是從0到99,與nice值相反,越高的實時優先級數值意味著優先級越高。任何實時進程的優先級都高于普通進程。可以通過ps -eo state,uid,ppid,rtprio,time,comm查看,RTPRIO列即為實時優先級,如果顯示-,則說明它不是實時進程。

時間同步

第一步,安裝ntpdate工具

yum -y install ntp ntpdate

第二步,設置時間為阿里服務器的時間

ntpdate ntp1.aliyun.com

第三步,將系統時間寫入硬件時間

hwclock –systohc

使用screen

Screen是一款由GNU計劃開發的用于命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,并在其間自由切換。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。在Screen環境下,所有的會話都獨立的運行,并擁有各自的編號、輸入、輸出和窗口緩存。用戶可以通過快捷鍵在不同的窗口下切換,并可以自由的重定向各個窗口的輸入和輸出。

安裝方法

CentOS下

yum install screen -y

Debian下

apt-get install screen -y

新建一個叫yourname的session

screen -S yourname

列出當前所有的session

screen -ls

回到yourname這個session

screen -r yourname

遠程detach某個session

screen -d yourname

結束當前session并回到yourname這個session

screen -d -r yourname

軟硬鏈接

硬鏈接

ln /data/x.txt /data/b.txt

通過stat查看兩個文件的信息:

stat x.txt stat b.txt

Innode號一致,修改任何一個,另外一個都可以同步修改,刪掉任何一個,不會影響另外那個,硬連接有兩個重要限制:

第一個限制,硬鏈接不能引用其所在文件系統之外的文件。

第二個限制,硬鏈接不能引用目錄。

軟連接

ln -s /data/x.txt /data/b.txt

Innode號不一致,刪掉x.txt個,b.txt的鏈接會丟失

拒絕用戶登錄

Linux用戶管理之使用/bin/false和/usr/sbin/nologin拒絕用戶登錄及其功能分析(轉)

獲取系統的IOPS

創建一個新文件

touch mytest

安裝fio工具

yum install -y fio

執行如下命令

fio -filename=mytest -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest

Debian的SSH終端配色設置

Debian10在默認安裝后,使用SSH連接后,命令和顯示都呈黑白,不是很方便查看,可以通過如下方法來配置Linux的SSH連接的配色信息: Linux終端Terminal顏色改變設置

參考資料

linux下的exec命令

Linux命令行大全(第2版)

Linux就該這么學

Linux預習資料 提取碼:7w30

CentOS6.x升級到CentOS7.x的注意事項視頻 提取碼: yhfd

Linux內核設計與實現

極客時間-Linux實戰技能100講

Linux文件權限詳解

Linux losetup 命令

linux 輸入、輸出重定向的概念和用法詳解(Day01)

Shell內置命令

總結

以上是生活随笔為你收集整理的Linux 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。