Linux日常使用技巧集


作為技術人員,Linux 系統可以說是我們使用最多的操作系統,但我們可能並不是很了解它。在這里我將自己日常遇到的 Linux 使用技巧記錄下來,方便以后查詢使用。

常用命令

  • 統計 IP 連接數
$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

操作系統

查看系統版本

在安裝環境或者軟件時,我們常常需要知道所在操作系統的版本信息,這里列舉幾種查看內核和發行版本信息的方法,更多見 查看 Linux 系統版本

內核版本

  • uname命令
$ uname -a
Linux fhb-6.6 2.6.32-642.13.1.el6.i686
  • /proc/version文件
$ cat /proc/version 
Linux version 2.6.32-642.13.1.el6.i686

發行版本

  • lsb_release命令
$ lsb_release -a
LSB Version: :base-4.0-ia32:base-4.0-noarch:core-4.0-ia32
Distributor ID: CentOS
Release: 6.8
  • /etc/issue文件
$ cat /etc/redhat-release
CentOS release 6.8 (Final)

啟用Swap分區

在遇到內存容量瓶頸時,我們就可以嘗試啟用 Swap 分區。使用文件(還可以磁盤分區)作為 Swap 分區時,具體步驟如下:

1、 創建 Swap 分區的文件

# bs*count為文件大小
$ dd if=/dev/zero of=/root/swapfile bs=1M count=1024

2、 格式化為交換分區文件

$ mkswap /root/swapfile

3、 啟用交換分區

$ swapon /root/swapfile

4、 開機自啟用 Swap 分區

/etc/fstab文件中添加如下內容:

/root/swapfile swap swap defaults 0 0

最后,查看系統的 Swap 分區信息:

$ free -h
total used free shared buff/cache available
Mem: 1.7G 729M 252M 9.2M 714M 763M
Swap: 1.0G 0B 1.0G

免密碼使用sudo

以下兩種需求:

  1. 開發中經常會使用到 sudo 命令,為了避免頻繁輸入密碼的麻煩;
  2. 腳本中使用到 sudo 命令,怎么輸入密碼?;

這些,都可以通過將用戶加入 sudoers 來解決,當然情況 2 也可以使用echo "passwd"|sudo -S cmd,從標准輸入讀取密碼。

sudoers 配置文件為/etc/sudoers,sudo 命令操作權限配置內容如下:

# 授權用戶/組 主機名=(允許轉換至的用戶) NOPASSWD:命令動作
root ALL=(ALL) ALL

授權格式 說明:

  • 第一個字段為授權用戶或組,例如 root;
  • 第二個字段為來源,() 中為允許轉換至的用戶,= 左邊為主機名;
  • 第三個字段為命令動作,多個命令以,號分割;

因此,我的用戶為fhb,授權步驟如下:

# 1. 執行visudo命令,操作的文件就是/etc/sudoers
$ sudo visudo
# 2. 追加內容
fhb ALL=(root) NOPASSWD: /usr/sbin/service,/usr/local/php/bin/php,/usr/bin/vim
# 3. Ctrl+O保存並按Enter

然后,使用sudo service ssh restart命令測試 OK。

Yum更新排除指定軟件

有時候我們使用 yum 安裝的軟件,由於配置向后兼容性等問題,我們並不希望這些軟件(filebeat 和 logstash)在使用update時,被不經意間被自動更新。這時,可以使用如下方法解決:

  • 臨時

通過-x--exclude參數指定需要排除的包名稱,多個包名稱使用空格分隔。例如:

# --exclude同樣
$ yum -x filebeat logstash update
  • 永久

在 yum 配置文件/etc/yum.conf中,追加exclude配置項。例如:

# 需排序的包名稱
exclude=filebeat logstash

再次使用yum update命令,就不會自動更新指定的軟件包了。

$ yum update
No Packages marked for Update

ssh

強制踢出其他登錄用戶

在某些情況下,需要強制踢出系統其他登錄用戶,比如遇到非法用戶登錄。查詢當前登陸用戶:

# 當前用戶
$ whoami
root
# 當前所有用戶
$ ps -ef | grep 'pts'
root 4752 4727 0 00:09 pts/0 00:00:00 su www
www 4755 4752 0 00:09 pts/0 00:00:00 bash

剔除非法登陸用戶:

$ kill -9 4755

更多詳細說明,見 Linux 強制踢出其他登錄用戶

建立隧道實現端口轉發

在可以使用 ssh 情況下,為了能進行線上調試,我們可以使用 ssh 隧道建立端口映射。

例如,線上遠程目標機器 ip:10.1.1.123、端口:3303;映射到本地 33031 端口。命令如下:

# [主機ip]:[端口]:[主機ip]:[遠程目標機器端口] [遠程目標機器ip]
ssh -L 127.0.0.1:33031:127.0.0.1:3303 10.1.1.123

該命令操作后,只能通過127.0.0.1訪問。若想全網段訪問,需要將第一個主機 ip 更改為0.0.0.0,同時需要在/etc/ssh/sshd_config增加GatewayPorts yes的配置項。

常用工具

Strace調試

在調試程序時,我們會遇到一些系統層面的錯誤問題,一般都不易發現,這時可以使用 strace 來跟蹤系統調用的過程,方便快速定位和解決問題。

$ strace crontab.sh
execve("./crontab.sh", ["./crontab.sh"], [/* 29 vars */]) = 0
brk(0) = 0x106a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0434160000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=53434, ...}) = 0
mmap(NULL, 53434, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0434152000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
... ...

更多詳細說明,見 錯誤調試

彩色的命令行

在腳本或者代碼中,有時候需要在控制終端輸出醒目的提示信息,以便引起我們的關注。其實,在 Linux 終端下很容易就能搞定,如下:

彩色的命令行

實現的源代碼,內容為:

echo -e "\033[1;30m Hello World. \033[0m [高亮]"
echo -e "\033[0;31m Hello World. \033[0m [關閉屬性]"
echo -e "\033[4;32m Hello World. \033[0m [下划線]"
echo -e "\033[5;33m Hello World. \033[0m [閃爍]"
echo -e "\033[7;34m Hello World. \033[0m [反顯]"
echo -e "\033[8;35m Hello World. \033[0m [消隱]"
echo -e "\033[0;36;40m Hello World."
echo -e "\033[0;37;41m Hello World."

\033是 Esc 鍵對應的 ASCII 碼(27=/033=0x1B),表示后面的內容具有特殊含義,類似表述有^[以及/e,而\033[0m表示清除格式控制。

輸出格式的規則,可表示為\033[特殊格式;前景色;背景色m,主要分為 顏色格式 兩類規則。

  • 顏色

主要包括 前景色背景色,前景色范圍為30~39,背景色范圍為40~49(前景色對應顏色值 +10)。前景色顏色代碼表如下:

黑 = “\033[30m”
紅 = “\033[31m”
綠 = “\033[32m”
黃 = “\033[33m”
藍 = “\033[34m”
紫 = “\033[35m”
青 = “\033[36m”
白 = “\033[37m”
  • 格式
表達式 格式
\033[0m 關閉所有屬性
\033[1m 高亮度
\033[4m 下划線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱

轉載:樊浩柏科學院


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM