linux經常使用命令

一 啓動項管理

1 /etc/init.d文件夾

/etc/init.d是/etc/rc.d/init.d文件夾的軟連接,這個文件夾的主要做用是在該目錄下尋找服務腳本,而且根據腳本的run level肯定不一樣的啓動等級。即本質上,該文件夾內是各類各樣的shell腳本。linux

CentOS和Ubuntu,須要在兩個版本中均可以開機啓動服務。但Ubuntu沒有 /etc/rc.d/init.d這個目錄,因此,爲了保持同一種服務在CentOS和Ubuntu使用的統一性,將服務腳本(注:服務腳本在兩個不一樣版本中是不一樣的)都放在 /etc/init.d 目錄下,最終達到的效果是相同的web

2 chkconfig命令

檢查、設置系統的各類服務,能夠查詢操做系統在每個執行等級中會執行哪些系統服務,包括各種常駐服務。shell

謹記chkconfig不是當即禁止或者激活一個服務,而是簡單改變了符號鏈接。apache

等級代號列表: 等級0表示:表示關機 等級1表示:單用戶模式 等級2表示:無網絡鏈接的多用戶命令行模式 等級3表示:有網絡鏈接的多用戶命令行模式 等級4表示:不可用 等級5表示:帶圖形界面的多用戶模式 等級6表示:從新啓動swift

 

二 字符串處理

1 grep命令

普通用法不用在乎引號windows

grep match_pattern file_nametomcat

grep "match_pattern" file_namebash

 

正則使用 grep –E 或者直接使用 egrep均可以服務器

 

2 shell echo命令

顯示變量輸入與輸出

#!/bin/bash網絡

read name

echo 「$name is a test」

顯式換行

echo -e "OK! \n"

顯式不換行

echo -e "OK! \c"

echo "接上面"

顯示命令執行結果

echo `date`

3 shell printf命令

printf使用相似於c的該函數

4 shell test命令

test命令用於檢查某個條件是否成立,它能夠進行數值,字符和文件三個方面的測試

#!/bin/bash

num1=100

num2=100

if test $num1 -eq $num2

then

         echo "equal"

else

         echo "not equal"

fi

5 sed命令

1 -r

表示擴展的正則匹配方式,其中的/之類的不用轉義

例子:echo ${_current_path} | sed -r "s#/root/(.*)/action.*#\1#g"

# 分隔符

() 取值符,匹配全部

\1 第一個取值

三 文件系統

實例1:顯示磁盤使用狀況

命令:

df

輸出:

[root@CT1190 log]# df

文件系統               1K-塊        已用     可用 已用% 掛載點

/dev/sda7             19840892    890896  17925856   5% /

/dev/sda9            203727156 112797500  80413912  59% /opt

/dev/sda8              4956284    570080   4130372  13% /var

/dev/sda6             19840892   1977568  16839184  11% /usr

/dev/sda3               988116     23880    913232   3% /boot

tmpfs                 16473212         0  16473212   0% /dev/shm

linux中df命令的輸出清單的第1列是表明文件系統對應的設備文件的路徑名(通常是硬盤上的分區)

最後一列是掛載點,表示的是一個目錄

linux就是把各類文件,包括磁盤分區之類的都往目錄結構上進行掛載,linux默認有三個分區,即boot分區,swap分區和根分區,這些分區由對應的物理存儲空間,可是須要目錄結構來進行訪問,故就分配了/boot等目錄預支對應

建立文件系統,命令是mkfs,在windows下一般叫格式化。建立文件系統這個操做通常針對的設備是分區,就是上文中說到的partition。固然也能夠是某個文件,具體用法能夠參見man mkfs。

 

 

一個例子

df -h

/dev/mapper/VolGroup-lv_root   39G   17G   21G  44% /

devtmpfs                      3.9G     0  3.9G   0% /dev

tmpfs                         3.9G     0  3.9G   0% /dev/shm

tmpfs                         3.9G  780K  3.9G   1% /run

tmpfs                         3.9G     0  3.9G   0% /sys/fs/cgroup

/dev/xvda1                    488M   34M  419M   8% /boot

tmpfs                         782M     0  782M   0% /run/user/0

 

 

[root@dbs_gauss1 ~]# fdisk -l

 

Disk /dev/xvda: 42.9 GB, 42949672960 bytes, 83886080 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x00017f27

 

    Device Boot      Start         End      Blocks   Id  System

/dev/xvda1   *        2048     1050623      524288   83  Linux

/dev/xvda2         1050624    16777215     7863296   8e  Linux LVM

/dev/xvda3        16777216    83886079    33554432   8e  Linux LVM

 

Disk /dev/xvde: 429.5 GB, 429496729600 bytes, 838860800 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

 

Disk /dev/mapper/VolGroup-lv_root: 42.4 GB, 42404413440 bytes, 82821120 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

這裏能夠看到,/dev/xvda磁盤被分爲了3個分區,其中/dev/xvda1是做爲了/boot分區來使用的,做爲整個linux的啓動分區。而其餘兩個分區沒有被使用到

另外一塊磁盤/dev/mapper/VolGroup-lv_root做爲了主硬盤,沒有進行分區,直接掛載到了/根目錄

tmpfs文件系統,是一種基於內存的虛擬文件系統,通常掛載在目錄/dev/shm下,載redhat中默認使用物理內存的一半

分區

明白三個概念:設備,分區,目錄!

在linux當中,每個設備都是用/dev文件夾下的一個文件來進行表示的

其中第一列的信息

如果文件系統或者是分區信息時,格式爲 /dev/xxyN:dev是表示設備目錄,xxyN是分區名

l  /dev/表明設備所在的目錄名。由於分區在硬盤上,硬盤是設備。而/dev/以後的全部這些文件表明全部可能的分區

l  xx分區名的前兩個字符表明分區所在設備的類型,例如hd(IDE磁盤)或者sd(SCSI磁盤)

l  y代表分區所在的設備的編號,例如/dev/had(第一個IDE磁盤)或/dev/sdb(第二個SCSI磁盤)

l  N表示分區編號,主分區1~4(擴展分區只能有一個,即四個主分區中僅有一個可以成爲擴展分區),邏輯分區從5開始(擴展分區由全部的邏輯分區構成,邏輯分區理論上可有無限多個)

 

掛載

掛載的本質就是將分區關聯到某一個目錄的過程

一個目錄的子目錄能夠被再次掛載到其餘分區上

 

linux和windows最大區別在於,linux中硬件就是硬件,路徑就是路徑,然後者則是混淆在一塊兒的。

動做

  1. 查看是否已經分配磁盤

fdisk -l

  1. 若是有磁盤,則對磁盤創建分區

fisk /dev/sdb

  1. 分區參數設置

輸入m查看幫助菜單

輸入p,設置爲主分區

輸入1,設置爲分區號

直接回車,選擇默認起始扇區

直接回車,選擇默認結尾扇區

  1. 保存分區

輸入w,保存分區設置

  1. 使用fdisk -l查看,確認分區創建成功
  2. 創建好分區以後,對分區進行格式化,創建文件系統

mkfs.xfs -f /dev/sdb1

  1. 進行掛載

mount /dev/sdb1 /home/data

若是掛載點不存在,則須要先進行目錄的建立

  1. 查看一下掛載是否成功

df -TH /home/data

  1. 修改系統配置/etc/fstab,讓系統啓動後自動進行掛載,不然可能會掉盤,添加以下內容

/dev/sdb1 /home/data xfs defaults 0 0

 

四 權限管理

1 添加用戶

useradd leichuang

passwd 123456789

2 查看文件權限

getfacl

查看文件的權限的詳細信息

stat:列出文件的詳細信息

stat -c %a /var/rds/tomcat/conf/server.p12

600

查看文件的權限,而且以校驗數字碼的方式進行輸出

3 sudo 配置

http://blog.csdn.net/yu412346928/article/details/21622029

當前用戶臨時切換到超級用戶下,以超級用戶的權限去執行指定的命令。sudo所須要輸入執行sudo命令的用戶自身的口令,而非root用戶口令。這樣,即便你偶爾離開,但終端依然不會被居心險惡的人利用。

黨用戶執行sudo時,系統會去尋找/etc/sudoers配置文件,判斷當前用戶是否具有使用root的資格。對該配置的修改主要依靠命令visudo進行,其中的語法以下

3.1 user host = commands

user host = commands

User_Alias

Host_Alias

Cmnd_Alias

user表示使用者(這裏也能夠填入group名,在組名前加%),host是登陸主機的方式,而commands是具體命令

例如

switf localhost = /usr/bin/emerge

表示用戶swift能夠在本地(非ssh鏈接的狀況下)使用emerge命令

%wheel localhost = /usr/bin/emerge, /usr/bin/ebuild, /usr/sbin/emerge-webrsync

標示wheel組同時具備3條命令的權限

3.2 定義別名

Host_Alias hostalias = hostname1, hostname2, ...

User_Alias useralias = user1, user2, ...

Cmnd_Alias cmndalias = command1, command2, ...

爲了避免頻繁輸入各個用戶名,能夠定義一些別名

通用別名ALL 代指全部可能的設置。

代碼 2.8: 容許任何用戶在非ssh時執行 shutdown

ALL  localhost = /sbin/shutdown

代碼 2.10: 用戶與命令的別名

User_Alias  SOFTWAREMAINTAINERS = swift, john, danny
User_Alias  PASSWORDMAINTAINERS = swift, sysop
Cmnd_Alias  SOFTWARECOMMANDS    = /usr/bin/emerge, /usr/bin/ebuild
Cmnd_Alias  PASSWORDCOMMANDS    = /usr/bin/passwd [a-zA-Z0-9_-]*, !/usr/bin/passwd root
 
SOFTWAREMAINTAINERS  localhost = SOFTWARECOMMANDS
PASSWORDMAINTAINERS  localhost = PASSWORDCOMMANDS

 

3.3 以其餘非root用戶命令執行權限語法

讓一名用戶像其餘用戶(非root用戶)那樣地運行程序是可行的。這很是有趣,你可使用另外一個用戶(譬如網絡服務器apache)的身份來運行程序或執行一些系統管理操做(好比殺死僵死進程)。

在/etc/sudoers文件中,在命令列表以前,能夠在( 與 )之間列舉須要改變身份的用戶。

 

代碼 2.12: root用戶命令執行權限示例

Cmnd_Alias KILL = /bin/kill, /usr/bin/pkill
 
swift   ALL = (apache, gorg) KILL

 

使用這一設定,用戶能夠運行sudo -u來選擇他想擔當的角色

代碼 2.13: apache用戶那樣運行pkill

$ sudo -u apache pkill apache

可使用Runas_Alias指令爲這些要切換身份的用戶設置別名,它的用法與前面所講的別名設置指令的用法類似。

3.4 密碼與默認設置

默認狀況,sudo要求用戶提供本身的登陸口令來作身份驗證。一旦輸入了相應口令(密碼),sudo會記憶它5分鐘,用戶要把任務集中在這段時間內來完成,不然就要每5分鐘重複輸入一次口令。

固然,這種默認行爲是能夠改變的:能夠在/etc/sudoers中設定Defaults:指令來修改一名用戶的默認行爲。

例如,要將默認的5分鐘修改成0分鐘(即不記憶所輸入口令):

代碼 2.14: 更改時限

Defaults:swift  timestamp_timeout=0

若是將timestamp_timeout設置爲-1,sudo會永遠記住用戶口令,直至系統從新啓動。

 

有一個設置能夠在使用sudo時要輸入所執行命令的所屬用戶口令,而不是執行sudo命令的用戶口令。這一功能可由runaspw指令進行設定。下面示例演示了runaspw的用法,同時也演示了重複輸入口令次數限制的設定方法

代碼 2.15: 須要root口令而非用戶john的口令

Defaults:john   runaspw, passwd_tries=2

 

還有一個有趣的功能是保持DISPLAY變量不變,這樣就能夠運行一些X Window工具了:

代碼 2.16: 保持DISPLAY變量的值不變

Defaults:john env_keep=DISPLAY

使用Defaults:指令能夠更改許多默認設置,要知詳情,可在sudo手冊中搜索Defaults。

 

若是很想容許一名用戶使用sudo運行一些程序時無需輸入任何口令,應當在命令列表前冠以NOPASSWD:,例如:

代碼 2.17: 容許像root那樣使用emerge,而無需口令

swift     localhost = NOPASSWD: /usr/bin/emerge

3.5 查看當前用戶關於sudo的權限

列出權限

運行sudo -l能夠查看當前用戶的sudo權限:

代碼 3.1: 列出權限

$ sudo -l
User swift may run the following commands on this host:
    (root)   /usr/libexec/xfsm-shutdown-helper
    (root)   /usr/bin/emerge
    (root)   /usr/bin/passwd [a-zA-Z0-9_-]*
    (root)   !/usr/bin/passwd root
    (apache) /usr/bin/pkill
    (apache) /bin/kill

若在/etc/sudoers中設定了任何命令都不須要輸入口令,那麼在使用sudo -l時也不須要輸入口令。不然,在口令未被sudo記憶時,依然要輸入相應口令。

 

3.6 延長口令時延

延長口令時限

默認狀況下,sudo的驗證口令會維持在5分鐘內有效。若是用戶想延長這一時間,能夠運行sudo -v重設時間戳,這樣就會又開始一個5分鐘口令記憶時間。

代碼 3.2: sudo口令時限延長

$ sudo -v

相反,若要停掉當前時間戳,可以使用sudo -k.

 

一些注意事項

# Defaults   env_keep += "HOME"

註釋此行的意思是,sudo運行某條命令時獲取到的HOME路徑是該用戶本身自己的HOME路徑

always_set_home: Always set $HOME to the target user's home directory

相關文章
相關標籤/搜索