1. 程式人生 > 實用技巧 >Linux常用操作

Linux常用操作

目錄

本文僅記錄簡單常用的操作

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

強制同步:

  1. systemctl stop ntpd
  2. ntpd -gq
  3. 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