徹底地/ 終於地, 解決 關於apache 權限的問題了:: 修改 DocumentRoot后的 403錯誤: have no permission to access / on this server


  1. 目錄的權限都 應該設置 為 drwxr_xr_x, 即755, 而html下的文件的權限設置為; 644 即可!

  2. -x 只有目標文件對某些用戶是可執行的或該目標文件是目錄時才追加x 屬性。

  3. -w權限, 可以

  4.  umask [-p] [-S] [mode]
           The  user  file-creation  mask  is  set to mode.  
    

The -S option causes the mask to be printed in symbolic form;

  1. 默認的系統的umask是0002, 即: 目錄的權限是775, 而文件的默認權限是 664.
    但是, 為了減少 組 的權限, 應該將組的 -w權限減去, 即將umask設置為 0022, 即目錄的權限設置為 755, 而文件的權限設置為 644.
在默認權限上,文件和目錄是不一樣的,
對於一個目錄,x權限是非常重要的 ,而對於一個文件,x權限在默認是不應該有的,因為文件大多是用來存儲數據的
,所以在linux中,文件的默認權限應該是644,目錄的默認權限是755

 
要注意的是umask的分數指的是“默認值需要剪掉的權限”,

所以新建文件時權限:rw--r--r--

新建目錄:rwxr-xr-x

實際上, /etc下的所有文件/文件夾, 都是 屬於root:root的! 要編輯這些東西, 都需要 root權限.

如果提示, 不能連接" unable to connect server" 就修改 ServerName 為: localhost:80 即可解決.

使用 su -c 操作的文件/目錄, 包括: mv, cp等操作, 文件/目錄對象 (包括 嵌套的 子目錄/文件) 都成了, 自動轉換為 root:root 的所有權.

cp 操作目錄的時候,需要加 -R, 但是mv本身就可以直接 操作目錄, 即移動 目錄的時候, 不需要加-R 選項. 直接就可以了.

mv是: move, 而rm 則是 : remove 刪除的縮寫.


如何區別httpd 2.2 還是2.4

只要通過, 權限語句:
如果是 Order Allow, Deny ...則是2.2
如果是 require all granted, 或者 denied , 則是2.4.

在多個比較深的目錄層次 之間進行切換的時候, 使用的是: pushd, popd, 和 dirs命令: 參考: http://blog.163.com/benben_long/blog/static/199458243201211334556266/

cd - : -表示 $OLDPWD, 是表示上一個目錄. 所以, cd - 總是在當前目錄和上一個目錄之間切換.

注意, directories stack: 會一直保存, 在pushd 命令的中間, 使用 cd命令的時候, 並不會清空 目錄棧, 只是 替換棧中 的 最上面的 (第一個index=0)的那個目錄...

單獨的pushd命令, 會將 dirs 目錄棧中的 第0個目錄和第1個目錄交換, 並切換到 第1個目錄.
而當前目錄總是位於 第0個, 即第0個 總是 當前目錄!

在dirs棧中切換目錄的時候, 要使用 pushd +n, 必須帶這個加號, 這時候, 才會到 目錄棧中去 查找目錄. 否則, 如果不帶 + 號, 則認為是一個 "目錄實體", "實體目錄", 就會認為是 "pushd 2, 切換到名字為 "2" 的這樣 的目錄, 自然沒有這個目錄而報錯"

pre'requisite [pri' rekw2zit] n. adj. 前提條件; 先決條件, 前提的, 必要的...
mangle pages: (嚴重)破壞頁面..

一般要注意, 關於程序 升級: upgrade的事情 , 一定要謹慎 最好是別作, 否則可能會 因為 包與包之間的 版本不一致, 而導致 出現各種問題!


linux的目錄,不必加上最后面的 slash" /

apache的 虛擬目錄: 就是 目錄別名: alias, 跟虛擬主機 是不一樣的!

登陸phpmyadmin的方法是:

authz是什么意思 : authz: 是 authentication的簡寫!

在給php文件命名的時候, 可以根據文件的性質, 在php的前面加上 .inc.php, .xml.php, .css.php等命名方法.


突然醒悟到/ 領悟到 : 在shell中自定義函數 或命令, 是多么重要 和必要啊, 為了提高工作/操作效率和方便, 如果沒有這個, 那么你管理apache, mariadb, firewalld等是多么痛苦啊!必須要自己寫: 進行自定義的函數和命令!!

比如要在 su -c 'dnf install package_name_parameter' 中, 定義一個 命令/函數, 給 傳遞 包名稱 參數. 這里就不能用 alias來實現了, 因為要作為參數來傳遞, 所以需要定義一個用戶自定義函數:

function  sidnf()
{	
   if [ $# -eq 0 ] ; then
	    echo 'Usage: sdnf PKG_TO_INSTALLED ...'
            exit 1
   fi

   si='dnf install '$1
   su -c  "$si"    ####  這里必須加雙引號!  不加或加單引號 都要出錯!!! 
    ## exit 這里不必顯式的寫exit, 讓dnf的返回值作函數的返回值
}
  1. 創建函數的語法,不必用function來聲明,直接寫,因為當shell檢測到:小括號和大括號的時候,自動認為是一個函數了:foo(){...}
    (當然, 也可以照顧php中的習慣, 在函數名前可以加上 function 關鍵字)
1. 可以直接在.bashrc中書寫函數, 但是更為專業的寫法是: 建立專門的 ~/bin目錄,存放自定義命令文件,或者建立~/lib/sh/目錄,專門存放自定義的shell 函數。 使用方法: 一是, 將他們加入到$PATH中; 二是, 或者加入到 .bashrc, 用 source 或. 點命令的方式執行 ; 三是, 在 其他腳本中, 引用 /調用 lib中的函數庫! 1. 如果是在 foo.sh中使用函數,第一, 先定義函數, 其次, 調用函數: 調用方式是: myFunc para1 para2, 注意不需要加括號!

深刻理解 "函數庫"?

  1. 其實 ~/lib/目錄下的 就是一個/多個 文件!
  2. 因為這個文件中,包含了很多個函數,所以叫函數庫
    lib的意思: library, 庫目錄(就是一個文件集合的意思),里面可以存放 多個按目的/用途/模塊等進行分門別類的 .sh /.c/.php/.class文件,分別叫做:sh庫,c函數庫, php函數庫, php類庫。

調用函數庫中的函數?

#!/bin/bash  
### include lib 
.  ~/lib/sh/libMYFUNCS.sh   // 調用庫函數, 就是直接執行 庫中的函數 文件.
### use function from lib 
printUSERDETS 
### exit script 
exit 0 

函數定義的語法:

[ function ] funname [()]

{

    action;

    [return int;]

}

1、可以帶function fun() 定義,也可以直接fun() 定義, 注意:定義時不帶任何參數!可以在函數內部直接使用 參數代表符, 或參數占位符!$0.$1,....$n
2、參數返回,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255)


1、shell腳本中, 必須在調用函數地方之前,聲明函數,shell腳本是逐行運行。shell不會像其它語言一樣先預編譯(所謂 預編譯, 就像 預先 通知一樣 , 這樣即使函數是在調用的 位置后面, 也有效, 而不會出錯) 。一次必須在使用函數前先聲明函數。
2、total=$(fSum 3 2); $()就是執行命令的另一種表示方式,它是命令,因此 各個輸入參數直接用 空格分隔。
函數/命令里面獲得參數方法可以通過:$0…$n得到。 $0代表函數本身。
3、函數返回值,只能通過$? 系統變量獲得,直接通過=,獲得是空值。其實,我們按照上面一條理解,知道 函數其實就是 一個命令,在shell獲得命令返回值,都需要通過$?獲得。

shell中字符串的連接?

  1. 不用任何連接符號, 比如: . + 什么的, 而是直接將字符串 挨着寫就是了
  2. 直接將兩個字符串挨着寫, 但是變量要使用 ${var} 的形式, 注意跟php變量的形式區別:php的變量是將整個 部分包括$ 放在大括號中的, 如: {$PHP}
  3. 變量用{}的母的, 只是 為了 區分 (變量在 "貪婪匹配"解析)的 時候, 將后面要鏈接的字符串也 當作變量名來處理,避免出錯, 因此, 如果要連接的變量是放在最后面的話, 就不必使用 大括號進行分隔!

鼠標和 光標: 不是一回事. 光標總是那個 "閃爍的短線", 不會變; 而鼠標 是用來 引導 光標的 , 而且其形狀會 隨時改變的.


如何定義"永久性" 的umask?

  1. 有一個 顯示 用戶id的系統變量: $UID. 在 if [ ... ]; then 格式中, 分號 可以緊跟着 后中括號 ].
  2. umask 是一個builtin命令, 是命令, 既然是命令, 設置的格式就是 : umask mode 就不能是 : umask=mode 的方式了. 因為后者 umask=mode的方式 是用來 定義 "變量的" ,不是命令!
  3. 如果在 shell中 使用 umask mode的方式來 定義umask, 只能是臨時的, 關閉shell后, umask又恢復了默認值,
  4. umask的默認值: 在 /etc/profile 文件中定義的!

其中: if [ $UID -gt 199 ] && [ "id -un" = "id -gn" ]; then 數字比較大小用 -gt等表示, 而字符串比較可以直接用 等號= ; 注意 引號+反引號的使用; 表示 大於199 的用戶並且 用戶和組同名的, 使用 0002, 否則使用 0022. 比如: 你用 普通用戶來查看umask, 看到普通用戶設置的 是 0002, 而root查看 , 可知root用戶 設置和 使用的就是 0022: 也就是說, root用戶創建的東西, 對root組的權限限制更嚴, root組是沒有-w寫權限的(by default). 而普通用戶的東西, 對組權限就要松些, 可以有-w權限, 這主要是因為root的東西更敏感, 跟安全的關系更大!

  1. 因此, 如果你想永久性地修改umask, 就在 /etc/profile中, 或~/.bashrc中, 使用 命令: umask 0022 而實際上 是可以不需要更改的!!!

關於 , '', "" 三種轉義符號的根深層的理解

  1. 轉義能力是逐漸減弱的, 而 單引號是 除了 回車符之外, 可以轉義其他所有特殊字符的, 比如: 可以轉義$,所以 要輸出變量就不能放在 單引號內, 單引號中的變量引用 $foo就要失效; 比如 反引號,單引號中的 反引號命令就不能被只相信! 而雙引號 的能力, 就較弱的多 它主要是用來 界定字符串的, 表示他內部 東西, 是一個 字符串整體而已! 但是 $foo變量引用/ 反引號命令等都是有效 的!
  2. 也就是 總之, 一點 , 要在 shell腳本中 , 使 引號內的 變量/命令, 要有效的話, 都要使用 雙引號 ! 所以, 你看到 在 shell中, 基本上很少使用 單引號的, 大多使用雙引號, 就是 為了更靈活/ 更方便的 使用 變量引用/ 反引號命令.

為什么 su -c '$cmd' 沒有執行命令, 馬上返回, 甚至沒有報錯呢?

一 個 原因: 就是 在 命令中, 如果放在單引號中, 通常 只允許 字母和數字, 一般不允許 有特殊字符, 如!, @ # $ 等. 要么這些特殊字符, 解析出錯, 要么直接認為 "該命令" 不認識, 不能識別, 就相當於 空的字符串, 空命令: 等同於 : su -c '' 所以, 就直接返回, 直接結束, 連報錯都沒有.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM