Ubuntu 2204 修改預設 editor

Ubuntu環境下,如何更改預設的「editor」

操作說明
執行下面的指令,就可以設定改用其他慣用的文字編輯器了。

sudo update-alternatives --config editor

會出現一個類似如下的列表,選擇你預設要使用的文字編輯器就行了。

There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number:

我輸入「4」,按下「Enter」。

上面的操作完畢後驗證一下,看看是不是你想要預設使用的編輯器。

執行下面的指令

editor

或是執行下面的指令

sensible-editor

另外也可以直接執行下面的指令,更改成你慣用的文字編輯器

例如:

慣用 nano

sudo update-alternatives --set editor /bin/nan

慣用 vim.tiny

sudo update-alternatives --set editor /usr/bin/vim.tiny

Linux 限制帳號及群組 SSH 同時登入

在登入 SSH 時, 可以開啟多個 SSH Client , 使用同一個帳號同時連接, 這個情況有時也是需要的。但如果要限制個別帳號同時登入的數量, 可以用以下方法設定。

在多數 Linux 發行版, 在 /etc/security/ 目錄下的 limits.conf 檔案, 可以設定每個帳號或群組同時建立 SSH session 的數量。編輯這個檔案需要有 root 權限, 可以用 sudo 開啟:

$ sudo vi /etc/security/limits.conf

例如想限制帳號 opencli 只可以同時建立一個 SSH session, 可以加入以下內容:

opencli hard maxlogins 1

如果要限制群組的帳號, 可以用以下格式:

groupname hard maxlogins 1

如果要限制系統所有帳號, 可以用 * 取代帳號名稱:

* hard maxlogins 1

當帳號嘗試建立超出限制的 session 時, 登入時會看到以下錯誤:

Too many logins for ‘opencli’.
Last login: Tue Feb 20 08:12:11 2020 from xxx.xxx.xxx.xxx
Connection to xxx.xxx.xxx.xxx closed.

另一種情況是想限制整台主機可以建立的 session, 可以用 maxsyslogins:

* hard maxsyslogins 1

設定了上面語法後, 系統同時只可以該一個帳號建立一個 SSH sessions.

初次使用opensuse-15.4

使用Linux也已經有20年了,從Redhat 6.2開始接觸,大都是以RHEL家族的發行版為主,Redhat 9後因為Redhat政策改變,接著用CentOS 3。

一直到最新的CentOS 8 EOL因為CentOS政策的改變,所以也是要找尋新的發行版來使用。雖然2010左右因為去考LPIC的證照而接觸了Ubuntu,但它是另一個debian的家族。

今天因為要裝MSTR的需求,所以指定要用SUSE,雖然之前有聽過,但從未真正的使用過。今天機緣巧合也算是緣份,剛好操作到它。發現它也是很有特色,沒有fdisk可以用,很多功能都做在yast上面,它幾乎可以涵蓋大多數的常用功能。

但netstat這個常用指令卻無法下,查詢套件也有安裝,後來爬文後才知道改用 ss 。其實也沒有什麼不同,習慣就好了。之後公司的SAP主機都會改用SUSE-Enterprise 熟悉一下也是不錯的機會。

使用 certbot 向 Let’s Encrypt 申請憑證

安裝 certbot

官方建議使用 Canonical 的 snapcraft 來進行安裝。
Ubuntu 通常都已預裝好 snapcraft (因為 Ubuntu 的爸爸就是 Canonical),可以使用下方的指令確保使用最新的 snapcraft 版本。

sudo snap install --classic certbot

設定軟連結讓 Certbot 指令可以執行。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

向 Let’s Encrypt 申請憑證

啟動 Certbot,使用手動授權方法搭配 DNS 查問以驗證網域所有權,這會為您的頂層網域及其子網域請求萬用字元憑證。

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
  • –manual:使用手動驗證。
  • –preferred-challenges dns:使用 dns (亦可改用http)的方式 challenge 。
  • certonly:只產生憑證,讓 Certbot 不要自動產生或修改 Nginx 的設定檔案。

解決ssh遇到[no matching host key type found]的問題

當你使用ssh要連線某主機時,竟發現這個訊息,並且無法連線時怎麼辧 ?

解決的辦法是把ssh指定加密的算法就可以連線,舉例如下

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa aliok@192.168.7.14

或者sftp也可以使用

sftp -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa aliok@192.168.7.14

如果是經常性要連線的主機,可以在設定檔中修改,不必每次下這麼多參數

~/.ssh/config

內容範例如下

Host 192.168.7.14
  HostName 192.168.7.14
  User john
  Port 22
  HostKeyAlgorithms +ssh-rsa
  PubkeyAcceptedKeyTypes +ssh-rsa

Rocky與CentOS 8 網卡指令

Rocky 與 CentOS 的網卡指令從第8版後已經不再是systemctl restart network, 而是改用『nmcli』 這個指令。

查看網卡IP

ip address

可簡化為

ip a

列出網卡資訊

nmcli

查看網卡狀態

nmcli device status

秀出網卡詳細資訊

nmcli device show

查看網卡en160詳細資訊

nmcli device show ens160

重啟網卡

nmcli connection restart

啟動或關閉網卡

nmcli c up ens160
nmcli c down ens160

設定網卡開機自動啟動

nmcli c modify ens160 connection.autoconnect yes

剛除連接網卡

nmcli c delete ens160

新增/刪除一個IP位址和閘道

nmcli c modify ens160 +ipv4.address 192.168.0.3/24  #新增ip
nmcli c modify ens160 -ipv4.address 192.168.0.3/24  #删除ip
nmcli c modify ens160 ipv4.gateway 192.168.0.1  #設定閘道

設定DNS

nmcli c modify ens160 ipv4.dns 8.8.8.8  #新增DNS
nmcli c modify ens160 -ipv4.dns 8.8.8.8  #删除DNS

設定IP取得方式

nmcli connection modify ens160 ipv4.method manual  #手動設定
nmcli connection modify ens160 ipv4.method auto  #DHCP自動取得

讓設定重效(修改後要執行才能生效)

nmcli connection reload

立刻生效網卡設定, 不必重新啟動系統(三擇一)

nmcli c up ens160
nmcli device connect ens160
nmcli device reapply ens160

snmp v2 設定mrtg

方法只是差別在多一個參數而已,另外產出的cfg檔裡, IP後面也都會加5個冒號

SNMPv1:
cfgmaker public@192.168.1.1 > kh.cfg

SNMPv2:
cfgmaker –snmp-options=:::::2 public@192.168.1.1 > kh.cfg

[script]備份排程

保留5個備份檔, 把最舊的刪除

#!/bin/bash
mkdir /web/backup
cd /opt
NEWFILE="`date +%Y%m%d-%H%M`"
TARGET="/web/backup"
FILES_LIMIT=5
# backup httpd  data
tar -zcf $TARGET/web_$NEWFILE.tar.gz webdir
FILES_NUM=`/bin/ls -l $TARGET |grep "gz" |wc -l`
# Delete over files
cd $TARGET
for d in `ls`
do
        if [ $FILES_NUM -gt $FILES_LIMIT ]; then
             BACKUP_LIST=`ls -tr *gz`
             DEL_FILE=`echo $BACKUP_LIST | cut -d ' ' -f 1 | head -1`
             rm -f $DEL_FILE
             FILES_NUM=`/bin/ls -l $TARGET |grep "gz" |wc -l`
        fi
done
chown backup /web/backup/*

利用SSH上傳、下載(使用sz與rz命令)

1、情境簡述

通常,利用SSH管理遠端Linux伺服器時,經常需要與本地互動檔案。當然,我們可以利用FTP方式,比如通過Filezilla客戶端軟體。不過直接使用Xshell軟體自帶的上傳和下載功能無疑使最方便快捷的。通常SSH軟體支援的檔案傳輸協議主要有ASCII、Xmodem、Zmodem等。

rz,sz是便是Linux/Unix同Windows進行ZModem檔案傳輸的命令列工具。

使用前提:

  1. 首先,你的Linux端(CentOS, Ubuntu)需要安裝rz/sz命令,也就是 lrzsz 包。
  2. 其次,windows端需要支援ZModem的telnet/ssh客戶端(像Xshell)。

2、檔案傳輸協議

檔案傳輸是資料交換的主要形式。在進行檔案傳輸時,為使檔案能被正確識別和傳送,我們需要在兩臺計算機之間建立統一的傳輸協議。這個協議包括了檔案的識別、傳送的起止時間、錯誤的判斷與糾正等內容。常見的傳輸協議有以下幾種:

  • ASCII:這是最快的傳輸協議,但只能傳送文字檔案。
  • Xmodem:這種古老的傳輸協議速度較慢,但由於使用了CRC錯誤偵測方法,傳輸的準確率可高達99.6%。
  • Ymodem:這是Xmodem的改良版,使用了1024位區段傳送,速度比Xmodem要快
  • Zmodem:Zmodem採用了串流式(streaming)傳輸方式,傳輸速度較快,而且還具有自動改變區段大小和斷點續傳、快速錯誤偵測等功能。這是目前最流行的檔案傳輸協議。

3、在Linux上安裝lrzsz

單單是SSH客戶端軟體支援以上檔案傳輸協議(ASCII,Xmodem,Ymodem,Zmodem)還不行,我們的Linux伺服器上也得安裝相應的軟體,以支援這些檔案傳輸協議才行。在Linux上,lrzsz就是完成此任務的,lrzsz就是一個支援 Zmodem 傳輸協議的工具。我們通過sz/rz兩個命令,分別傳送/接收檔案。如果我們的系統中沒有安裝lrzsz這個包,就會報錯,安裝即可解決。

##以ubuntu為例

aliok@ulab01:~$ rz
Command 'rz' not found, but can be installed with:
sudo apt install lrzsz
aliok@ulab01:~$ sudo apt install lrzsz
[sudo] password for aliok:
Sorry, try again.
[sudo] password for aliok:
Reading package lists... Done
Building dependency tree      
Reading state information... Done
Suggested packages:
minicom
The following NEW packages will be installed:
lrzsz
0 upgraded, 1 newly installed, 0 to remove and 20 not upgraded.
Need to get 74.8 kB of archives.
After this operation, 531 kB of additional disk space will be used.
Get:1 http://tw.archive.ubuntu.com/ubuntu focal/universe amd64 lrzsz amd64 0.12.21-10 [74.8 kB]
Fetched 74.8 kB in 0s (303 kB/s)
Selecting previously unselected package lrzsz.
(Reading database ... 232559 files and directories currently installed.)
Preparing to unpack .../lrzsz_0.12.21-10_amd64.deb ...
Unpacking lrzsz (0.12.21-10) ...
Setting up lrzsz (0.12.21-10) ...
Processing triggers for man-db (2.9.1-1) ...

4、用法簡述

  • sz中的s意為send(傳送)
### 下載一個檔案:
# sz filename
### 下載多個檔案:
# sz filename1 filename2
### 下載dir目錄下的所有檔案,不包含dir下的資料夾:
# sz dir/*
  • rz中的r意為received(接收)
### 直接鍵入rz命令即可
# rz
### 直接拖動檔案到 xshell即可

輸入rz回車後,會出現檔案選擇對話方塊,選擇需要上傳檔案,一次可以指定多個檔案,上傳到伺服器的路徑為當前執行rz命令的目錄。

5、操作示範

rz命令(下載)

當我們鍵入rz命令之後,會彈出檔案選擇對話方塊,選擇需要傳輸的檔案,點選 Add 即可。

接收的目錄就是我們當前執行rz命令的目錄。

更簡單直接的方法,直接選中檔案,用滑鼠點住檔案往Xshell裡面一拖就可以了。

sz命令(上傳)

假設我要傳送檔案,直接使用sz命令, 其後接上檔名即可。同理,敲下ENTER後,也會跳出對話方塊,讓我們選擇存放的資料夾。

6、檔案大小限制

使用lrzsz非常方便,但是有一點不足之處: 無法傳輸大於 4G 的檔案。

[ubuntu]經由docker安裝wordpress

在一台ubuntu主機上(此測試是在20.04版本上),使用編輯器新增一個檔案名為idwp.sh

#vi idwp.sh

按i進入編輯狀態,然後將底下的內容copy後貼到檔案中

#!/bin/bash
sudo apt install -y curl
sudo curl -sSL http://www.twlais.com/study/docker/ui-dc-wp | bash

按ESC後再按:wq存檔離開, 再以管理者執行它

#sudo bash idwp.sh

即可自動安裝完成, 再以http://[你的ubuntu主機IP]:8031 即可看到安裝完成的設定畫面

[CentOS]變更系統時區

CentOS 6
調整系統時間前,先檢查作業系統的時區,目前位置為台北,檢查ZONE為Asia/Taipei,其實全台灣在CentOS作業系統算同一時區,若非目前時區可以做修改。

# vi /etc/sysconfig/clock

ZONE="Asia/Taipei"

變更系統時間

# cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime

執行 clock –systohc 將目前系統時間寫入 BIOS 時間

# clock --systohc

輸輸入 date 與 hwclock 看看時間是否一致

# date
Thu Jun 26 09:49:48 CST 2008
# hwclock
Thu Jun 26 09:49:51 2008  -0.179890 seconds

CentOS 7
找出你的國家

# timedatectl list-timezones | grep 'Taipei'
Asia/Taipei

設定時區

# timedatectl set-timezone Asia/Taipei

驗證, CST 中原時區

# date
Thu Sep 10 23:34:18 CST 2015

服務上版時自動下載當日過版程式

將下列內容存成檔案, 並授予執行權限, 放置於 /usr/local/bin底下, 可以直接呼叫執行

#!/bin/bash
#
###########################################################
#                                                         #
#           長穩服務上版時自動下載當日過版程式            #
#                    V1.0.20210531                        #
#                        Aliok                            #
#                                                         #
###########################################################
#
if [ "$1" == "y" ]; then
  now="$(date -d 'yesterday' +'%y%m%d')"
  else now="$(date  +'%y%m%d')"
fi
echo "$now"
NAS="192.168.7.51"
workpath="$(pwd)"
svc=${workpath##*/}

## 下載資料夾(down load folder)判別目標資料夾是否存在, 存在則下載,不在則秀訊息 ##
function down_load_dir() {
       if [ -d $1 ];then
         continue
       else  scp -r sysbk@"$NAS":/volume1/IFSD/Release/$svc/$1 . && echo 下載$1
       fi
}

## 檢查當天日期現有資料夾名稱(check release),以下載最新的Release,避免重複下載 ##
function chk_release() {
local nas_dir=`ssh sysbk@"$NAS" 'ls /volume1/IFSD/Release/'$svc/`
for chk_today_dir in  $nas_dir
  do
    if [ -d `echo $chk_today_dir | grep $now` ]; then
      continue
      else down_load_dir  $chk_today_dir
    fi
  done
    echo "沒有新資料"
}


#判別所在位置是否為工作目錄(/var/icw),不正確則不執行
for chkdir in `ls /var/icw`
  do
    if [ /var/icw/$chkdir == $workpath ];
      then echo "現在工作目錄=>$chkdir"
          chk_release && exit 0
    fi
  done
echo 你的工作目錄不正確

[batch]定時將同步二個資料夾

這是利用windows的內建指令所撰寫的簡易同步範本
每60秒重複執行一次,若視窗被關閉則中斷

robocopy \\192.168.1.8\share\netpro\COE\TLC\transfer \\192.168.1.245\bi-coe\user\TLC\transfer /MIR
timeout /t 60
tlc.bat

將上面的內容存檔成tlc.bat, 在執行時它會自動再呼叫自己而徝環不斷