Linux和Windows目錄結構的組織形式有很大不一樣,html
Windowspython
劃分出了「盤」的概念(C盤、D盤、E盤),已經創建文件系統的硬盤分區被掛載到某一個目錄下,用戶經過操做目錄來實現磁盤讀寫。mysql
以反斜槓(\)分割目錄linux
Linuxnginx
首先是創建一個根(/)文件系統,全部的目錄頁都是有根目錄衍生出來的,web
以斜槓(/)分割目錄sql
在Linux底下,全部的文件與目錄都是由根目錄開始,是目錄與文件的源頭,而後一個個的分支下來,如同樹枝狀,所以稱爲這種目錄配置爲:目錄樹。shell
目錄樹的特色是什麼呢?數據庫
- 目錄樹的起始點是根目錄(/,root);
- 每個目錄不止能使用本地的文件系統,也可使用網絡上的文件系統,能夠利用NFS服務器掛載特定目錄。
- 每個文件在此目錄樹中的文件名,包含完整路徑都是獨一無二的。
/bin: bin是Binary的縮寫, 這個目錄存放着最常用的命令。 /boot: 這裏存放的是啓動Linux時使用的一些核心文件,包括一些鏈接文件以及鏡像文件。 /dev : dev是Device(設備)的縮寫, 該目錄下存放的是Linux的外部設備,在Linux中訪問設備的方式和訪問文件的方式是相同的。 /etc: 這個目錄用來存放全部的系統管理所須要的配置文件和子目錄。 /home: 用戶的主目錄,在Linux中,每一個用戶都有一個本身的目錄,通常該目錄名是以用戶的帳號命名的。 /lib: 這個目錄裏存放着系統最基本的動態鏈接共享庫,其做用相似於Windows裏的DLL文件。幾乎全部的應用程序都須要用到這些共享庫。 /lost+found: 這個目錄通常狀況下是空的,當系統非法關機後,這裏就存放了一些文件。 /media: linux系統會自動識別一些設備,例如U盤、光驅等等,當識別後,linux會把識別的設備掛載到這個目錄下。 /mnt: 系統提供該目錄是爲了讓用戶臨時掛載別的文件系統的,咱們能夠將光驅掛載在/mnt/上,而後進入該目錄就能夠查看光驅裏的內容了。 /opt: 這是給主機額外安裝軟件所擺放的目錄。好比你安裝一個ORACLE數據庫則就能夠放到這個目錄下。默認是空的。 /proc: 這個目錄是一個虛擬的目錄,它是系統內存的映射,咱們能夠經過直接訪問這個目錄來獲取系統信息。 這個目錄的內容不在硬盤上而是在內存裏,咱們也能夠直接修改裏面的某些文件,好比能夠經過下面的命令來屏蔽主機的ping命令,使別人沒法ping你的機器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root: 該目錄爲系統管理員,也稱做超級權限者的用戶主目錄。 /sbin: s就是Super User的意思,這裏存放的是系統管理員使用的系統管理程序。 /selinux: 這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,相似於windows的防火牆,可是這套機制比較複雜,這個目錄就是存放selinux相關的文件的。 /srv: 該目錄存放一些服務啓動以後須要提取的數據。 /sys: 這是linux2.6內核的一個很大的變化。該目錄下安裝了2.6內核中新出現的一個文件系統 sysfs 。 sysfs文件系統集成了下面3種文件系統的信息:針對進程信息的proc文件系統、針對設備的devfs文件系統以及針對僞終端的devpts文件系統。 該文件系統是內核設備樹的一個直觀反映。 當一個內核對象被建立的時候,對應的文件和目錄也在內核對象子系統中被建立。 /tmp: 這個目錄是用來存放一些臨時文件的。 /usr: 這是一個很是重要的目錄,用戶的不少應用程序和文件都放在這個目錄下,相似於windows下的program files目錄。 /usr/bin: 系統用戶使用的應用程序。 /usr/sbin: 超級用戶使用的比較高級的管理程序和系統守護程序。 /usr/src:內核源代碼默認的放置目錄。 /var: 這個目錄中存放着在不斷擴充着的東西,咱們習慣將那些常常被修改的目錄放在這個目錄下。包括各類日誌文件。
在linux系統中,有幾個目錄是比較重要的,平時須要注意不要誤刪除或者隨意更改內部文件。django
/etc: 上邊也提到了,這個是系統中的配置文件,若是你更改了該目錄下的某個文件可能會致使系統不能啓動。
/bin, /sbin, /usr/bin, /usr/sbin: 這是系統預設的執行文件的放置目錄,好比 ls 就是在/bin/ls 目錄下的。
值得提出的是,/bin, /usr/bin 是給系統用戶使用的指令(除root外的通用戶),而/sbin, /usr/sbin 則是給root使用的指令。
/var: 這是一個很是重要的目錄,系統上跑了不少程序,那麼每一個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在/var/log 目錄下,另外mail的預設放置也是在這裏。
查看命令
ls 查看目錄文件
ls -la 查看全部目錄(包括隱藏文件)
stat 文件(目錄) 查看文件(目錄)的詳細信息
lsattr 文件 查看文件的隱藏屬性
. 當前目錄
.. 上一層目錄
- 前一個工做目錄
~ 當前【用戶】所在的家目錄
文件夾操做
增
mkdir 文件夾名稱 建立文件夾
touch .py文件 建立一個文件
可使用遞歸來生成文件夾結構
全是文件夾的 mkdir -p(參數) 文件夾1/文件夾2/文件夾3
文件夾下的文件 mkdir -p(參數) 文件夾4/{文件夾5,文件夾6,文件夾7} (文件夾五、六、7並列)
刪
rmdir 文件夾名稱(空的)
想要刪除非空的文件夾 rm -rf ./*
改
mv 原文件名 新文件名(也有多是移動)
執行第一個python命令
touch .py文件 建立一個py文件
vi py文件 進入文件中
按下鍵 i 進入編輯模式
按下鍵o (在光標所在的下一行進入編輯模式)
按下鍵 Esc 進入命令模式
輸入命令 :wq! 保存退出
輸入命令 :q! 退出,不保存
Linux中很是重要的概念--路徑,路徑用來定位如何找到某個文件。
用戶在硬件存儲設備中執行的文件創建,寫入,讀取,修改,轉存與控制等操做都是依賴文件系統完成的。文件系統的做用是合理規劃硬盤,保證用戶正常使用。
Linux系統支持數十種文件系統,常見文件系統以下。
/etc/fstab是用來存放文件系統的靜態信息的文件
cat /etc/fstab #檢查linux的文件系統
現代操做系統通常屬於多用戶的操做系統,也就是說,同一臺機器能夠爲多個用戶創建帳戶,通常這些用戶都是爲普通用戶,這些普通用戶能同時登陸這臺計算機,計算機對這些用戶分配必定的資源。
普通用戶在所分配到的資源內進行各自的操做,相互之間不受影響。可是這些普通用戶的權限是有限制的,且用戶太多的話,管理就不便,從而引入root用戶。
root用戶是惟一的,且擁有系統的全部權限。root用戶所在的組稱爲root組。「組」是具備類似權限的多個用戶的集合。
Linux系統的特性就是能夠知足多個用戶,同時工做,所以Linux系統必須具有很好的安全性。
在安裝RHEL7時設置的root管理員密碼,這個root管理員就是全部UNIX系統中的超級用戶,它擁有最高的系統全部權,可以管理系統的各項功能,如添加/刪除用戶,啓動/關閉進程,開啓/禁用硬件設備等等。
所以「能力越大,責任越大」,root權限必須很好的掌握,不然一個錯誤的命令可能會摧毀整個系統。
關於用戶的id
在Linux系統中,
用戶也有本身的UID身份帳號且惟一
系統管理員UID爲0 ,系統用戶UID爲1~999
Linux安裝的服務程序都會建立獨有的用戶負責運行。
普通用戶UID從1000開始:由管理員建立
用戶組GID
爲了方便管理屬於同一組的用戶,Linux 系統中還引入了用戶組的概念。經過使用用戶組號碼(GID,Group IDentification),咱們能夠把多個用戶加入到同一個組中,從而方便爲組中的用戶統一規劃權限或指定任務。
假設有一個公司中有多個部門,每一個部門中又 有不少員工。若是隻想讓員工訪問本部門內的資源,則能夠針對部門而非具體的員工來設 置權限。
例如,能夠經過對技術部門設置權限,使得只有技術部門的員工能夠訪問公司的 數據庫信息等。Linux管理員在建立用戶時,將自動建立一個與其同名的用戶組,這個用戶組只有該用戶一我的
useradd 用戶名 #添加用戶
passwd 用戶名 #設置密碼
root用戶能夠修改其餘全部人的密碼,且不須要驗證
groupadd 組名 # 添加用戶組
su命令能夠切換用戶身份的需求
su - username su命令中間的-號很重要,意味着徹底切換到新的用戶,即環境變量信息也變動爲新用戶的信息
通常的順序是(能夠不用遵循)
whoami 先看下當前用戶
第一種方法
第二種方法
ctrl + d (logout)退出登陸
ssh xiao@10.0.0.10 再輸入密碼登陸
小結
一、超級用戶root切換普通用戶無需密碼
二、普通用戶切換超級用戶root須要root的密碼
三、普通用戶權限較小,只能查看基本信息
四、$是普通用戶的命令提示符,#是超級用戶的命令提示符
userdel 參數 用戶名
-r 同時刪除用戶以及家目錄
-f 強制刪除用戶
在/etc/sudoers
中設置了可執行sudo指令的用戶,可使用其餘身份來執行命令,預設身份爲root
若其未經受權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,以後有5分鐘的有效期限,超過時限則必須從新輸入密碼。
sudo 選項 參數
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變量設爲新身份的HOME環境變量;
-k:結束密碼的有效期限,也就是下次再執行sudo時便須要輸入密碼;。
-l:列出目前用戶可執行與沒法執行的指令;
-p:改變詢問密碼的提示符號;
-s<shell>:執行指定的shell;
-u<用戶>:以指定的用戶做爲新的身份。若不加上此參數,則預設以root做爲新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息。
shdo命令用在何時?
權限不夠,這時候須要sudo ls /root 以root身份去運行,chaoge權利小,root總能夠了吧!!
這是因爲配置sudo必須編輯/etc/sudoers文件,而且只有root才能修改,我們能夠經過visudo命令直接編輯sudoers文件,使用這個命令還能夠檢查語法,比直接編輯 vim /etc/sudoers更安全
visudo 編輯sudoers文件 寫入 ## Allow root to run any commands anywhere root ALL=(ALL) ALL chaoge ALL=(ALL) ALL #容許chaoge在任何地方,執行任何命令
而後切換用戶,就可使用sudo ls /root/ 的命令了
小結:
想要查看超出權限的命令必須有sudo
必須使用密碼登陸(當前用戶的密碼)
時間限制5分鐘,超出從新登陸
Linux權限的目的是(保護帳戶的資料)
Linux權限主要依據三種身份來決定:
在Linux中,每一個文件都有所屬的全部者,和全部組,而且規定了文件的全部者,全部組以及其餘人對文件的,可讀,可寫,可執行等權限。
對於目錄的權限來講,可讀(r)是讀取目錄文件列表,可寫(w)是表示在目錄內新增,修改,刪除文件。可執行(x)表示能夠進入目錄
權限,第一個字母爲文件類型,後續9個字母,每3個一組,是三種身份的權限 文件連接數 文件擁有者-屬主 文件擁有組-屬組 文件大小 最後一次被修改的時間日期 文件名
先分析一下文件的類型
- 通常文件
d 文件夾
l 軟鏈接(快捷方式)
b 塊設備,存儲媒體文件爲主
c 表明鍵盤,鼠標等設備
r read 可讀 4 w write 寫入,編輯 2 x executable 能夠執行 1
文件權限與數字轉化
ls -l /var/log/mysqld.log -rw-r--r-- 1 mysql mysql 6735642 8月 11 14:19 /var/log/mysqld.log 這個就表明mysqld.log文件屬主是mysql,屬組是mysql,只有mysql用戶能夠讀取編寫這個文件,其餘人只能讀此文件。
每種身份最低是0分,最高是r+w+x 7分
所以三種身份,最高權限是777,最低是000
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt 所以可知mysqld.log的權限是 屬主是6 r+w(4+2) 屬組是4 r(4) 其餘人是4 r(4)
id 用戶 [root@oldboy_python ~ 16:34:52]#id root uid=0(root) gid=0(root) 組=0(root)
修改屬主 chown 要修改的屬主 文件
修改數組 chgrp 要修改的屬組 文件
chmod 身份 參數 文件
u(user,屬主) +(添加)
g(group,屬組) -(減去)
o(other,其餘人) =(賦值) ?????
a(all,所有)
當前權限 -rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法1
減去屬主的寫權限
chmod u-w pyyu.txt
查看權限
-r--rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法2
屬主添加可讀可寫可執行權限
chmod 700 pyyu.txt
屬主可讀可寫可執行 屬組可讀可執行 其餘人可讀可執行
chmod 755 pyyu.txt
修改文件名,修改文件更改日期 ?????
mv pyyu.txt chaoge.txt
#觸摸,修改時間 touch chaoge.txt
軟鏈接也叫作符號連接,經常使用於安裝軟件的快捷方式配置,如python,nginx等
ln -s 目標文件(目錄) 別名
示例
原始文件
創建軟鏈接
結果
echo $PS1
[\u@\h \W]\$ 這就是linux底下的PS1變量,用於對命令提示符的修改
\u 用戶名
@ 是佔位符
\h 表明主機名
\W 表明最後一個文件夾路徑
\w 當前路徑的,絕對路徑寫法
\t 時間
[ ]
$ 表明用戶身份
如何修改PS1變量
PS1="[\u@\h \w \t]\$"
永久生效的方法
vim /etc/profile 至關於合同文件同樣,每次開機登陸的時候,都會加載這個文件的變量
PS1="[\u@\h \w \t]\$"
修改主機名
hostnamectl set-hostname 主機名 (從新登陸會話,主機名即生效)
碰見了yum報錯的問題,yum install nginx 的時候,說已經有yum進程存在了,而且pid是 2544
爲何呢?
這是由於你以前用了yum命令,而且沒有正確退出,後臺已經有yum進程了
若是你不須要他了,弄死他
kill 2544 殺死已經存在的yum進程
若是你執行這個命令反覆的失敗,進程沒法殺死
kill -9 強制殺死進程,必定會殺掉
儘可能少用kill -9 ,由於這是流氓命令,會強制禍害到其餘進程
我們在公司中,儘可能kill pid 便可
tar命令:用來壓縮和解壓文件,tar自己不具備壓縮功能,他是調用壓縮功能實現的
-A或--catenate:新增文件到以存在的備份文件; -B:設置區塊大小; -c或--create:創建新的備份文件; -C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可使用這個選項。 -d:記錄文件的差異; -x或--extract或--get:從備份文件中還原文件; -t或--list:列出備份文件的內容; -z或--gzip或--ungzip:經過gzip指令處理備份文件; -Z或--compress或--uncompress:經過compress指令處理備份文件; -f<備份文件>或--file=<備份文件>:指定備份文件; -v或--verbose:顯示指令執行過程; -r:添加文件到已經壓縮的文件; -u:添加改變了和現有的文件到已經存在的壓縮文件; -j:支持bzip2解壓文件; -v:顯示操做過程; -l:文件系統邊界設置; -k:保留原有文件不覆蓋; -m:保留文件不被覆蓋; -w:確認壓縮文件的正確性; -p或--same-permissions:用原來的文件權限還原文件; -P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的「/」號; -N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件裏; --exclude=<範本樣式>:排除符合範本樣式的文件。
經常使用參數
-x 解壓
-c 壓縮
-z 以gzip格式壓縮,徹底能夠代替gzip命令(必須註明是 .gz 讓別人知道是什麼格式)
-v或--verbose:顯示指令執行過程;
-f<備份文件>或--file=<備份文件>:指定備份文件;
壓縮
tar 參數 壓縮後的文件名 要壓縮的文件
示例:
tar -cf all.tar *
tar -zcf all.tar.gz *
gzip命令
gzip用來壓縮文件,是個使用普遍的壓縮程序,被壓縮的以".gz"擴展名
gzip能夠壓縮較大的文件,以60%~70%壓縮率來節省磁盤空間
gzip命令-d或--decompress或----uncompress:解開壓縮文件; -f或——force:強行壓縮文件。 -h或——help:在線幫助; -l或——list:列出壓縮文件的相關信息; -L或——license:顯示版本與版權信息; -r或——recursive:遞歸處理,將指定目錄下的全部文件及子目錄一併處理; -v或——verbose:顯示指令執行過程;
tar -zcf all.tar.gz *
實際上執行的是
tar -cf all.tar *
gzip all.tar (對壓縮文件再次進行壓縮)
gzip -dv all.tar.gz (對all.tar.gz文件解壓,解壓後獲得 all.tar)
gzip -l 文件 (顯示壓縮文件信息,但並不解壓)
解壓
tar 參數 壓縮後的文件(無論什麼格式)
示例:
tar -xf all.tar
tar -xf all.tar.gz
netstat命令是用來打印Linux中網絡系統的狀態信息(端口信息),可以讓你得知整個Linux系統的網絡狀況
示例:
netstat 參數
netstat -tunlp -t或--tcp:顯示TCP傳輸協議的連線情況; -u或--udp:顯示UDP傳輸協議的連線情況; -n或--numeric:直接使用ip地址,而不經過域名服務器; -l或--listening:顯示監控中的服務器的Socket; -p或--programs:顯示正在使用Socket的程序識別碼和程序名稱; -a或--all:顯示全部連線中的Socket;
netstat -tunlp |grep 80 #過濾出web頁面的命令
netstat -tunlp |grep 8000 #過濾出django的端口命令
ps 命令用於查看系統中的進程狀態,格式爲「ps [參數]」。
ps 命令經常使用參數 -a 顯示全部進程 -u 用戶以及其餘詳細信息 -x 顯示沒有控制終端的進程
ps -ef|grep nginx #過濾出nginx進程
ps -ef|grep python #過濾出python進程
kill命令用來刪除執行中的程序或工做。kill可將指定的信息送至程序。
選項
-a:當處理當前進程時,不限制命令名和進程號的對應關係; -l <信息編號>:若不加<信息編號>選項,則-l參數會列出所有的信息名稱; -p:指定kill 命令只打印相關進程的進程號,而不發送任何信號; -s <信息名稱或編號>:指定要送出的信息; -u:指定用戶。
只有第9種信號(SIGKILL)才能夠無條件終止進程,其餘信號進程都有權利忽略,下面是經常使用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止 (慎用)
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
實例
一般來說,複雜軟件的服務程序會有多個進程協同爲用戶提供服務,若是逐個去結束這 些進程會比較麻煩,此時能夠使用 killall 命令來批量結束某個服務程序帶有的所有進程。
例如nginx啓動後有2個進程 killall nginx
此項優化爲可選項,根據我的狀況選擇是否調整Linux系統的字符集,字符集就是一套文字符號以及編碼。
Linux下經常使用字符集有:
#查看系統當前字符集
echo $LANG
#檢查xshell crt的字符集
#命令修改字符集
export LANG=en_US.utf8
1.修改配置文件/etc/locale.conf
LANG="zh_CN.UTF-8"
2.更改後查看系統語言變量
locale
亂碼核心解決辦法
1.系統字符集utf8 2.xshell字符集utf8 3.文件字符集一致zh_CN.UTF-8
linux中文設置:
能夠修改變量,臨時生效
或者修改寫入配置文件
LANG="zh_CN.UTF-8"我們修改的PATH變量,PS1變量,LANG語言變量,
PATH=""
PS1=""
LANG=""
可是這樣重啓就失效了,那我們須要他永久生效,所以須要寫入配置文件
那麼和用戶環境變量有關的配置文件,叫作/etc/profile ,
所以把更改變量的命令,寫入到這個文件,之後每次開機,都會讀取,達到永久生效的做用export PS1="[\u@\h \w \t]\$"
linux的dns配置文件 /etc/resolv.conf
cat /etc/resolv.conf
命令查看解析dnsnslookup baidu.com
nslookup www.a.shifen.com (百度網址)添加DNS
vim 編輯配置文件 /etc/resolv.conf
# 添加DNS服務器
nameserver 119.29.29.29
nameserver 223.5.5.5
nslookup命令是經常使用域名查詢工具,就是查DNS信息用的命令。 nslookup4有兩種工做模式,即「交互模式」和「非交互模式」。在「交互模式」下,用戶能夠向域名服務器查詢各種主機、域名的信息,或者輸出域名中的主機列表。而在「非交互模式」下,用戶能夠針對一個主機或域名僅僅獲取特定的名稱或所需信息。 進入交互模式,直接輸入nslookup命令,不加任何參數,則直接進入交互模式,此時nslookup會鏈接到默認的域名服務器(即/etc/resolv.conf的第一個dns地址)。或者輸入nslookup -nameserver/ip。進入非交互模式,就直接輸入nslookup 域名就能夠了。
什麼是計劃任務:
後臺運行,到了預約的時間就會自動執行的任務,前提是:事先手動將計劃任務設定好。這就用到了crond服務
查看計劃任務
tail -f /var/log/cron
添加計劃任務
crontab配置文件
在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
分 時 日 月 周
語法
crontab (選項)(參數)
-e:編輯該用戶的計時器設置; -l:列出該用戶的計時器設置; -r:刪除該用戶的計時器設置; -u<用戶名稱>:指定要設定計時器的用戶名稱。
寫計劃任務時,命令必須加上絕對路徑,不然會出現這種狀況:從日誌中看,確實觸發了計劃任務的執行,可是命令卻沒有執行成功,好比* * * * * reboot就會出現這種狀況,須要將reboot寫成/usr/sbin/reboot
調用crontab -e 編輯該用戶的計時器 設置
進入編輯模式,並輸入命令(每分鐘向wenjian.txt插入‘你好啊‘)
結果
crontab任務配置基本格式: * * * * * command 分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0表明星期天) 命令 第1列表示分鐘1~59 每分鐘用*或者 */1表示 第2列表示小時1~23(0表示0點) 第3列表示日期1~31 第4列表示月份1~12 第5列標識號星期0~6(0表示星期天) 第6列要運行的命令 星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。 逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」 中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」 正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。
用戶