# Linux基礎
* Linux目錄結構
* 常見命令
* 用戶和組
* 權限
## 常用端口號
```
http 80 smtp 25
https 443 pop3 110
ssh 22 ftp 21
scp 22
```
## ubuntu 遠程連接 需要開啓ssh 服務
```
sudo apt-get install openssh-server
service ssh start|stop|restart
```
### 遠程連接工具
* xshell
* putty
* scrt
### 命令提示符
```
need888@need888-virtual-machine:~$
need888 用戶名
need888-virtual-machine 主機名 也叫 hostname
~ 用戶的家目錄 等同於 /home/need888 類似於windows 下面的 C:\Users\neyo
$ 普通用戶正在輸入
# 超級管理員正在輸入
root@need888-virtual-machine:~#
普通用戶的家目錄 是 /home/普通用戶用戶名
管理員用戶的家目錄 是 /root
```
> ubuntu 安全考慮 root 也就是超級管理員 沒有喚起
>
> 普通用戶相關操作 沒有權限 需要 加sudo
>
> 管理員 權限最大 不需要sudo
### 喚起root
```
sudo passwd root
輸入兩次密碼
su root 切換到root
```
### 命令錯誤原因
* Linux 嚴格區分大小寫 cd 切換目錄 CD 就會報錯
* 命令多了空格
* 有些命令 需要提前安裝
### 常用快捷鍵
| 快捷鍵 | 說明 |
| ------------------ | ---------- |
| ctrl+c | 終止正在執行的命令 |
| ctrl+a | 回到命令的開頭 |
| ctrl+e | 回到命令的結尾 |
| ctrl+u | 清空命令行 |
| ctrl+l 或者 clear 命令 | 清空這個屏幕 小清新 |
| tab | 自動補齊 |
### 查看Linux 版本
```
uname -r 內核發行號
uname -v 內核版本號
uname -a 顯示所有的信息
```
### Ubuntu啓動過程
```
開機
BIOS加電自檢
找到MBR 引導分區 其實就是引導 boot
啓動Linux內核
初始化操作系統
```
#### 什麼是掛載?
```
U盤 移動硬盤 不能直接訪問 但是我們可以訪問 電腦中的 我的電腦 通過將u盤插到 電腦上 我們像訪問電腦上的文件一樣訪問u盤 這就叫掛載
取消掛載 就是 彈出U盤
```
## 查看Linux 目錄結構
```
Linux 一切從根目錄出發 /
sudo apt-get install tree
tree -L
. 根
├── bin #存放 常用的命令 普通用戶也可以執行的命令 比如 ls cp 次重點
├── boot #系統啓動文件 和 一些核心文件 都在這裏
├── cdrom #光驅
├── dev #device 設備 這裏存放 設備文件 比如硬盤 光驅 重點
├── etc # 好比手機裏邊的設置 系統的配置文件都在這裏 重點
├── home #普通用戶的家目錄 重點
├── initrd.img -> boot/initrd.img-4.15.0-29-generic 這兩個 好比windows中的快捷方式
├── initrd.img.old -> boot/initrd.img-4.15.0-29-generic
├── lib # 系統的動態鏈接庫 好比windows 中的 C:\Windows\System32 下面的 .dll文件 所有的應用程序依賴這些
├── lib64 # 64位操作系統的動態鏈接庫
├── lost+found #這個目錄系統自動生成 如果非法關機 這裏邊會存放 一些錯誤文件 記錄錯誤
├── media #媒體 光驅裏邊的內容 會自動掛載到這裏
├── mnt # mount 掛載 用戶可以手動掛載到這個目錄下 windows 系統類型是NTFS Linux ext4 一般用來掛載文件系統類 型不同的文件 重點 常用
├── opt #大數據時代 hadoop Oracle 第三方軟件 一般安裝在這裏 裝X的軟件
├── proc # 系統的相關信息 進程 狀態信息都在這裏 好比是 windows任務管理器 這些信息在內存裏
├── root # 管理員用戶的家目錄 重點
├── run # 進程文件一般存放到這裏 次重點
├── sbin # 存放管理員用戶的命令 比如 shutdown ifconfig 有些普通用戶 不具備權限 次重點
├── srv #相關服務信息
├── sys # 跟系統相關的信息 不要動
├── tmp #臨時目錄 常用
├── usr # 類似 C:\Program Files 軟件都安裝在這裏 非常重要
* bin 應用程序的執行目錄
* sbin 超級管理員的命令
* local 管理員安裝應用程序的目錄
├── var # 一般存放數據文件 日誌文件 也就是 能變大的文件 重點
└── vmlinuz -> boot/vmlinuz-4.15.0-29-generic 也是個快捷方式
```
### 常用命令
```
cd 切換目錄
ls 列出所有的文件及目錄
shutdown -h now 立即關機
shutdown -h 12:00
poweroff 關機
halt 立即關機
init 0 關機
reboot 重啓
init 6 重啓
ifconfig 查看網卡信息 及 IP地址
ping www.baidu.com
```
### 幫助文件 非常重要
* --help
* man 其實就是手冊
```
命令 --help 就是查看 命令後邊的參數
man 命令 回車 下一行
q 退出 空格 下一頁
```
## ls 命令
```
-a 列出所有的目錄及文件
-l 長列表的形式展示
-al
-rw-r--r-- 1 root root 0 8月 28 11:04 test.txt
drwxrwxrwt 13 root root 4096 8月 28 10:49 tmp
drwxr-xr-x 11 root root 4096 7月 31 08:38 usr
drwxr-xr-x 14 root root 4096 7月 31 08:50 var
drwx------ 3 root root 4096 7月 31 08:47 root
lrwxrwxrwx 1 root root 30 8月 27 15:18 vmlinuz -> boot/vmlinuz-4.15.0-29-generic
第一部分: d - l 表示文件類型
d 這是個文件夾 也叫目錄 - 文件 l 鏈接 表示這是個 快捷方式
第二部分: rwxr-xr-x 文件目錄鏈接的權限 r read 讀 w write 寫 x exec 執行
第三部分: 13 inode 節點號
第四部分: root 所屬的用戶是root
第五部分: root 所屬的用戶組 是root
第六部分: 4096 文件的大小
第七部分: 7月 31 08:38 文件的修改時間 mtime
第八部分: usr 文件名
```
### 權限
```
rwx rwx rwx
擁有者 所屬組 其他用戶
r read 讀 4
w write 寫 2
x exec 執行 1
- 沒有權限
t 瞭解 保護機制
1: 表示 擁有者的權限
2: 表示所屬組的權限
3. 表示其它用戶的權限
rwx r-x r-x 擁有者 可讀可寫可執行 所屬組 可讀可執行 不可寫 其它用戶可讀可執行 不可寫
755
rwx------ 700
rw-r--r-- 644
666 擁有者 可讀可寫不可知性 所屬組 可讀可寫不可執行 其他用戶 可讀可寫不可執行
```
### 軟連接 ln
```
ln -s 給誰創建快捷方式 快捷方式的名字
比如 ln -s /home /tmp/test
cd /tmp
lrwxrwxrwx 1 need888 need888 5 8月 28 11:39 test -> /root
訪問 /tmp/test 跟訪問 /root 是一樣
如果 /root 這個目錄丟失
那麼快捷方式 也失去作用
```
### 歷史命令
```
history 列出所有的歷史命令 包括行號
!行號 自動執行歷史命令的第幾行
```
## 目錄的管理 所有的目錄都是從/ 出發
* 絕對路徑 cd /home/need888/Desktop/
* 相對路徑 cd ../../.. 到根
```
cd 切換目錄
pwd 查看當前位於哪個目錄
cd .. 回到上一級目錄
cd . 代表當前目錄
cd - 回到來源的目錄 兩個目錄並沒有關聯關係 .. 可能回不去 這時候 用 - 從哪裏過來 回哪裏
cd ~ 回到用戶的家目錄
cd 也是回到用戶的家目錄
```
### 創建目錄
```
mkdir kangbazi1 kangbazi2 kangbazi3
mkdir 目錄名 目錄名1 目錄名2 支持批量創建
mkdir -p taowa/xiaotaowa/xiaoxiaotaowa/wawa 遞歸創建目錄
mkdir -p 1/{2,3}/{4,5,6}/{7,8,9}
1
│ ├── 2
│ │ ├── 4
│ │ │ ├── 7
│ │ │ ├── 8
│ │ │ └── 9
│ │ ├── 5
│ │ │ ├── 7
│ │ │ ├── 8
│ │ │ └── 9
│ │ └── 6
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ └── 3
│ ├── 4
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ ├── 5
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ └── 6
│ ├── 7
│ ├── 8
│ └── 9
```
### 刪除目錄
```
rmdir 目錄名 目錄1 目錄2 刪除指定的目錄 支持批量刪除 目錄裏邊不能有內容
rmdir -p kangbazi/python/1806/ 遞歸刪除
rm -rf 目錄名
-r 遞歸刪除
-f 強制刪除
```
## 文件的管理
### 文件的創建 touch
```
touch 文件名1 文件名2 文件名3 文件名4 文件創建 支持批量創建
echo '我不會撩妹,你可不可以撩我以下' > 3.rmvb 將內容輸出到文件中
echo '你男朋友掉了,快來領走,很好養活的' > 3.rmvb 會將上一個內容覆蓋掉
echo '如果你覺得大海是最乾淨透徹的,那是你沒看過我的眼睛,我的眼裏只有你' >> 3.rmvb
> 覆蓋
>> 追加
```
### 文件的移動 mv
* 重命名
* 位置的移動
```
sudo mv 1.txt /home/need888/ #將1.txt 移動到/home/need888/
sudo mv 6.png /root/ 不在一個目錄下面 叫移動
sudo mv 2.txt 22.docs 重命名
sudo mv ../1.txt ./11.png 上一級目錄下面的 文件 移動到本目錄下
sudo mv 文件名 目錄名 說明是移動
sudo mv 文件名 文件名1 說明是重命名
sudo mv 文件名 目錄名/文件名 移動並重命名
```
### 文件的複製 cp
```
root@need888-virtual-machine:/tmp# cp /tmp/520.rmvb /tmp/1314.haha 當前目錄下 複製一個文件
root@need888-virtual-machine:/tmp# cp 520.rmvb 1314.666 跟上面效果一樣
cp 1314.haha /home/need888/good/ 將文件複製到不同的目錄
cp 1314.haha /home/need888/good/999.piyanping 複製到不同目錄的同時 將名字修改
```
### 文件的刪除 rm
```
rm 文件名 直接刪除
rm /tmp/4.avi 刪除別的目錄下面的文件
rm -i 1314.haha
-i 刪除之前提示用戶
rm -f 文件名 強制刪除 不提示
rm -rf 文件名、目錄名 強制刪除 遞歸刪除
rm -rf * 刪除當前目錄所有
rm -rf *.py 刪除以.py 結尾的文件
刪除之前 一定注意瞪大眼睛
```
### 文件的查看
```
cat 文件名 查看文件中的內容 正序顯示
tac 文件名 從後往前顯示 倒序顯示
head -n 10 /etc/passwd 查看前10條的內容
tail -n 5 /etc/passwd 查看後五條的內容
tail -f cat 文件名 時時查看文件尾部的內容 一般這個命令用來查看日誌
watch -d -n 1 cat /etc/passwd 每秒顯示一次文件的內容
more 文件名 分頁查看內容 空格 下一頁 回車 下一行 q 退出
less 文件名 跟 more一樣分頁查看 空格翻頁 b 向前分頁 q 退出
stat 文件名 查看文件的詳細信息
atime 訪問時間
mtime 修改時間
ctime 修改狀態的時間 修改文件的元數據
```
### 文件的查找
```
find 從哪裏查找 -參數
-name 根據文件名查找
sudo find / -name 1.mp3 如果不寫路徑 代表 在當前目錄下查找
need888@need888-virtual-machine:/tmp$ find -name 1.mp3 表示在tmp目錄下面查找
-iname 根據文件名查找 不區分大小寫
-mtime 根據修改時間查找 + - 天爲單位
sudo find /tmp -mtime -3 /tmp目錄下面 3天以內修改的
sudo find /home/ -mtime +3 3天以上
-user 根據所屬的用戶查找
find /tmp -user 用戶名 文件和目錄所屬用戶是 用戶名的
-size 文件的大小查找 c k m g tb c表示字節
sudo find -size +10k 當前目錄下面 大於10k的
-maxdepth n 查看目錄的深度
find / -maxdepth 2 -name '1.mp3' 只查到 根目錄下面2級 然後根據name查找
-perm
find -perm 700 -maxdepth 1 -ls 查找當前目錄下 權限是700的 最大深度1級 然後列出相信信息
-ls 以列表的形式展示
```
### grep 類似於正則表達式
```
| 管道符
cat /etc/passwd | grep 'root' 前面的輸出 作爲 後面的輸入
前面先把內容輸出出來 然後 用grep 進行匹配
grep 參數
-i 不區分大小寫
-c 只顯示符合條件的行數
-r 遞歸查找子目錄
-n 顯示行號
-l 列出符合 符合要求的文件名稱
need888@need888-virtual-machine:~$ grep -r -l 'need888' '/etc/passwd'
/etc/passwd
--include '*.py'
--exclude '*.py'
--color 表示結果以不同的顏色顯示
ls -al | grep '^-' 在一個目錄下 只顯示文件 ^ 匹配開頭
```
### 查找命令
```
which ls -al 命令 顯示命令的絕對路徑
whereis ls -al 命令
```
### 統計文件內容
```
wc -l 統計多少行
wc -l /etc/passwd
43 /etc/passwd 總共有43行
```
### awk 也叫流媒體編輯器 一行一行的讀
```
:分割
sshd:x:121:65534::/var/run/sshd:/usr/sbin/nologin
cat /etc/passwd | awk -F ':' '{print $3}'
以:分割 打印第三部分 然後進行分析
```
### uniq 一般結合sort 排序 來使用
```
-i 忽略大小寫
-c 前面顯示出現的次數
-d 只顯示重複的行 一樣的輸入一個
-D 只顯示重複的行 有幾個輸出幾個
```
### sort
```
sort 不寫參數 默認按照第一個字母排序
-n 按照純數值
-k 指定的列排序
-t 分隔符
-r 逆向排序
cat /etc/passwd | sort -t ':' -k 3 -n
指定: 分割符 對第三列 按照數值排序
```
### 查看當前用戶名
~~~
whoami 回車
~~~
### 查看日曆 日期
cal
cal 2018 2018全年日曆
date 顯示當前的日期和事時間
### 題目 查找你最常使用的10條命令
答案:
history | awk '{print $2}' | sort | uniq -c | sort -r -n -k 1 | head -n 10