Linux常用操作
目錄
- CentOS7服務配置 - systemctl
- 修改DNS伺服器配置
- sudo許可權配置
- 磁碟分割槽&掛載
- split
- sed
- grep
- awk
- chattr
- named
- timedatectl
- ntp
- tree
- dd
- 磁碟效能指標--IOPS 理論
- hdparm
- fio
- iptables
- RPM 與 YUM 區別和聯絡
- swap
本文僅記錄簡單常用的操作
CentOS7服務配置 - systemctl
# 檢視全部服務命令 systemctl list-unit-files --type service # 檢視服務命令 systemctl status name.service # 啟動服務 systemctl start name.service # 停止服務 systemctl stop name.service # 重啟服務 systemctl restart name.service # 增加開機啟動 systemctl enable name.service # 刪除開機啟動 systemctl disable name.service
配置目錄:/usr/lib/systemd/system
一個簡單的配置模板
$ cat mongod.service Description=MongoDB Database Server After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongod Group=mongod Environment="OPTIONS=-f /etc/mongod.conf" EnvironmentFile=-/etc/sysconfig/mongod ExecStart=/usr/bin/mongod $OPTIONS ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb PermissionsStartOnly=true PIDFile=/var/run/mongodb/mongod.pid Type=forking # file size LimitFSIZE=infinity # cpu time LimitCPU=infinity # virtual memory size LimitAS=infinity # open files LimitNOFILE=64000 # processes/threads LimitNPROC=64000 # locked memory LimitMEMLOCK=infinity # total threads (user+kernel) TasksMax=infinity TasksAccounting=false # Recommended limits for for mongod as specified in # http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
修改DNS伺服器配置
在/etc/resolv.conf
中修改(chattr -i /etc/resolv.conf
)
格式:nameserver 192.168.106.133
sudo許可權配置
編輯/etc/sudoers
找到root ALL=(ALL) ALL
在下面新增
# 允許使用者youruser執行sudo命令(需要輸入密碼)。 youruser ALL=(ALL) ALL # 允許使用者組yourgroup裡面的使用者執行sudo命令(需要輸入密碼)。 %yourgroup ALL=(ALL) ALL # 允許使用者youruser執行sudo命令,並且在執行的時候不輸入密碼。 youruser ALL=(ALL) NOPASSWD: ALL # 允許使用者組yourgroup裡面的使用者執行sudo命令,並且在執行的時候不輸入密碼。 %yourgroup ALL=(ALL) NOPASSWD: ALL
可能需要使用
# 修改sudo檔案的寫許可權
chmod u+w /etc/sudoers
chmod u-w /etc/sudoers
磁碟分割槽&掛載
直接對磁碟進行分割槽掛載:標準分割槽
檢視分割槽
[root@TEST1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 500G 0 disk
└─vdb1 253:17 0 500G 0 part /home/data
建立分割槽
邏輯卷管理方式:LVM
檢視邏輯卷
[root@TEST2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 499G 0 part
├─centos_centos7--6-root 253:0 0 50G 0 lvm /
├─centos_centos7--6-swap 253:1 0 2G 0 lvm [SWAP]
└─centos_centos7--6-home 253:2 0 447G 0 lvm /home
sdb 8:16 0 2T 0 disk
sr0 11:0 1 4M 0 rom
sr1 11:1 1 1024M 0 rom
建立邏輯卷
磁碟掛載
# 格式化
mkfs.ext3 /dev/xvde
# 建立路徑
mkdir -p /opt/data
# 掛載磁碟到路徑下
mount /dev/xvde /opt/data
# 設定開機自動掛載
echo '/dev/xvde /opt/huawei ext3 defaults 0 0' >> /etc/fstab
split
# -b 支援K, M, G, T, P, E, Z, Y
split -b 10k data.file
# -d 使用數字作為字尾, 作為輸出檔名的字尾
# -a 指定字尾長度為3
split -b 10k data.file -d -a 3
# 還可以指定字首‘split_file’
split -b 10k data.file -d -a 3 split_file
sed
sed -i 's\111\aaa\g' file
grep
grep -rn "text" path
awk
tail -f nohup.out | grep mongo查詢時間 | awk '{match($0,/mongo查詢時間:([0-9]*), 本次圈搬運小哥數量:([0-9]*)/,a)}{print a[1],a[2]}'
chattr
- A:即Atime,告訴系統不要修改對這個檔案的最後訪問時間。
- S:即Sync,一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁碟。
- a:即Append Only,系統只允許在這個檔案之後追加資料,不允許任何程序覆蓋或截斷這個檔案。如果目錄具有這個屬性,系統將只允許在這個目錄下建立和修改檔案,而不允許刪除任何檔案。
- b:不更新檔案或目錄的最後存取時間。
- c:將檔案或目錄壓縮後存放。
- d:當dump程式執行時,該檔案或目錄不會被dump備份。
- D:檢查壓縮檔案中的錯誤。
- i:即Immutable,系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的程序只能修改目錄之下的檔案,不允許建立和刪除檔案。
- s:徹底刪除檔案,不可恢復,因為是從磁碟上刪除,然後用0填充檔案所在區域。
- u:當一個應用程式請求刪除這個檔案,系統會保留其資料塊以便以後能夠恢復刪除這個檔案,用來防止意外刪除檔案或目錄。
- t:檔案系統支援尾部合併(tail-merging)。
- X:可以直接訪問壓縮檔案的內容。
// 只能給檔案新增內容,但是刪除不了
chattr +a /etc/passwd
// 檔案不能刪除,不能更改,不能移動
chattr +i /etc/passwd
named
todo
timedatectl
timedatectl
設定硬體時間預設為UTCtimedatectl set-local-rtc 1
啟用時間同步timedatectl set-ntp 1
ntp
強制同步:
systemctl stop ntpd
ntpd -gq
systemctl start ntpd
tree
tree --charset ASCII /proc/sys/fs/
加上--charset ASCII
可以防止亂碼
dd
用指定大小的塊拷貝一個檔案,並在拷貝的同時進行指定的轉換。
(這裡用它簡單測試磁碟讀寫效能)
Linux-dd命令詳解
dd應用例項
# 測試當前位置磁碟寫入效能
dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
# 測試當前位置磁碟讀取效能
dd if=kwxgd of=/dev/zero bs=64k count=4k iflag=direct
磁碟效能指標--IOPS 理論
# 常見磁碟平均物理尋道時間為:
7200轉/分的STAT硬碟平均物理尋道時間是9ms
10000轉/分的STAT硬碟平均物理尋道時間是6ms
15000轉/分的STAT硬碟平均物理尋道時間是4ms
# 常見硬碟的平均旋轉延遲時間為(平均情況下為磁碟旋轉半圈的時間):
7200 rpm 60*1000/7200/2 = 4.17ms
10000rpm 60*1000/10000/2 = 3ms
15000rpm 60*1000/15000/2 = 2ms
# 最大IOPS的理論計算方法:IOPS = 1000 ms/(尋道時間 + 旋轉延遲) 可以忽略資料傳輸時間
7200 rpm的磁碟 IOPS = 1000 / (9 + 4.17) = 76 IOPS
10000 rpm的磁碟 IOPS = 1000 / (6+ 3) = 111 IOPS
15000 rpm的磁碟 IOPS = 1000 / (4 + 2) = 166 IOPS
實際會受到資料傳輸和寫入速度影響,應該低於理論值
hdparm
Linux hdparm 命令用法詳解-Linux命令大全(手冊)
yum install hdparm -y
# 顯示硬碟的相關設定
[root@VM_0_4_centos ~]# hdparm /dev/vda
/dev/vda:
HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
readonly = 0 (off)
readahead = 8192 (on)
geometry = 104025/16/63, sectors = 104857600, start = 0
# 顯示硬碟的柱面、磁頭、扇區數
[root@VM_0_4_centos ~]# hdparm -g /dev/vda
/dev/vda:
geometry = 104025[柱面數]/16[磁頭]/63[扇區], sectors = 104857600[總扇區數], start = 0[起始扇區數]
# 測試硬碟的讀取速度
[root@VM_0_4_centos ~]# hdparm -t /dev/vda
/dev/vda:
Timing buffered disk reads: 622 MB in 3.00 seconds = 207.33 MB/sec
# 測試硬碟快取的讀取速度
[root@VM_0_4_centos ~]# hdparm -T /dev/vda
/dev/vda:
Timing cached reads: 19234 MB in 1.99 seconds = 9654.65 MB/sec
fio
Centos 檢查磁碟讀寫效能
yum install fio -y
# 測試隨機寫IOPS,執行以下命令:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
# 測試隨機讀IOPS,執行以下命令:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
# 測試順序寫吞吐量,執行以下命令:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
# 測試順序讀吞吐量,執行以下命令:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing
以測試隨機寫IOPS的命令為例,說明命令中各種引數的含義:
-direct=1 表示測試時忽略I/O快取,資料直寫。
-iodepth=128 表示使用AIO時,同時發出I/O數的上限為128。
-rw=randwrite 表示測試時的讀寫策略為隨機寫(random writes)。作其它測試時可以設定為:
randread(隨機讀random reads)
read(順序讀sequential reads)
write(順序寫sequential writes)
randrw(混合隨機讀寫mixed random reads and writes)
-ioengine=libaio 表示測試方式為libaio(Linux AIO,非同步I/O)。應用程式使用I/O通常有兩種方式:
同步:同步的I/O一次只能發出一個I/O請求,等待核心完成才返回。這樣對於單個執行緒iodepth總是小於1,但是可以透過多個執行緒併發執行來解決。通常會用16−32根執行緒同時工作將iodepth塞滿。
非同步:非同步的I/O通常使用libaio這樣的方式一次提交一批I/O請求,然後等待一批的完成,減少互動的次數,會更有效率。
-bs=4k 表示單次I/O的塊檔案大小為4KB。未指定該引數時的預設大小也是4KB。
測試IOPS時,建議將bs設定為一個比較小的值,如本示例中的4k。
測試吞吐量時,建議將bs設定為一個較大的值,如本示例中的1024k。
-size=1G 表示測試檔案大小為1 GiB。
-numjobs=1 表示測試執行緒數為1。
-runtime=1000 表示測試時間為1000秒。如果未配置,則持續將前述-size指定大小的檔案,以每次-bs值為分塊大小寫完。
-group_reporting 表示測試結果裡彙總每個程序的統計資訊,而非以不同job彙總展示資訊。
-filename=iotest 指定測試檔案的名稱,比如iotest。測試裸盤可以獲得真實的硬碟效能,但直接測試裸盤會破壞檔案系統結構,請在測試前提前做好資料備份。
-name=Rand_Write_Testing 表示測試任務名稱為Rand_Write_Testing,可以隨意設定。
iptables
詳解
從入門到應用
iptables [ -t 表名 ] 管理選項 [ 鏈名 ] 條件匹配 -j 目標動作或跳轉
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
四表五鏈示意圖:
四表 | 說明 |
---|---|
filter | 確定是否放行改資料包(過濾) |
nat | 修改資料包中的源/目標的IP或者埠 |
mangle | 為資料包設定標記 |
raw | 確定是否對改資料包進行狀態跟蹤 |
security | 是否定義強制訪問控制規則(MAC) |
RPM 與 YUM 區別和聯絡
RPM 是軟體包管理器,YUM是軟體包管理器的前端工具
RPM
# 安裝命令
rpm -i /PATH/TO/RPM_FILE
# 一般組合起來使用:-ivh
rpm -ivh PATH/TO/RPM_FILE
# 升級
# 存在則更新,不存在則安裝
rpm -Uvh rpm包
# 存在則更新
rpm -Fvh rpm包
# 效驗檔案(可以用來檢測軟體相關檔案是否被修改過,如果沒有輸出說明沒有任何檔案被修改)
rpm -V 包名
# 解除安裝命令
rpm -e 包名
# 查詢命令
# 查詢所有已安裝的包
rpm -qa
# 查詢指定包的資訊
rpm -q 包名
# 查詢指定包的摘要資訊
rpm -qi 包名
# 查詢指定包安裝生成的檔案清單
rpm -ql 包名
# 查詢某個檔案是由那個rpm包安裝生成的
rpm -qf /path/to/some_file
# 查詢包安裝生成的配置檔案
rpm -qc 包名
# 查詢包安裝生成的幫助文件
rpm -qd 包名
# 檢視包安裝檔案狀態
rpm -qs 包名
# 對未安裝的RPM包查詢資訊,使用"-p",可以與其他查詢相關的其他選項組合使用
rpm -qpi /path/to/rpm_file
YUM
# 配置檔案
/etc/yum.conf
/etc/yum.repos.d/*.repo
yum list all
yum list all mysql*
yum list installed
yum list available
yum list updates
# 顯示不屬於任何倉庫的,額外的包
yum list extras
# 顯示被廢棄的包
yum list obsoletes
yum list recent
yum search 查詢名
yum repolist all
yum repolist enabled
yum repolist disabled
# 顯示軟體包的摘要資訊(沒有rpm -qi詳細)
yum info zip.x86_64
# 查詢某個檔案是由哪個軟體包生成的(類似rpm -qf),效果好像一樣
yum provides /etc/my.cnf
yum whatprovides /etc/my.cnf
# 清空快取
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
# 手動在本地建立快取
yum makecache
# 安裝
yum [-y] install wget
yum [-y] reinstall wget
yum update wget
yum update-to wget
yum check-update
# 本地安裝
yum localinstall [--nogpgcheck] rpmname.rpm
# 解除安裝
yum remove
swap
啟用swap
# 新建一個專門的檔案用於swap分割槽
$ dd if=/dev/zero of=/data/swap bs=1024 count=8388616
# 通過mkswap命令將上面新建出的檔案做成swap分割槽
$ mkswap /data/swap
# 檢視核心引數vm.swappiness(若vm.swappiness為0則根據實際需要調整成30或者60)
$ cat /proc/sys/vm/swappiness
# 該檔案是無法直接編輯的
# 臨時修改
$ sysctl -w vm.swappiness=60
$ sysctl -a | grep swappiness
# 永久修改:編輯/etc/sysctl.conf檔案
# 啟用此交換分割槽的交換功能
$ swapon /data/swap
$ echo "/data/swap swap swap defaults 0 0" >> /etc/fstab
關閉swap
$ swapoff /data/swap
$ swapoff -a >/dev/null