linux

jiayouxhr發表於2024-11-19

EulerOS

Huawei Cloud EulerOS、openEuler和EulerOS映象均為華為自研映象,主要區別如下表 1所示:

在某些發行版(hce os、 Debian-like )的系統裡, tmp 目錄原來只有在啟動的時候才會被清理 ,資料、日誌不要放在/tmp下。

/var/lib目錄通常用於儲存應用程式的資料,並且這些資料在系統重啟時不會被清理或覆蓋。相比之下,/tmp目錄是臨時檔案目錄,系統重啟時可能會被清空。

映象型別描述
Huawei Cloud EulerOS(簡稱HCE OS) Huawei Cloud EulerOS(簡稱HCE OS),是基於openEuler開發的一款商業發行版映象,可替代CentOS、EulerOS等作業系統,並提供專業的維護保障能力,映象目前免費對使用者使用。 說明:Huawei Cloud EulerOS 2.0是基於openEuler 22.03 LTS版本構建的雲上作業系統。
openEuler openEuler是一款開源映象,您可以免費使用,但是不提供商業維護保障能力。openEuler最初由華為研發,但是已經在2021年11月9日正式捐贈給開放原子開源基金會,openEuler的技術支援由開源社群提供。
EulerOS EulerOS是基於開源技術的企業級Linux作業系統軟體,具備高安全性、高可擴充套件性、高效能等技術特性,能夠滿足客戶IT基礎設施和雲端計算服務等多業務場景需求。 說明:EulerOS是基於開源作業系統openEuler進行開發的華為內部的作業系統。

架構cpu

好用:

檢視核心版本

hostnamectl

不用:

uname命令用於顯示作業系統資訊,例如核心版本、主機名、處理器型別等

uname常用的有-a,-r,-rs

例子:

Linux hcss-ecs-bfc0 5.10.0-182.0.0.95.r1941_123.hce2.x86_64 #1 SMP Fri Jun 28 09:41:47 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
--help  顯示幫助。

-a 或--all 顯示全部資訊,包括核心名、主機名、核心版本、處理器型別和硬體架構等。
-s 或--sysname 顯示核心名。
-n 或--nodename 顯示主機名(網路節點上)。
-r 或--kernel-release 顯示核心發行版。
-v 或--kernel-version 顯示核心版本。
-m 或--machine 顯示計算機硬體架構。
-p 或--processor 顯示主機處理器型別
-i 或--hardware-platform 顯示硬體平臺
-o 或--operating-system 顯示作業系統名稱

linux常用目錄 關係

在某些發行版(hce os、 Debian-like )的系統裡, tmp 目錄原來只有在啟動的時候才會被清理 ,資料、日誌不要放在/tmp下。

#var:這是一個非常重要的目錄,系統上跑了很多程式,那麼每個程式都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在 /var/log 目錄下,另外 mail 的預設放置也是在這裡。

#一.很多應用都安裝在/usr/local下面,那麼,這些應用為什麼選擇這個目錄呢?理解了最根源的原因後,也許對你理解linux組織檔案的方式有更直觀的理解。而GUN下面絕大部分應用的編譯系統都是用automake。於是乎,你看到的很多很多應用都安裝在了/usr/local/目錄
#二.首先注意usr 指 Unix System Resource,而不是User,
#然後通常/usr/bin下面的都是“系統預裝的”可執行程式,會隨著系統升級而改變 ----- yum 安裝都在/usr/bin
#/usr/local/bin目錄是給使用者放置自己的可執行程式的地方,推薦放在這裡,不會被系統升級而覆蓋同名檔案
#如果兩個目錄下有相同的可執行程式,誰優先執行受到PATH環境變數的影響,比如我的一臺伺服器的PATH變數為
echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/dean/bin 這裡/usr/local/bin優先於/usr/bin

#/etc這個是系統中的配置檔案,如果你更改了該目錄下的某個檔案可能會導致系統不能啟動。

#opt 是 optiona(可選)的縮寫,這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個ORACLE資料庫則就可以放到這個目錄下。預設是空的。

#root
該目錄為系統管理員,也稱作超級許可權者的使用者主目錄

image-20240812165108291

系統版本

cat /etc/issue  或
cat /etc/redhat-release
(Linux檢視版本當前作業系統發行版資訊)

防火牆

iptables

Linux iptables命令詳解-CSDN部落格

iptables詳解之filter - MiaoCunFa - 部落格園

光貓IPv6外網訪問及防火牆規則-光貓/adsl/cable無線一體機-恩山無線論壇


:FORWARD ACCEPT [0:0] 表示對於轉發流量預設策略是接接受,所以家庭網路內部透過IPv6地址互相之間可以訪問。當然有些廠商預設策略是拒絕的,透過新增高優先順序的放行策略來允許訪問的

轉發鏈的防火牆規則,對於 ppp+ (撥號介面,撥號獲取ip)、wan+(wan口介面)預設是丟棄所有流量報文的,所以外網透過IPv6公網IP無法訪問到家庭網路內擁有IPv6公網地址的裝置。


-A FWD_FIREWALL -i ppp+ -j DROP
-A FWD_FIREWALL -i wan+ -j DROP

此處簡單介紹下規則:
-i ppp+ 流量來源介面,ppp+ 、wan+ 一般是家庭網路外部的入站介面
-o br+ 流量目標介面,br+一般是路由上家庭網路的介面
-p tcp 指定協議,預設all
-p tcp --dport 目標埠
-m mac --mac-source 00:11:22:33:44:55 指定來源mac地址
-d 192.168.1.2 目標IP地址,iptables維護的ipv4,ip6tables維護的是ipv6,對應地址格式要注意
-s 192.168.1.100 來源IP地址,iptables維護的ipv4,ip6tables維護的是ipv6,對應地址格式要注意

原因找到了,那麼只需要維護規則即可。
\1. 可以選擇刪除對應規則。 這樣放行所有轉發流量,和關閉ipv6防火牆差不多效果,將家庭網路全部暴露在公網中。不推薦
ip6tables -D FWD_FIREWALL -i ppp+ -j DROP
ip6tables -D FWD_FIREWALL -i wan+ -j DROP



\2. 可以新增精準規則來放行特定流量

ip6tables -A FORWARD -i ppp+ -o br+ -p tcp --dport 8080 -j ACCEPT
ip6tables -A FORWARD -i wan+ -o br+ -p tcp --dport 8080 -j ACCEPT

或則插入規則到第一條高優先順序

ip6tables -I FORWARD 1 -i ppp+ -o br+ -p tcp --dport 8080 -j ACCEPT
ip6tables -I FORWARD 1 -i wan+ -o br+ -p tcp --dport 8080 -j ACCEPT

開放ipv6指定埠

ip6tables -I FORWARD -p tcp --dport 8889 -j ACCEPT

firewalld

linux的防火牆常見的,有兩個,一個是firewalld服務,另一個是iptables(數通專用)。應該是比較新的linux版本——好像是linux7以後——firewalld替代了iptables。

systemctl start firewalld

及時下線


拒絕所有包:# firewall-cmd --panic-on

取消拒絕狀態:# firewall-cmd --panic-off

檢視是否拒絕:$ firewall-cmd --query-panic


設定預設介面區域# firewall-cmd --set-default-zone=public

開啟埠(貌似這個才最常用)

檢視所有開啟的埠:

**# firewall-cmd [--zone=pubilc] --list-ports**

加入一個埠到區域:

**# firewall-cmd [--zone=pubilc] --add-port=8080/tcp** **--permanent**

更新防火牆規則:**# firewall-cmd --reload

yum的源構造:

yum repolist all 顯示所有源

  1. 手工;

  2. yum-config-mannger; 要下載的工具

    如:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3. wget -O 新增;

yum源配置檔案repo下的軟體源 、=軟體倉庫(源)、=映象 (源)

/etc/yum.repos.d 目錄下,多個 .repo 檔案是正常的,每個檔案都可以定義一個或多個軟體倉庫(repository)。YUM 會讀取所有這些 .repo 檔案,並將它們”合併“成一個可用的軟體源列表。如果多個 .repo 檔案中有相同名稱的軟體源(源沒有新舊之分,只是單純重複了),YUM 會使用最後一個讀取到的軟體源。你可以透過在 .repo 檔案中設定 enabled=0 來禁用某個軟體源。

要控制repo裡所有源的優先順序,可以透過在.repo檔案中設定priority引數來實現。以下是一些步驟和注意事項:

  1. 安裝外掛:首先需要安裝yum-plugin-priorities外掛。

    yum install yum-plugin-priorities

  2. 編輯.repo檔案:在/etc/yum.repos.d/目錄下找到你需要設定優先順序的.repo檔案,並新增priority引數。優先順序的值範圍是1到99,數字越小優先順序越高。

    [example-repo]
    name=Example Repository
    baseurl=http://example.com/repo
    enabled=1
    gpgcheck=1
    priority=1

  3. 檢查配置:確保該優先順序外掛/etc/yum/pluginconf.d/priorities.conf檔案中enabled引數為1。

    [main]
    enabled=1

可以透過配置中的priority欄位控制repo源的優先順序。如果優先使用HCE OS預設源,可在hce.repo配置中都加上priority=1(數值越小優先順序越高),然後在第三方源配置中加上priority=2,數值根據實際情況進行調整。

站在軟體的角度,可能會產生一定的問題:

源與源大機率會重複軟體包

1.優先順序高的軟體源會被優先使用。這個優先順序是透過 repo 檔案中的 priority 引數來指定的,數值越大優先順序越高。不滿足直接順延。 2.如果優先順序相同,且重複軟體包,則會使用最新的軟體源。這個最新是指軟體源中的軟體包版本號最新。 3.如果都不滿足,則會隨機選取一個軟體源。

安裝之yum

倉庫(源)= 映象 (源)

  1. wegt\curl xx.repo 也是 國內的 主要有系統、容器 僅此而已

  2. 工具官網下載源rpm rpm -ivh

  3. 國內源 自己建立

1:更換國內yum倉庫源
# 首先如果有原來的倉庫源 備份原倉庫源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下載新的倉庫源資訊到檔案 /etc/yum.repos.d/CentOS-Base.repo中
wget -O /etc/yum.repos.d/CentOS-aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除系統原來的yum快取
yum clean all
# 生成yum快取,即可使用yum安裝yum中的資料
yum makecache z
#
sudo yum clean all: 這個命令會清理 Yum 的快取,包括軟體包快取和後設資料快取。***這樣做的目的是刪除舊的快取資料,防止它們與新的軟體源資訊衝突。***
sudo yum makecache: 這個命令會重新生成 Yum 的快取。***它會下載所有啟用的倉庫的最新後設資料,從而確保你獲取到最新的軟體包資訊。**在經歷一次從遠端倉庫下載後的同時將其儲存在本地快取中。這樣,當你再次執行安裝或更新操作時,而不需要每次都從遠端倉庫下載。


### 如果沒有安裝wget 命令 可以不使用wget命令下載映象資訊,手動複製映象源地址到瀏覽器訪問即可下載到映象原始檔,複製下載到檔案中的所有資訊,手動建立檔案/etc/yum.repos.d/CentOS-Base.repo,將剛才複製到的資訊貼上的這個檔案中。這種方法也就實現了wget -o的命令

# 常用的映象源
http://mirrors.163.com/.help/CentOS6-Base-163.repo # 163網易
http://mirrors.sohu.com/help/CentOS-Base-sohu.repo # 搜狐
http://mirrors.aliyun.com/repo/Centos-7.repo # 阿里
https://mirrors.tuna.tsinghua.edu.cn/help/centos/ # 清華映象,需要手動訪問瀏覽器複製映象資訊

#檢視源
yum repolist 【all】
#源配置目錄路徑
/etc/yum.repos.d

2:不用
#非知名儲存庫
#https://www.cnblogs.com/Sungeek/p/10837658.html 有點像上面源
yum (rpm -ivh) install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 安裝源
percona-release enable-only tools 啟動源 不用吧
yum install percona-xtrabackup-80 下載本體及依賴

檢視yum下載路徑(預設)

#yum makecache fast 可得到索引快取
#以下是預設索引快取路徑
/var/cache/yum/【x86_64/7 】/packages
#yum 會把下載的軟體包和header儲存在cache中而不自動刪除。可使用yum clean all .
#為什麼需要快取,什麼時候執行 yum makecache
Yum 在執行時需要依賴一個本地的軟體包後設資料快取,這個快取包含從遠端倉庫獲取的所有可用軟體包及其版本、依賴關係等資訊。當系統安裝了"(配置了新的)新的 yum 倉庫"或者倉庫中的軟體包有更新時,執行 yum makecache fast 命令可以快速重建這個本地快取。
[root@hcss-ecs-bfc0 /]# yum makecache
Docker CE Stable - x86_64 147 kB/s | 53 kB 00:00
HCE 2.0 base 93 kB/s | 3.0 kB 00:00
HCE 2.0 updates 217 kB/s | 3.5 kB 00:00
Metadata cache created.

檢視yum安裝路徑(預設)

#感覺不是很清晰
#首先安裝一個redis
[root@iZbp1eem925ojwyx17ao9kZ ~]# yum install redis
#查詢redis的安裝包
[root@iZbp1eem925ojwyx17ao9kZ ~]# rpm -qa|grep redis
redis-3.2.10-2.el7.x86_64
#查詢安裝包的安裝路徑
[root@iZbp1eem925ojwyx17ao9kZ ~]# rpm -ql redis-3.2.10-2.el7.x86_64
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf
/etc/systemd/system/redis-sentinel.service.d
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d
/etc/systemd/system/redis.service.d/limit.conf
/usr/bin/redis-benchmark
/usr/bin/redis-check-aof
/usr/bin/redis-check-rdb
/usr/bin/redis-cli

設定yum docker源 尤拉版

#若您安裝過docker,需要先刪掉,之後再安裝依賴:
sudo yum remove docker docker-common docker-selinux docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#下載並新增docker軟體源(所有版本)配置 至 yum 源目錄 /etc/yum.repos.d/ 下 。
CentOS/RHEL
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
軟體倉庫地址替換為:換映象了
sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#Euler 系統如果使用,需要替換網址和 $releasever ; 分別將網址替換為“https://mirrors.huaweicloud.com”; 將 $releasever 替換為具體的版本號,例如:9.9
#建立yum源的cache,更新索引檔案並安裝
yum clean all
sudo yum makecache fast
sudo yum install docker-ce #預設所有版本中最新的

安裝之rpm

// 檢查jdk版本資訊
rpm -qa|grep jdk

// 解除安裝jdk 解除安裝軟體時,不檢查依賴
rpm -e --nodeps jdk

// 安裝jdk
rpm -ivh jdk
-i 安裝
-v 詳細
-h 進度條

一次完整的yum imstall

[root@hcss-ecs-bfc0 ~]# yum install loki --nogpgcheck
Last metadata expiration check: 0:16:00 ago on Wed 21 Aug 2024 04:48:28 PM CST.
Dependencies resolved.
================================================================================================================================================================================================================ Package Architecture Version Repository Size
================================================================================================================================================================================================================Installing:
loki x86_64 3.1.1-1 grafana 22 M

Transaction Summary
================================================================================================================================================================================================================Install 1 Package

Total size: 22 M
Installed size: 73 M
Is this ok [y/N]: y
Downloading Packages:
[SKIPPED] loki-3.1.1.x86_64.rpm: Already downloaded
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : loki-3.1.1-1.x86_64 1/1
Running scriptlet: loki-3.1.1-1.x86_64 1/1
Post Install of a clean install
Reload the service unit from disk
Unmask the service
Set the preset flag for the service unit
Set the enabled flag for the service unit
Created symlink /etc/systemd/system/multi-user.target.wants/loki.service → /etc/systemd/system/loki.service.

Verifying : loki-3.1.1-1.x86_64 1/1

Installed:
loki-3.1.1-1.x86_64

Complete!

Linux命令

rm -rf dir
-d 刪除目錄
-f 強制刪除檔案或目錄,忽略不存在的檔案,不提示刪除確認資訊
-i 刪除檔案或目錄之前詢問使用者進行確認,#預設 rm 命令就會詢問
-I 在刪除超過三個檔案或遞迴刪除前要求確認
-r 遞迴刪除,將指定目錄下的所有檔案及其子目錄一併刪除
-v 顯示刪除指令 rm 的執行過程

時區寫入

echo 'Asia/Shanghai' > /etc/timezone

服務配置指令碼說明

systemd 和 systemctl systemd 是一個守護程序,systemctl 是命令列管理工具:systemd 是用於管理 Linux 系統的初始化過程和後臺服務的初始化系統,而 systemctl 則是用於與 systemd 互動的命令列工具。 systemctl 可以管理 systemd 單元:在 systemd 中,所有的服務、套接字、裝置等都被視為“單元”。systemctl 可以管理這些單元,啟動、停止、重啟、檢視狀態以及管理它們。

————————————————

原文連結:https://blog.csdn.net/m0_60511809/article/details/132460641————————————————

Linux系統服務指令碼說明_wantedby=multi-user.target-CSDN部落格

服務又分為系統服務(system)和使用者服務(user)。

系統服務:開機不登陸就能執行的程式(常用於開機自啟)。
使用者服務:需要登陸以後才能執行的程式。

一般配置完

systemctl status

systemctl reload #只是載入配置檔案命令。有的時候我們只需要重新載入服務的配置檔案,而無需重新啟動,這個過程就是服務重新載入。在這個過程中不會更改與各種服務程序關聯的程序ID。
systemctl restart
#命令來充新啟動服務。在這個過程中,服務將停止然後啟動。所以程序ID會改變,也會關聯新的程序ID。(注意要使用root許可權)
systemctl disable
#類似的,如果想讓一個服務不在系統引導時自動啟動,使用systemctl disable命令。它會“刪除”在啟動服務時建立的符號連結。當然,使用這個命令並不會立即停止該服務。 其與enable相反

在 Linux 系統中,/usr/lib/systemd/system 和 /etc/systemd/system 目錄用於存放 systemd 的單元檔案,但它們有不同的用途和優先順序:

/usr/lib/systemd/system:
這個目錄包含由軟體包管理器(如 YUM、DNF、RPM 等)安裝的單元檔案。
這些檔案通常由作業系統供應商或軟體包提供商提供,不建議手動修改。

/etc/systemd/system:
這個目錄用於存放系統管理員手動建立或修改的單元檔案。
這些檔案具有更高的優先順序,可以覆蓋 /usr/lib/systemd/system 中的同名單元檔案。
簡單來說,/usr/lib/systemd/system 是系統預設的單元檔案存放位置,而 /etc/systemd/system 則是用於本地配置和自定義的單元檔案存放位置。

系統級

一般建立Systemd服務

systemctl指令碼目錄:/usr/lib/systemd/

系統服務目錄:/usr/lib/systemd/system/

使用者服務目錄:/usr/lib/systemd/system/

在/usr/lib/systemd/system目錄下新建service-name.service檔案:

$ vim /etc/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target####表示該服務所在的 Target。在這組,由enable 觸發####


#WantedBy 與 systemctl enable 的關係?

[root@VM-8-9-centos ~]# systemctl enable node_exporter.service#注意
Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /etc/systemd/system/node_exporter.service.
WantedBy=multi-user.target指的是:sshd 所在的 Target 是multi-user.target。



#這個設定非常重要,因為執行systemctl enable xxx.service命令時,xxx.service的一個符號連結,就會放在/etc/systemd/system目錄下面的multi-user.target.wants子目錄之中。
Systemd 有預設的啟動 Target。

systemctl get-default

#輸出multi-user.target

上面的結果表示,預設的啟動 Target 是multi-user.target。在這個組裡的所有服務,都將開機自啟動。這就是為什麼systemctl enable命令能設定開機啟動的原因。

使服務在系統引導時啟動或停止:
要使服務在系統引導時自動啟動,使用systemctl enable命令。這個命令會從服務單元檔案(通常位於 /usr/lib/systemd/system 目錄)建立一個軟連結,指向磁碟上供systemd尋找檔案的位置(一般是 /etc/systemd/system目錄)。但是使用這個命令後,對於當前會話中還沒有啟動的服務,並不會立即啟動,而是在下次系統啟動時再啟動。所以想要立即啟動服務並使其在引導期間自動啟動,需要systemctl enable和systemctl start一起使用。

使用者級

拾遺:systemctl --user - 範輝 - 部落格園 (cnblogs.com)

這些目錄都是存放 systemd 使用者服務單元檔案的不同位置。它們的用途和優先順序有所不同:

  1. /usr/lib/systemd/user/

    • 這個目錄通常由軟體包管理器使用,用於存放系統範圍內的使用者服務單元檔案。

    • 這些檔案通常由系統管理員或軟體包維護者提供,不建議使用者直接修改。

  2. ~/.local/share/systemd/user/

    • 這個目錄用於存放使用者特定的服務單元檔案,通常由應用程式自動建立。

    • 這些檔案僅對當前使用者可見和有效。

  3. /etc/systemd/user/

    • 這個目錄用於存放系統範圍內的使用者服務單元檔案,優先順序高於 /usr/lib/systemd/user/

    • 系統管理員可以在這裡新增或修改使用者服務單元檔案。

  4. ~/.config/systemd/user/

    • 這個目錄是使用者手動建立和管理服務單元檔案的主要位置。

    • 這些檔案的優先順序最高,使用者可以在這裡定義和修改自己的服務。

優先順序順序:因為單元大概會重複

當 systemd 啟動使用者服務時,會按照以下優先順序順序查詢服務單元檔案:

  1. ~/.config/systemd/user/

  2. ~/.local/share/systemd/user/

  3. /etc/systemd/user/

  4. /usr/lib/systemd/user/

希望這些資訊對你有幫助!如果你有具體的服務需要配置或其他問題,隨時告訴我。

檢視服務啟動日誌

journalctl -u loki -f

檔案文字

替換

sed 是每行 執行的。

每行置換一次

sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

每行全部置換+g

sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+g' /etc/yum.repos.d/docker-ce.repo

複製

執行命令之後packageB資料夾下就有packageA資料夾了。
cp -r /home/packageA /home/packageB


將一個資料夾下的所有內容複製到另一個資料夾下
cp -r /home/packageA/* /home/cp/packageB/

cp -r /home/packageA/. /home/cp/packageB/
這兩種方法效果是一樣的。

#重新命名
rename old new#檔名
mv old new 資料夾

touch sth.txt #建立txts

多行寫入

echo "jizz
> bushiba1 > jizz2.txt
> >>jizz2.txt
> " >jizz2.txt

[root@VM-8-9-centos sqlbk]# cat > jizz3.txt << EOF
[client]
default-character-set = utf8mb4
socket = /mysql/data/mysql.sock
[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
socket = /mysql/data/mysql.sock
datadir = /mysql/data/
EOF

vim

檢視檔案內容到終端

#使用 head 和 tail 顯示檔案部分內容
$ head -3 msg
Hello --
I hope you are having a wonderful day!
$ tail -3 msg
bye!

s.
#對每行進行編號就像這樣:n
$ cat -n msg
1 Hello --
2
3 I hope you are having a wonderful day!
4
5
6 That's it for ... now
7
8 bye!
9
10 s.
#不給換行編號:b
#刪除重複的換行:s
#選項透過在每行末尾加 $ 符提供視覺提示,來顯示行尾是否還有多餘的空格。:E

查詢關鍵字

#vim 我們可以透過 / 進入搜尋預設,輸入想要搜尋的內容後回車會高亮出所有對應的匹配結果。
#取消高亮匹配
:nol

#如果是在某個目錄下的多個檔案中查詢內容中包含的關鍵字,查詢方法是:
grep -r 關鍵字 目錄(dir/)
grep -r -n 關鍵字 $(pwd)

#多餘
cat 檔名 | grep "關鍵字"
#grep常用引數
-i:忽略大小寫進行匹配。
-v:反向查詢,只列印不匹配的行。
-n:顯示匹配行的行號。
-r:遞迴查詢子目錄中的檔案。
-l:只列印匹配的檔名。
-c:只列印匹配的行數。

編輯撤銷

首末跳轉

壓縮


#gzip
#壓縮並保留原始檔
gzip -c 原始檔 > 指定壓縮檔名.gz
#解壓並刪除壓縮檔案
gzip -d 指定壓縮檔名.gz
#bzip2
#相比gzip保留檔案多了直接保留引數-k
bzip2 -c 原始檔 > 指定壓縮檔名.bz2
bzip2 -k 原始檔
#解壓並刪除壓縮檔案
bzip2 -d 指定壓縮檔名.gz

#tar
1、tar是一個可以將多個檔案或目錄打包成一個大檔案的功能,同時可以透過gzip、bzip2、xz的支援將檔案
進行壓縮。
2、選項與引數
壓#-c: 建立打包檔案,可以搭配-v來檢視過程中被打包的檔名
查#-t: 檢視打包的檔案內有哪些檔名
解#-x: 解包或者解壓縮的功能,可以搭配-C(大寫)在特定目錄解壓,-t、-c、-x、不可出現在一串命令列中
#-z: 透過gzip的支援進行壓縮/解壓縮,此時檔名最好為*.tar.gz
#-j: 透過bzip2的支援進行壓縮/解壓縮,此時檔名最好為*.tar.bz2
#-J: 透過xz的支援進行壓縮/解壓縮,此時檔名最好為*.tar.xz, -z、-j、-J不可以同時出現在一串命令中
-v: 在壓縮/解壓縮的過程,將正在處理的檔名顯示出來
#-f filname: -f後面要立刻接上要處理的檔名,建議-f單獨寫在一個選項
#-C 目錄: 這個選項用在解壓縮,要在特定的目錄解壓縮,可以用這個選項
#-p(小寫): 保留備份資料的原本許可權和屬性,常用於備份重要的檔案
-P(大寫): 保留絕對路徑,也就是荀彧備份資料中含有根目錄存在
--exclude=FILE: 在壓縮的過程中不要將FILE打包
#檢視打包的檔案的內容和許可權
tar -t(jzJ)vf XXXX
#壓縮
tar -c(jzJ)vf XXXX.XXX *(./xxx)
#解壓到指定路徑
tar -x(jzJ)vf XXXX.XXX -C

資料夾

rm -rf 資料夾(有內容)
#r 向下遞迴
#f 強制刪除 不提示
rm (-rf)檔案1 檔案2 (多個)
#重新命名

#刪除當前目錄下的檔案
rm -rf * ./*
#刪除指定目錄下的檔案 ,要帶**
rm -rf jizz/* #不刪除jizz本身 cd jizz 後,直接rm ./ * -rf
異類
rm -rf jizz/ #連同本身刪除
rm -rf jizz #連同本身刪除

image-20230712163437488

netstat 埠\程序ID\程序名稱處理

檢視程序id資訊

linux

#靜態 
ps aux #沒有程序名稱 只有pid uid
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 2872 1416 ? Ss Jun04 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun04 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jun04 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Jun04 0:00 [ksoftirqd/0]
#動態
top

windows 查埠殺程序

查詢埠占用 --為了得到程序id

winodows findstr 類似於Linux的 grep

-a:顯示包括TCP和UDP在內的所有連線。
-n:以數值形式顯示IP地址和埠號。
-o:顯示程序PID

netstat -ano|findstr "123" 123是程序號和埠號都可以,可以不用"號
netstat -aon|findstr 8080 埠號
netstat -aon|findstr 28888 程序ID號
由程序id 查詢程序名稱 ---不要亂殺

tasklist

tasklist |findstr 28040
#得出mysqld.exe

殺死程序

taskkill

taskkill /f /t /pid 4136  直接殺死指定的程序
taskkill /f /t /im java.exe 根據名稱
taskkill /f /t /im 4136 這樣也可以殺死指定的程序
-#------------------------------------------
f:強制
t:也殺死子程序
im:就是要指定名稱

linux

-i: 網路卡(網路介面)資訊 -ie 和 ifconfig 一樣
#-t: 顯示 TCP 連線
#-u: 顯示 UDP 連線
-a: 包括以上兩種

#3. 禁用反向域名解析,加快查詢速度。預設情況下 netstat 會透過反向域名解析技術查詢每個 IP 地址對應的主機名。這會降低查詢速度。如果你覺得 IP 地址已經足夠,而沒有必#要知道主機名,就使用 -n 選項禁用域名解析功能。意思是-n或--numeric 直接使用IP地址,而不透過域名伺服器。 在Local Address 中顯示 10.0.8.9:8888 而不是10.0.8.9:ddi-tcp-1

-n: 顯示數字地址
-l: 列出狀態是 LISTEN 的統計資訊
-p: 顯示程式的PID和名稱
-c: 持續輸出資訊

netstat -anp | grep 埠號 、 程序id 、 程序名稱 (linux 叫程式)
殺死程序

kill (id)

kill方法的缺陷是,當我們有很多程序要殺死,不可能全部一個一個手動輸程序號,因此能夠根據程序名稱中的關鍵字去殺程序,這樣就可以批次殺死了,如下:

pkill (名稱)

他們的的引數
-9 :強制刪除

linux與window 篩查命令的不同

檢視目錄的許可權設定


ls -ld /tmp/loki/chunks

修改許可權

chmod [-R] 777  檔案或目錄

修改所有者及所屬組

chown [-R] 所有者:所屬組 檔案或目錄

使用者組

uid >=1000 就是普通使用者

/etc/passwd #可以檢視所有使用者
/etc/group #可以檢視所有使用者組

#user的新增和刪除:
在root許可權下,命令:adduser jizz,在/home目錄下會自動建立同名資料夾
建立新使用者後,同時會在etc目錄下的passwd檔案中新增這個新使用者的相關資訊
預設為它當前所屬組設定為與自己同名的組(jizz)
更改密碼
passwd jizz
輸入兩次密碼、
刪除;
命令:userdel 使用者名稱。***若想將它在系統上的檔案也刪除掉,使用命令:userdel -r 使用者名稱

#使用者組的新增和刪除:
#注意是組 groupadd不會體現在passwd上
groupadd testgroup 組的新增
groupdel testgroup 組的刪除
#說明:組的增加和刪除資訊會在etc目錄的group檔案中體現出來。

顯示指定使用者所對應的群組資訊:
# groups linuxprobe
linuxprobe : linuxprobe


#命令列視窗下使用者的相互切換:
su 使用者名稱 // su是switch user的縮寫,表示使用者切換
#su只能切換在/home下有同名資料夾的,即正常登陸的使用者,不像mysql那種

#把指定使用者拉入指定組
usermod
#將一個已有使用者 testuser 增加到一個已有使用者組 root 中,使此使用者組成為該使用者的附加使用者組,可以使用帶 -a 引數的 usermod 指令。-a 代表 append, 也就是將使用者新增到新使用者組中而不必離開原有的其他使用者組。不過需要與 -G 選項配合使用:
usermod -a -G root testuser
#如果要同時將 testuser 的主要使用者組改為 root,則直接使用 -g 選項:
usermod -g root testuser
#如果要將testuser使用者從root組中刪除,則
gpasswd -d testuser root

------------------------------------------------------------------------------

id 使用者名稱 命令為檢視使用者當前所屬組及所有組
#表示當前使用者是chenxi,chenxi當前所屬組為baby,chenxi的所有組(又稱,所屬附加組)為1002(baby),1004(chenxi)
uid=1004(chenxi) gid=1002(baby) groups=1002(baby),1004(chenxi)
#切換當前所屬組
newgrp chenxi
uid=1004(chenxi) gid=1004(chenxi) groups=1004(chenxi),1002(baby)
#上面的groups包含gid


#例子
#預設為它當前所屬組設定為與自己同名的組(jizz)
[root@hcss-ecs-bfc0 data]# adduser jizz
[root@hcss-ecs-bfc0 data]# groups jizz
jizz : jizz
[root@hcss-ecs-bfc0 data]# id jizz
uid=1000(jizz) gid=1000(jizz) groups=1000(jizz)
[root@hcss-ecs-bfc0 data]# usermod -aG root jizz
[root@hcss-ecs-bfc0 data]# id jizz
uid=1000(jizz) gid=1000(jizz) groups=1000(jizz),0(root)
[root@hcss-ecs-bfc0 data]# groups jizz
jizz : jizz root
#改了
[root@hcss-ecs-bfc0 data]# usermod -g root jizz
[root@hcss-ecs-bfc0 data]# id jizz
uid=1000(jizz) gid=0(root) groups=0(root)
[root@hcss-ecs-bfc0 data]# groups jizz
jizz : root
但是jizz最初始的組還在,需要手動刪除;
groupdel jizz 組的刪除
userdel -r jizz徹底刪除使用者;

#沒改過,只有id ,cat /etc/passwd 有用,看指定使用者在那幾個組
[root@hcss-ecs-bfc0 data]# id loki
uid=947(loki) gid=944(loki) groups=944(loki)
[root@hcss-ecs-bfc0 data]# cat /etc/passwd | grep loki
loki:x:947:944::/home/loki:/bin/false
#沒用不能看該組有啥使用者 甚至,自己的原生userid與groupid不一樣時還不顯示,除非在原始組裡加入其他非原始組的user 就可以顯示。
[root@hcss-ecs-bfc0 data]# cat /etc/group | grep loki
loki:x:944:
[root@hcss-ecs-bfc0 data]# groups loki
loki : loki

時間日期

date

定時任務

crontab

在root目錄下,

#檢視當前使用者的crontab條目:
crontab -l

#編輯當前使用者的crontab檔案:
crontab -e

#刪除當前使用者的所有crontab條目:
crontab -r


crontab -e 進入vim
0 0 * * 1-6 /usr/bin/python3 /fromwin/test.py

python 巡檢專案 及 日常庫的使用

subprocess\ psutil

事件觸發型巡檢

  • 場景:當某個關鍵服務異常或者監控系統(如Prometheus)觸發告警時,執行指令碼進行詳細檢查。

  • 目的:在出現異常時,快速獲取系統的詳細狀態,輔助定位問題。

  • 示例:監控系統發現資料庫服務響應慢時,指令碼會自動執行,檢查資料庫伺服器的CPU、記憶體、磁碟使用情況,並進行日誌分析,尋找潛在問題。

資源最佳化巡檢

  • 場景:根據資源使用情況進行巡檢,檢查系統資源利用率,尋找最佳化空間。

  • 目的:提高系統資源利用率,降低成本。

  • 示例:每週末,指令碼會自動執行,檢查所有伺服器的CPU和記憶體使用率,並根據預設的閾值生成報告,建議哪些伺服器可以進行資源調整或最佳化。

psutil:用於獲取系統資訊和監控程序。

paramiko:用於SSH連線和遠端命令執行。##

logging:Python標準庫,用於日誌記錄。##

pandas:用於資料分析和處理。##

requests:用於HTTP請求和網路監控。

三劍客

awk

使用awk分析日誌(最後一個欄位是IP,統計訪問量前十的IP,並進行排序)

某欄位的最大(小值)

awk 'max<$3 {max = $X} END { printf " %-10s %-10s\n" ,max}'

某欄位的累計報告: awk ‘{sum+= $1} END{print sum}’ .txt

分組統計報告:

awk '{IP[$NF]++}END{for (k in IP) print k,IP[k]}' access.log | sort -nrk2 | head#先每行count++ 在最後end進行count 的報告,

awk 'BEGIN {FS=","; print "Start processing CSV"} 
NR == 1 {print "Header: " $0} $0是當前行所有欄位,
NR > 1 {print "Data: " $1, $2, $3}
END {print "End of processing"}' file.csv

BEGIN 程式碼塊在開始處理前設定欄位分隔符 FS,並列印開始資訊。
NR == 1 程式碼塊處理第一行(通常是表頭)並列印。
NR > 1 程式碼塊處理除第一行以外的所有行,並列印前三個欄位。
END 程式碼塊在處理完所有行後列印結束資訊。

內建變數:

$X

FS:欄位分隔符(預設是任何空格)

RS:記錄分隔符(預設是一個換行符)

NR:已經讀出的記錄數(記錄數就是行數) #第一行就是1#當前第幾行

NF: 一條記錄(行)的欄位的數目 # 當前行的所有欄位數 ,第一個欄位就是$1,最後一個欄位就是$NF

平常時”固定“查詢那幾項如資源利用率就寫好的awk指令碼 直接使用就行

test.awk

#執行前
BEGIN {
math = 0
english = 0
computer = 0

printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
printf "---------------------------------------------\n"
}
#每行執行時
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#執行後
END {
printf "---------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", math, english, computer
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR #end裡nr為最底行數
}

相關文章