Linux learning notes

如下是學習筆記,學習資源來自
莫煩PYTHON:https://morvanzhou.github.io/tutorials/others/linux-basic/
視頻資源:https://www.bilibili.com/video/av15976434/?p=1



1 Why Linux?

如果你做機器學習什麼的, 很多時候你會發現, 一些模塊, 比如 Tensorflow, Pytorch, 都是 Linux 支持最好. 爲什麼呢? 下面就有介紹啦.

1)免費的
Linux 是一個開放式的系統, 而且最重要的是! 它是免費的!! 免費的!! 免費的!!

正因爲他的免費, 開源, 大量的牛逼程序員涌入了 Linux, 他們在使用 Linux 的同時共同維護和更新着這個系統. 所以 Linux 的精髓就是, 永遠開源 (哈哈, 和我做教程有着異曲同工之處, 這也是我爲什麼開始用 Linux 的原因).

在這裏插入圖片描述
2)比較安全
爲什麼一個開源的系統會更安全? 爲什麼一個大家都能修改的系統會比一個封鎖的系統更安全?

太多人用 Windows 了, 企業, 政府, 銀行等等. 做一個 Windows 的病毒往往比其他的有賺頭多了.

具體參考 Linux 爲什麼沒有病毒?爲什麼沒有人攻擊?

3)老機新用
Linux 的內核文件相對是算少的, 所以整個系統不用佔你多少空間. 我就有這麼一臺大一入學的筆記本, 到現在已經有8年了. 原本 Windows 7 系統, 可是一運行就卡. 我裝上了個 Ubuntu (一種比較流行的 Linux 分支), 電腦瞬間運行”光速”, 上網什麼都不卡了. (很多大學妹子不是覺得上網看劇卡嘛, 給她裝個 Linux, 還顯得你高大上了).

2 安裝 Ubuntu

其實 Linux 不只是 “一個系統”, 他是很多系統的集合, 可以想象成這樣, Linux 就是 Android, 而 Android 還有小米的 米UI, 魅族的UI, 錘子的UI, OPPO 的UI(user interface)等等. 所以實際上要使用的不是 Linux 本身, 而是 Linux 下面的各種 “UI”. 而像 Android 那樣, 他也有很多 “UI”. 比如:

  • CentOS
  • Debian
  • Mint
  • Ubuntu

Ubuntu 具體安裝方法請參考 安裝 Ubuntu 17.10

3 Ubuntu 安裝軟件

其實在 Ubuntu 上, 已經有很多安裝好的 app 了. 比如已經有火狐瀏覽器(Firefox), 可替代 Windows Office 的辦公套件 (LibreOffice) 等等. 不過你仍然可以繼續安裝你需要的軟件 app.

1)使用 Ubuntu 自帶的 app 管理器
2)用 Terminal 的方式

sudo apt-get install 你的App名字

4 Linux 基本指令

4.1 cd(change directory)

cd 是 Change Directory 的縮寫,這是用來切換工作目錄的命令。

  • cd .. 返回上一層的工作目錄
  • cd ../../ 向上返回兩次
  • cd - 返回上一次的工作目錄
  • cd ~ 返回到 home
  • cd 絕對路徑 去任何地方

4.2 ls(list)

ls = list

  • ls -l,輸出詳細信息 -l (long 的簡寫),會打印出文件的權限 (-rw-rw-r-- 之後我們在細說這個), 用戶名, 文件大小, 修改日期, 文件名
  • ls -a,-a (all 的簡寫) 顯示所有文件 . 這裏還會顯示隱藏的文件 (以 . 開頭的)
  • ls -lh -lh (human), 直接 -l 不方便人看, 這個指令是爲了方便給人觀看的. 注意這裏的文件大小使用了 K, MB, GB 之類概括
  • 還有很多其他的功能, 我們可以通過 --help 來查看(ls --help

4.3 touch 新建文件

touch 能夠新建文件,mkdir 用來新建文件夾

  • touch file1 建立一個文件
  • touch file1 file2 file3建立多個文件

4.4 cp(copy)

  • cp 老文件 新文件
    如果新文件已存在,上面指令中老文件會直接覆蓋新文件,爲了避免這種情況,用如下指令
  • cp -i 老文件 新文件
    這樣,如果新文件已存在會提示你是否 overwrite新文件,回答 yesYESy 同意覆蓋,回車或其他字母放棄覆蓋
  • cp file1 folder1/ 文件複製去文件夾
  • cp -R folder1/ folder2/ 複製文件夾,加一個 -R(recursive),表示遞歸的將 folder1 中的所有文件複製到 folder2中
  • cp file* folder2/ 複製多個文件. 複製名字部分相同的多個文件, * 是說”你就找文件前面是 file 的文件, 後面是什麼名字無所謂”。後綴相同也行 cp *4 folder2/
  • cp file1copy file2 folder1/ 複製多個文件,cp 會默認最後一個選項是要複製去的文件夾

4.5 mv(move)

1)移動去另一個文件夾
mv file1 folder1/

2)重命名文件
因爲移動文件到原始的地點, 但是以不同的文件名. 這種做法不就是在重命名嘛!
mv file1 file1rename

4.6 mkdir,rmdir,rm

1)mkdir (make directory)
mkdir (make directory) 就是創建一個文件夾的意思, 使用起來很簡單.

  • mkdir folder(不帶/也可以),夾中夾 mkdir folder/f
  • mkdir f1 f2 f3 新建多個文件夾

2)rmdir (remove directory)
有一個前提條件. 這些要移除的文件夾必須是空的. 不然會失敗.
rmdir folder

3)rm(remove)
那文件夾裏面有文件的這種情況, 或者是移除單個文件的情況, 我們都能用 rm 來實現.

  • rm file1 移除單個文件
  • rm -i 有提示地移除文件 (爲了避免誤刪),每個要移除的文件都進行提示
  • rm -I 有提示地移除文件 (爲了避免誤刪),超過3個文件才進行提示
  • rm -r folder 或者 rm -R folder 可以在文件夾中有文件的情況下刪除這個文件夾

4.7 cat (catenate)

cat (catenate) 可以用來顯示文件內容, 或者是將某個文件裏的內容寫入到其他文件裏. 我們舉例說明.

1)查看文件內容
我們先新建 1.py 文件,並寫上 print("hello py")(比如用 vim),保存好,然後用 cat 進行查看

cat 1.py

output

print("hello py")

2)> 將文件的內容放到另一個文件裏

cat 1.py > 2.py
cat 2.py

output

print("hello py")

3) > 將多個文件的內容打包一起放入另一個文件

cat 1.py 2.py > 3.py
cat 3.py

output

print("hello py")
print("hello py")

4)>> 將內容添加在一個文件末尾
我們先建立一個 4.py,寫上 this is 4,然後添加到上面的 3.py

cat 4.py >> 3.py
cat 4.py

output

print("hello py")
print("hello py")
this is 4

5 文件權限

在這裏插入圖片描述
圖片來源 https://morvanzhou.github.io/tutorials/others/linux-basic/3-01-file-permissions/

  • Type: 很多種 (最常見的是 - 爲文件, d 爲文件夾, 其他的還有l, n … 這種東西, 真正自己遇到了, 網上再搜就好, 一次性說太多記不住的).
  • User: 後面跟着的三個空是使用 User 的身份能對這個做什麼處理 (r 能讀; w 能寫; x 能執行 execute; - 不能完成某個操作).
  • Group: 一個 Group 裏可能有一個或多個 user, 這些權限的樣式和 User 一樣.
  • Others: 除了 User 和 Group 以外人的權限.

小結:Type、 User、Group、Others(1+3+3+3)

關於 User、Group 和 Others(參考Ubuntu 系統中的用戶與用戶組

Linux 是個多用戶多任務的分時操作系統,所有想要調用系統資源的用戶都必須先向系統管理員申請一個賬號,然後通過這個賬號進入系統。用戶的賬號一方面能幫助系統管理員對使用系統的用戶進行跟蹤,控制他們對系統資源的訪問;另一方面也能幫助用戶組織文件,爲用戶提供安全性保護。每個賬號都擁有一個唯一的用戶名和用戶密碼。用戶在登錄時鍵入正確的用戶名和密碼後,才能進入系統和自己的主目錄。

用戶與用戶組間的聯繫:

  • 一對一:一個用戶可以存在於一個用戶組中,也可以是組中的唯一成員。
  • 一對多:一個用戶可以存在於多個用戶組中,那麼此用戶具有多個組的共同權限。
  • 多對一:多個用戶可以存在於一個用戶組中,這些用戶具有和組相同的權限。
  • 多對多:多個用戶可以存在於多個用戶組中,其實就是上面三個對應關係的擴展。

一般來說, 像一個企業部門的電腦, 都可以放在一個 Group 裏, 分享了一些共享文件和權限. Others 就是除了上面提到的 User 和 Group 以外的人.

用第4節創立的py文件爲例,ls -l 查看權限

-rw-r--r-- 1 root root 18 Feb 25 08:27 1.py
-rw-r--r-- 1 root root 18 Feb 25 08:30 2.py
-rw-r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

如何修改這些文件的權限呢?下小節介紹

6 chmod (change mode)修改權限

chmod [][怎麼修改] [哪個文件]

1)誰

  • u: 對於 User 修改
  • g: 對於 Group 修改
  • o: 對於 Others 修改
  • a: (all) 對於所有人修改

2)怎麼修改

  • +, -, =: 作用的形式, 加上, 減掉, 等於某些權限
  • r, w, x 或者多個權限一起, 比如 rx

3)哪個文件

  • 施加操作的文件, 可以爲多個

看一個例子ls -l

-rw-r--r-- 1 root root 18 Feb 25 08:27 1.py
-rw-r--r-- 1 root root 18 Feb 25 08:30 2.py
-rw-r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

chmod u-rw 1.py 2.py 3.py 修改權限,然後再查看 ls -l

----r--r-- 1 root root 18 Feb 25 08:27 1.py
----r--r-- 1 root root 18 Feb 25 08:30 2.py
----r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

下面來一個有趣的 demo

我不怎麼用權限這東西, 但是我卻發現給 python 文件添加權限 x 還算有用的. 爲什麼這麼說? 因爲通常, 如果一個 .py 沒有 x 權限, 在 terminal 中你就需要這樣執行:

python3 1.py

output

hello py

如果你有了 x (可執行權限), 你運行這個文件可以直接這樣打(通過 chmod u+x 1.py 來添加權限):

./1.py

但是需要在 1.py 前添加一句話

#!/usr/bin/python3        # 這句話是爲了告訴你的電腦執行這個文件的時候用什麼來加載

不同人的 python 可能不一樣,用以下命令查看 python 的路徑(參考)

  • whereis python 查看所有python的路徑,不止一個
  • which python 查看當前使用的python路徑

/usr/bin/python3 替換成你對應的當前 python 路徑即可。
然後就可以通過 ./1.py 來執行代碼了,結果如下

hello py

7 Linux 通過 SSH 遠程 Linux

1)給 Linux 安裝 OpenSSH

爲了實現 SSH 功能, 你得確定你的 Linux 上有安裝了 SSH 服務, 通常可能是沒有安裝的. 所以我們將要安裝一個開源的 SSH 工具, 叫做 OpenSSH, 將你的 Linux 變成一個服務器 (就是像你訪問網站一樣訪問你的 Linux). 在 Linux 上打開你的 Terminal, 然後輸入下面這句話安裝 openssh-server. sudo 是使用管理員權限的意思, 所以回車後它可能要求你輸入你用戶密碼.
sudo apt-get install openssh-server

2)Linux SSH 去 Linux
ssh [要控制的用戶名]@[它的IP地址]
eg ssh [email protected]

如果連接服務器映射了端口號,則是 ssh -p [端口號] [要控制的用戶名]@[它的IP地址]
eg ssh -p 44020 [email protected]

確保你操控和被操控的兩臺電腦連接上了同一個路由器. 然後在你被操控電腦的 terminal 上輸入這個獲取被操控電腦的 ip 號碼. ifconfig
如果它提示你沒有安裝 ifconfig, 你就按它的要求安裝就好. 輸入下面指令就能安裝. sudo apt install net-tools

安裝好了後,在終端輸入ifconfig,找到以 inet 開頭的字樣, 這就是你在這個路由下的 ip 地址了.

8 Window 通過 SSH 遠程 Linux

8.1 Xshell

連 Ubuntu Server 用 xshell 軟件比較方便的,因爲圖形頁面。
鏈接:https://pan.baidu.com/s/1ue4YGCgQnYao2VCrmN2hQQ
提取碼:syqd

下載完成後,新建會話屬性,在類別中選中連接
在這裏插入圖片描述

  • 名稱:隨便填
  • 主機:就是需要連接的服務器的 ip
  • 端口號:端口映射號

在這裏插入圖片描述
然後選擇類別中的 用戶身份驗證

  • 用戶名:linux 系統中的用戶名
  • 密碼:用戶名密碼

填好之後連接成功會出現如下界面,就可以在 windows 上遠程控制 Linux 系統了。
在這裏插入圖片描述
文件傳輸,用如下箭頭所示的地方!
在這裏插入圖片描述

8.2 TeamViewer

這個適合連接 Ubuntu 系統(有圖形頁面的),去官網下載一下就行,在 windows 和 Ubuntu 系統中下相應的版本,然後通過夥伴的 ID密碼 連接!同樣手機也可以通過這個方法連接到自己的電腦(也有許多 SSH軟件可以通過手機連接到自己的電腦,在 app store 搜索 SSH 即可)!
在這裏插入圖片描述

9 雲端運行

在自己的筆記本上(Linux 或者 window系統)下寫好的程序運行起來太佔內存,影響做其它的事情,想丟去空閒的 Linux(下面簡稱 Linux2) 系統上運行,怎麼破?

9.1 Linux 寫好的代碼在 Linux2 上運行(局域網)

eg 如下 python 代碼,命名爲 1.py

import platform
a = 0
for i in range(9999):
    a += i
print("Finish job, result=%i" % a)
print("This is", platform.system())

現在本地的 Linux 系統上運行,
在終端輸入 python 1.py 結果如下

Finish job, result=49985001
This is Linux

再用空閒的 Linux 系統上運行,採用如下形式

ssh 用戶名@Linux2的ip python < 要執行的代碼在Linux中的路徑

或者

ssh -p 端口號 用戶名@Linux2的ip python < 要執行的代碼在Linux中的路徑

具體一點

ssh -p 43000 ym@202.197.66.62 python < /root/userfolder/1.py

output

Finish job, result=49985001
This is Linux

這樣寫就不會連接上 Linux2 了,只會讓 Linux 程序在 Linux2 上運行!打工告成

9.2 Window 寫好的代碼在 Linux 上運行(局域網)

打開 cmd,cd 到程序目錄,輸入 python 1.py,結果如下

Finish job, result=49985001
This is Windows

在這裏插入圖片描述
我用的是 windows 10 系統,有自帶的 ssh 功能(設置->管理可選功能),安裝 OpenSSH 客戶端OpenSSH 服務器
在這裏插入圖片描述
此時在 cmd 中輸入 ssh,就可以拉
在這裏插入圖片描述
在 cmd 中,我可以成功的連接到我的 Linux
在這裏插入圖片描述
但無法把在 Linux 上運行的程序結果返回在 cmd 窗口中,很遺憾!我後來借用了 git 工具(成功把windows的程序在 linux 下運行了),git 可以自己去下載安裝!!!
在這裏插入圖片描述

10 文件傳輸

如果是有很多的 Python 文件怎麼辦呢? 有時候 Python 文件是一環扣一環, 這個文件裏調用了那個文件的東西. 這時我們就能先全部複製所有必須文件去 Linux 的緩存區 或者 桌面, 然後再使用 ssh 在 Linux 雲端的運行傳送過去的文件.

10.1 window to Linux

a.py 需要調用 b.py

# This is a.py
from b import inner_func
inner_func()

b.py

# This is b.py
def inner_func():
    print("This is a function in b")

把 windows 中的 a.pyb.py 同時傳入服務器的 /root/userfolder/ 目錄下,我在 windows 的 git 下輸入如下指令

 scp -r -P 44020 {a,b}.py root@202.197.66.62:/root/userfolder/

scp -r -P 端口號 源文件 Linux用戶名@Linux的ip地址:目標文件夾
在這裏插入圖片描述
如果設計到 permission 的問題,請參考 linux下scp報Permission denied錯誤的解決

執行的話, 和上面的步驟有點不一樣, 在本地用 ssh 去雲端, 但是 ssh 的時候同時發送一條指令去執行 a.py. 這條指令我們用 "" 給框起來, 說明是要發送去雲端再執行的指令.

ssh -p 44020 root@202.197.66.62 "python /root/userfolder/a.py"

在這裏插入圖片描述

10.2 Linux to Linux

基本同 window to Linux,改下路徑即可,這裏不再贅述

11 自己的雲計算, 多電腦共享你雲端文件

比如要自己的 window 和 Linux 文件共享,最好兩個都有圖形頁面!!!
參考 https://morvanzhou.github.io/tutorials/others/linux-basic/5-02-share-folder/

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