東莞市網(wǎng)站開(kāi)發(fā)市場(chǎng)調(diào)研報(bào)告怎么寫(xiě)范文
Linux零基礎(chǔ)入門(mén)
- 列出文件/文件夾
- 新建/切換路徑
- 查看當(dāng)前路徑
- 重命名或者移動(dòng)文件夾
- 拷貝文件/文件夾
- 刪除文件夾
- 設(shè)置環(huán)境變量
- 編輯文本文件
- 壓縮和解壓
- 查看cpu的信息
- 查看/殺死進(jìn)程
- 查看進(jìn)程的CPU和內(nèi)存占用
- 重定向日志?
- 場(chǎng)景一
- 場(chǎng)景二
- 場(chǎng)景三
- 場(chǎng)景四
列出文件/文件夾
命令:Ls(List)
user@host:/tmp/test_dir# ls # 列出當(dāng)前目錄下的文件和文件夾
a.txt b
user@host:/tmp/test_dir# ls -l # 列出文件和文件夾的詳細(xì)信息:權(quán)限,Owner,Group和創(chuàng)建/更新時(shí)間
total 4
-rw-rw-r-- 1 root root 0 11月 9 10:50 a.txt
drwxrwxr-x 2 root root 4096 11月 9 10:50 b
新建/切換路徑
新建命令:mkdir(make directory)
切換命令:cd(change working directory)
user@host:/tmp# mkdir test_dir # 新建一個(gè)叫test_dir的路徑
user@host:/tmp# cd test_dir/ # 進(jìn)入 test_dir 路徑
user@host:/tmp/test_dir#
兩種特殊的目錄:…、. 或?qū)懽?…/、./,…/代表上一級(jí)目錄,./代表當(dāng)前目錄。
user@host:/tmp/test_dir# cd ../test_dir/ # 上一級(jí)目錄下有test_dir目錄
user@host:/tmp#
查看當(dāng)前路徑
命令:pwd(list)
user@host:~# pwd
/root/
user@host:~#
重命名或者移動(dòng)文件夾
命令: mv (move)
user@host:/tmp# mv test_dir/ test_directory # 將test_dir目錄重命名為test_directory,文件重命名同樣適用
user@host:/tmp# cd test_directory/
daiauser@hostb@seeta:/tmp/test_directory#
user@host:/tmp/test_directory# mkdir a b # 創(chuàng)建兩個(gè)文件夾a和b
user@host:/tmp/test_directory# ls
a b
user@host:/tmp/test_directory# mv a b/ # 將a移動(dòng)到b目錄下。如果b目錄不存在的話,這條命令相當(dāng)于將a重命名為b
user@host:/tmp/test_directory# tree
.
└── b└── a
拷貝文件/文件夾
命令:cp (copy)
參數(shù):-r (-r代表遞歸)
user@host:/tmp/test_directory# mkdir a b # 創(chuàng)建兩個(gè)文件夾a和b
user@host:/tmp/test_directory# ls
a b
user@host:/tmp/test_directory# cp -r a b # 將a文件夾拷貝到b文件夾下,-r代表遞歸拷貝
user@host:/tmp/test_directory# tree
.
└── a
└── b└── a
刪除文件夾
命令: rm (remove)
參數(shù): -rf (-r代表遞歸,-f代表強(qiáng)制)
user@host:/tmp/test_directory# ls
a.txt folder
user@host:/tmp/test_directory# rm -rf folder
user@host:/tmp/test_directory# rm -rf folder/* # *是通配符號(hào),這樣代表folder文件夾下所有文件/文件夾
設(shè)置環(huán)境變量
命令:export
以常見(jiàn)的兩個(gè)環(huán)境變量:PATH和LD_LIBRARY_PATH為例
1. PATH
如果你有自己安裝的命令,希望暴露出來(lái)直接使用。比如miniconda中的python,如果不加環(huán)境變量一般需要寫(xiě)完整的路徑:/x/x/x/miniconda3/bin/python,如果希望直接寫(xiě)python就能用到調(diào)用conda中的python指令,那么可以:
export PATH=/x/x/x/miniconda3/bin:$PATH
先解釋上述命令的格式,右側(cè)的路徑可以寫(xiě)多個(gè),以:分隔,$PATH表示求PATH變量的值,因?yàn)镻ATH環(huán)境變量以前可能已經(jīng)有值,需要保留那些值不影響其他命令的使用,其次當(dāng)輸入了python命令時(shí),會(huì)從PATH變量的路徑下去找python可執(zhí)行文件,先找到哪個(gè)就用哪個(gè),因此:前后路徑的先后順序也很重要。
2. LD_LIBRARY_PATH
和PATH路徑一樣,只不過(guò)LD_LIBRARY_PATH是設(shè)置動(dòng)態(tài)鏈接庫(kù)的搜索路徑。比如安裝了CUDA以后,一般需要設(shè)置:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH如果要查看是否設(shè)置成功可以使用命令:env | grep PATH 進(jìn)行確認(rèn)
編輯文本文件
命令:vim
vim的高級(jí)使用較復(fù)雜,請(qǐng)參考其他文檔學(xué)習(xí)
壓縮和解壓
命令:zip、unzip、tar
zip和unzip分別正對(duì)與zip的壓縮包壓縮和解壓,tar是Linux另外一種更通用的壓縮解壓工具
# zip和unzip。如果沒(méi)有zip請(qǐng)使用apt-get update && apt-get install -y zip安裝
user@host:/tmp/$ zip -r dir.zip test_directory/ # 將test_directory文件夾壓縮為dir.zip文件
user@host:/tmp/$ unzip dir.zip # 將dir.zip文件解壓# tar. 以下參數(shù)c代表壓縮,x表示解壓,z代表壓縮/解壓為gz格式的壓縮包
user@host:/tmp/$ tar czf dir.tar.gz test_directory/ # 將test_directory文件夾壓縮為dir.tar.gz文件
user@host:/tmp/$ tar xzf dir.tar.gz # 將dir.tar.gz文件解壓# tar還可以用于壓縮和解壓其他格式的壓縮文件,比如bz2
user@host:/tmp/$ tar cjf dir.tar.bz2 test_directory/ # 將test_directory文件夾壓縮為dir.tar.bz2文件
user@host:/tmp/$ tar xjf dir.tar.bz2 # 將dir.tar.bz2文件解壓
查看cpu的信息
命令:nvidia-smi
user@host:/tmp/test_directory# nvidia-smi
Mon Nov 8 11:55:26 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82 Driver Version: 440.82 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 TITAN X (Pascal) Off | 00000000:01:00.0 On | N/A |
| 31% 57C P0 66W / 250W | 408MiB / 12194MiB | 2% Default |
+-------------------------------+----------------------+----------------------+
| 1 TITAN X (Pascal) Off | 00000000:04:00.0 Off | N/A |
| 93% 27C P8 11W / 250W | 2MiB / 12196MiB | 0% Default |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1450 G /usr/lib/xorg/Xorg 32MiB |
| 0 2804 G /usr/lib/xorg/Xorg 351MiB |
+-----------------------------------------------------------------------------+
如果需要不停的輸出GPU占用信息,那么使用nvidia-smi -l 1每隔1秒輸出一次,或使用watch -n 1 nvidia-smi也是同樣的效果
查看/殺死進(jìn)程
查看進(jìn)程的命令:ps
殺死進(jìn)程的命令:kill
root@container-5e3e11aeb4-948a17b1:~# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:04 ? 00:00:00 bash /init/boot/boot.sh
root 58 48 8 14:04 ? 00:00:03 /root/miniconda3/bin/python /root/miniconda3/bin/jupyter-lab --allow-root
root 60 48 0 14:04 ? 00:00:00 /usr/sbin/sshd -D
root 61 48 10 14:04 ? 00:00:04 /root/miniconda3/bin/python /root/miniconda3/bin/tensorboard --host 0.0.0.0 --port 6006 --logdir /root/tf-logs
root 146 61 0 14:04 ? 00:00:00 /root/miniconda3/lib/python3.8/site-packages/tensorboard_data_server/bin/server --logdir=/root/tf-logs
root 402 338 99 14:05 pts/0 00:00:06 python tensorflow2.x-test.py
從ps的輸出結(jié)果中根據(jù)執(zhí)行的命令名稱(chēng)找到要?dú)⑺赖倪M(jìn)程,比如最后python tensorflow2.x-test.py命令執(zhí)行的進(jìn)程ID是402,因此可以:
root@container-5e3e11aeb4-948a17b1:~# kill -9 402
root@container-5e3e11aeb4-948a17b1:~#
kill后可以再次使用ps -ef確認(rèn)進(jìn)程是否已經(jīng)結(jié)束。
查看進(jìn)程的CPU和內(nèi)存占用
命令:top
或者使用平臺(tái)提供的實(shí)例監(jiān)控的功能查看更為方便
Tasks: 11 total, 2 running, 9 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 1.3 sy, 0.0 ni, 96.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 52801571+total, 45453059+free, 7807904 used, 65677196 buff/cache
KiB Swap: 2074620 total, 2074620 free, 0 used. 51678192+avail Mem PID user@host PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2316 root 20 0 21.846g 1.796g 244664 R 101.4 0.4 0:05.56 python 58 root 20 0 372352 84804 15540 S 1.4 0.0 0:05.40 jupyter-lab 59 root 20 0 713796 11288 7668 S 1.4 0.0 0:01.31 proxy 2395 root 20 0 45920 3940 3444 R 1.4 0.0 0:00.01 top 1 root 20 0 25368 3724 3404 S 0.0 0.0 0:00.07 bash 48 root 20 0 55060 24328 9728 S 0.0 0.0 0:00.33 supervisord 60 root 20 0 72304 5872 5140 S 0.0 0.0 0:00.01 sshd 61 root 20 0 9756148 315032 156124 S 0.0 0.1 0:04.16 tensorboard 146 root 20 0 1582996 6964 5296 S 0.0 0.0 0:00.04 server 338 root 20 0 25824 4312 3800 S 0.0 0.0 0:00.18 bash 481 root 20 0 25824 4544 4040 S 0.0 0.0 0:00.18 bash
如果有高負(fù)載(CPU使用率高)的情況,那么一般進(jìn)程都會(huì)排在最上邊,根據(jù)進(jìn)程名稱(chēng)可以進(jìn)行確認(rèn)。那么這個(gè)進(jìn)程占用的CPU可以通過(guò)%CPU字段讀取出來(lái),內(nèi)存更復(fù)雜一些,但是一般看RES字段就夠了。比如上邊第一個(gè)Python進(jìn)程CPU的占用率是101.4%,內(nèi)存使用大小是1.796g(Tips:如果內(nèi)存顯示的單位和上述不同,按e鍵切換)
重定向日志?
命令: >
user@host:/tmp# python train.py # 一般情況下日志會(huì)輸出到stdout/stderr中
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...user@host:/tmp# python train.py > ./train.log 2>&1 # 把stdout/stderr中的日志重定向到train.log文件中,最后的2>&1中,2代表stderr, 1代表stdout,&1可以理解成像c語(yǔ)言中的求地址user@host:/tmp# cat ./train.log # 將train.log文件中的內(nèi)容打印在stdout。cat(Concatenate FILE(s) to standard output.)
Epoch.1 Iter 20
Epoch.1 Iter 40
Epoch.1 Iter 50
...user@host:/tmp$ python train.py > ./train.log 2>&1 & # 如果最后再加一個(gè)&的效果是后臺(tái)運(yùn)行,還可以參考nohup的配合使用
場(chǎng)景一
一般這種情況是進(jìn)程假死,看上去停止了但是實(shí)際還在??梢酝ㄟ^(guò)ps -ef查看進(jìn)程是否還存在,如果存在則用kill命令殺死進(jìn)程,最后用nvidia-smi檢查顯存是否已經(jīng)釋放。
場(chǎng)景二
場(chǎng)景:想把實(shí)例中的模型/數(shù)據(jù)保存在網(wǎng)盤(pán)中一份,方便其他實(shí)例使用
user@host:~# pwd
/root/
user@host:~# ls
train.py autodl-tmp autodl-nas
user@host:~# cp -r train.py autodl-nas/ # 把 train.py 文件存入網(wǎng)盤(pán)中
場(chǎng)景三
場(chǎng)景:發(fā)現(xiàn)進(jìn)程內(nèi)存會(huì)使用超過(guò)限制,導(dǎo)致進(jìn)程被Killed
可以使用Top命令查看進(jìn)程的占用內(nèi)存情況,確認(rèn)內(nèi)存是不是會(huì)停留在一個(gè)值而不會(huì)一直增長(zhǎng),如果一直增長(zhǎng)說(shuō)明程序?qū)?nèi)存的釋放有漏洞,可以分析Python代碼變量的引用來(lái)進(jìn)行優(yōu)化。
場(chǎng)景四
場(chǎng)景:使用JupyerLab的終端掛守護(hù)進(jìn)程跑訓(xùn)練,擔(dān)心關(guān)閉網(wǎng)頁(yè)期間的日志看不到了
可以使用重定向日志功能,把日志寫(xiě)入文件