linux基礎整理0316

一、linux基礎整理

  由於這是學習linux的第一週,整理的東西很雜很分散,其中包括了查看虛擬機的各種信息,命令相關的只整理了alias、date、history、cal、幫助會話screen等命令的使用,最後加上了兩個常見問題處理辦法;在以後的學習中會不斷完善文中整理的相關內容。

1、查看系統信息類命令:

查看內核版本

[root@CentOS7 ~]#uname -r 
3.10.0-957.el7.x86_64

查看系統版本

查看配置文件
[root@CentOS7 ~]#cat /etc/redhat-release    //Centos
CentOS Linux release 7.6.1810 (Core) 

gong@ubuntu1804:~$ cat /etc/os-release      //Ubuntu系統
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
使用lsb_release -a 命令
[root@CentOS7 ~]#lsb_release -a          //Centos
gong@ubuntu1804:~$ lsb_release -a   //Ubuntu系統
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

查看內存大小

[root@CentOS7 ~]#free
              total        used        free      shared  buff/cache   available
Mem:        1475156      706280      110076       22952      658800      515300
Swap:       3145724         264     3145460
[root@CentOS7 ~]#cat /proc/partitions 
  major minor   #blocks  name
  11        0   10491904 sr0
   8        0  209715200 sda
   8        1    1048576 sda1
   8        2  104857600 sda2
   8        3    3145728 sda3
   8        4          1 sda4
   8        5   52428800 sda5

查看cpu信息

[root@CentOS7 ~]# lscpu
[root@CentOS7 ~]# cat /proc/cpuinfo

查看磁盤分區

[root@CentOS7 ~]# df 
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2      104806400  3713712 101092688   4% /
devtmpfs          721736        0    721736   0% /dev
tmpfs             737576        0    737576   0% /dev/shm
tmpfs             737576    10780    726796   2% /run
tmpfs             737576        0    737576   0% /sys/fs/cgroup
/dev/sda5       52403200    33036  52370164   1% /data
/dev/sda1        1038336   167008    871328  17% /boot
tmpfs             147516        4    147512   1% /run/user/42
tmpfs             147516       32    147484   1% /run/user/0
/dev/sr0        10491772 10491772         0 100% /run/media/root/CentOS 7 x86_64

[root@CentOS7 ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.10_Final
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0 97.7G  0 part /
├─sda3   8:3    0 48.8G  0 part /data
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    3G  0 part [SWAP]

2、echo回顯命令的$()、””、’’、的區別

功能:顯示字符

[root@CentOS7 ~]# echo 'hostname'       //單引號爲強引用,不替換引號中的變量
hostname
[root@CentOS7 ~]# echo `hostname`      //反向單引號替換引號中的變量
CentOS7.localdomain
[root@CentOS7 ~]# echo "hostname"     //雙引號爲弱引用,替換引號中的變量
hostname 
[root@CentOS7 ~]# echo $(hostname)    //$()替換變量的值
CentOS7.localdomain

3、顯示當前使用的shell

echo $(shell)

[root@CentOS7 ~]#echo $SHELL
/bin/bash
[root@CentOS7 ~]#echo ${SHELL}
/bin/bash

4、顯示當前系統使用的所有shell

cat /etc/shell

[root@CentOS7 ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

5、顯示shell的搜索路徑

[root@CentOS7 ~]#echo $PATH                       
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

6、顯示提示符格式

臨時/永久 改變命令行提示符的格式、顏色
臨時改變:修改PS1變量

[root@CentOS7 ~]# PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]" 

永久改變:修改配置文件
將命令追加至/etc/profile 文件中,然後重新登錄或重載文件source /etc/profile即可生效

7、配置登錄前的提示信息

[root@CentOS7 ~]# cat /etc/motd 

8、內部命令和外部命令

區別內部命令和外部命令:type cmd

[root@CentOS7 ~]#type cd 
cd is a shell builtin              //這是一個內部命令
[root@CentOS7 ~]#type rpm 
rpm is /usr/bin/rpm             //顯示命令的路徑,爲外部命令

內部命令:由shell自帶的,而且通過某命令形式提供
help或enable顯示內部命令列表
enable cmd 啓用內部命令
enable -n cmd 禁用內部命令
enable -n 查看所有禁用的內部命令

外部命令:查看外部命令路徑:which -a|--skio-alias , whereis

[root@CentOS7 ~]#whereis cp
cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz

9、hash緩存表

作用:將執行的外部命令的路徑存儲在hash裏,再次執行外部命令是優先從hash裏尋找。
優點:大大提高命令的調用速率
常見用法:
hash 顯示hash緩存
hash -l 顯示hash緩存,可作爲輸入使用
hash -p path name 給命令路徑path取別名name
hash -t name 打印緩存中的name路徑
hash -d name 清除name緩存
hash -r 清除緩存

 [root@CentOS7 ~]#hash      //顯示hash緩存
hits    command
   1    /usr/bin/timeout
   1    /usr/bin/tty
   2    /usr/bin/bash
[root@CentOS7 ~]#hash -l        //顯示hash緩存,可作爲輸入使用
builtin hash -p /usr/bin/timeout timeout
builtin hash -p /usr/bin/tty tty
builtin hash -p /usr/bin/bash bash

[root@CentOS7 ~]#hash -p /usr/bin/timeout tout      //給命令路徑path取別名name
[root@CentOS7 ~]#hash -t tout       //打印緩存中的name路徑
/usr/bin/timeout
[root@CentOS7 ~]#hash -d tout       //打印緩存中的name路徑
[root@CentOS7 ~]#hash -t tout       //再次打印緩存中的name,發現已經找不到了
-bash: hash: tout: not found
[root@CentOS7 ~]#hash -r            //清除緩存
[root@CentOS7 ~]#hash 
hash: hash table empty

10、別名alias

顯示當前shell進程的所有可用別名alias

[root@CentOS7 ~]#alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

定義別名:alias name=’cmd’
注意:僅對當前shell進程有效

[root@CentOS7 ~]#alias cdnet="cd /etc/sysconfig/network-scripts/"     //命名別名`
[root@CentOS7 ~]#cdnet                                                                            //使用別名
[root@CentOS7 network-scripts]#                                            //通過提示符已知進入到了network-scripts目錄

撤銷別名:unalias name
撤銷所有別名:unalias -a
[root@CentOS7 ~]#unalias cdnet
注意:永久有效要定義在配置文件中:
對當前用戶有效:~/.bashrc
對所有用戶有效:/etc/bashrc

注意:別名可以與原名相同,此時原名被隱藏;此時如果要運行原命令,則使用\cmd “cmd”’cmd’

總結命令的優先級:

別名alias > 內部命令builtin > 外部命令/path/file>緩存hash

11、bash進程重新讀取配置文件

Source /path/to/config_file
.  /path/to/config_file

12、時間相關命令

date 顯示和設置系統時間
date [option] [+format]
FORMAT:格式符
-d<字符串>:顯示字符串所指的日期與時間。字符串前後必須加上雙引號;
-s<字符串>:根據字符串來設置日期與時間。字符串前後必須加上雙引號;

date -s                                  #設置當前時間,只有root權限才能設置,其他只能查看 
date -s 20120523               #設置成20120523,這樣會把具體時間設置成空00:00:00 
date -s 01:01:01                 #設置具體時間,不會對日期做更改 
date -s "01:01:01 2012-05-23"      #這樣可以設置全部時間 
date -s "01:01:01 20120523"        #這樣可以設置全部時間 
date -s "2012-05-23 01:01:01"     #這樣可以設置全部時間 
date -s "20120523 01:01:01"       #這樣可以設置全部時間

%F 顯示當前年月日

[root@CentOS7 ~]#date +%F
2019-03-16

%T 顯示當前時分秒

[root@CentOS7 ~]#date +%T
14:46:58

設定日期時間:date [MMDDhhmm[[CC]YY][.ss]]

[root@CentOS7 data]#date 031614302019.30
Sat Mar 16 14:30:30 CST 2019

如果需要以指定的格式顯示日期,可以使用“+”開頭的字符串指定其格式,詳細格式如下:

%H : 小時(00-23)
%I : 小時(01-12)
%k : 小時(0-23)
%l : 小時(1-12)
%M : 分鐘(00-59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時制,格式爲 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前爲止的秒數
%S : 秒(00-60)
%T : 直接顯示時間 (24 小時制)
%X : 相當於 %H:%M:%S
%Z : 顯示時區
%a : 星期幾 (Sun-Sat)
%A : 星期幾 (Sunday-Saturday)
%b : 月份 (Jan-Dec)
%B : 月份 (January-December)
%c : 直接顯示日期與時間
%d : 日 (01-31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001-366)
%m : 月份 (01-12)
%U : 一年中的第幾周 (00-53) (以 Sunday 爲一週的第一天的情形)
%w : 一週中的第幾天 (0-6)
%W : 一年中的第幾周 (00-53) (以 Monday 爲一週的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最後兩位數字 (00.99)
%Y : 完整年份 (0000-9999)

查看時區:

[root@CentOS7 ~]#timedatectl status
      Local time: Sat 2019-03-16 15:51:15 CST
  Universal time: Sat 2019-03-16 07:51:15 UTC
        RTC time: Sat 2019-03-16 08:13:56
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

修改時區:

[root@CentOS7 ~]#timedatectl set-timezone Asia/Shanghai

設置時間格式:

MMDDHHmmYYYY.ss
月 天 小時 分鐘 年.秒

[root@CentOS7 ~]#date 031615302019.30   //2019-03-16 15:30:30
Sat Mar 16 15:30:30 CST 2019

時間加減操作

date +%Y%m%d                            #顯示前天年月日 
date -d "+1 day" +%Y%m%d       #顯示前一天的日期 
date -d "-1 day" +%Y%m%d        #顯示後一天的日期 
date -d "-1 month" +%Y%m%d    #顯示上一月的日期 
date -d "+1 month" +%Y%m%d   #顯示下一月的日期 
date -d "-1 year" +%Y%m%d       #顯示前一年的日期 
date -d "+1 year" +%Y%m%d      #顯示下一年的日期
[root@CentOS7 ~]#date
Sat Mar 16 14:40:16 CST 2019
[root@CentOS7 ~]#date +%F -d "yesterday"        //昨天
2019-03-15
[root@CentOS7 ~]#date +%F -d "3 day"                //三天後
2019-03-19
[root@CentOS7 ~]#date +%F -d "-2 day"               //兩天前
2019-03-14

顯示硬件時鐘hwclock/clock

-s 以硬件時鐘爲準
-w 以系統時間爲準

13、日曆:cal

[root@CentOS7 ~]#cal 05 2019  
[root@CentOS7 ~]#cal 2019
[root@CentOS7 ~]#cal -y   //當前年日曆
[root@CentOS7 ~]#cal      //顯示當前年當月日曆

14、會話screen

使用此命令需要安裝screen包
screen -S [SESSION] //創建新會話
screen -x [SESSION] //加入會話
exit //退出並關閉會話
Ctrl+a,d //剝離當前會話
screen -ls //顯示已經打開的會話
screen -r [SESSION] //恢復某會話

在虛擬終端1上創建一個會話helpme
[root@CentOS7 ~]#screen -S helpme  
在虛擬終端2上查看並加入會話
[root@CentOS7 ~]#screen -ls  
There is a screen on:
    60812.helpme    (Attached)
1 Socket in /var/run/screen/S-root.

[root@CentOS7 ~]#screen -x helpme 

15、命令歷史

命令歷史history:shell進程會其會話中保存此前用戶提交執行過的命令;

定製history的功能,可通過環境變量實現:

    HISTSIZE:shell進程可保留的命令歷史的條數;
    HISTFILE:持久保存命令歷史的文件** .bash_history**
    HISTFILESIZE:命令歷史文件的大小;

命令用法:

history [-c] [-d] [n]

    -c: 清空命令歷史;
    -d offset:刪除指定命令歷史

history -anrw [文件名]

    -a: 追加本次會話新執行的命令歷史列表至歷史文件 
    -r: 讀歷史文件附加到歷史列表 
    -w: 保存歷史列表到指定的歷史文件 
    -n: 讀歷史文件中未讀過的行到歷史列表 

history -ps 參數 [參數...]

    -p: 展開歷史參數成多行,但不存在歷史列表中 
    -s: 展開歷史參數成一行,附加在歷史列表後 

history #:顯示最近的#條命令;

調用命令歷史列表中的命令:

    !#:再一次執行歷史列表中的第#條命令;
    !!:再一次執行上一條命令;
    !STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令;
    注意:命令的重複執行有時候需要依賴於冪等性;

調用上一條命令的最後一個參數:

    快捷鍵:ESC, .
    字符串:!$

控制命令歷史記錄的方式:

    環境變量:HISTCONTROL
    ignoredups:忽略重複的命令;
    ignorespace:忽略以空白字符開頭的命令;
    ignoreboth:以上兩者同時生效;
    例:HISCONTROL=ignoredups

注:命令歷史文件存放:/etc/profile 或 ~/.bash_profile

16、開機狀態添加新硬盤後,不重啓讀取新硬盤的方法

步驟:
1、添加一塊虛擬硬盤
2、使用lsblk 命令查看磁盤是否顯示出來
3、使用 [root@CentOS7 ~]#echo '- - -' > /sys/class/scsi_host/host0/scan 命令重定向,強制刷新硬盤
(注:/sys/class/scsi_host/ 路徑下有多個host[0,1,2..]文件,每次刷新一個,直至新硬盤出現)

[root@CentOS7 ~]#lsblk                                                         //使用lsblk發現新加的硬盤沒有顯示出來
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    3G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sr0     11:0    1   10G  0 rom  /run/media/root/CentOS 7 x86_64
[root@CentOS7 ~]#echo "- - -" > /sys/class/scsi_host/host       //使用tab補全路徑發現有多個文件
host0/ host1/ host2/
[root@CentOS7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan   
[root@CentOS7 ~]#lsblk                                            //重新執行lsblk發現新添加的硬盤sdb顯示出來了
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    3G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sdb      8:16   0   20G  0 disk 
sr0     11:0    1   10G  0 rom  /run/media/root/CentOS 7 x86_64

17、當某個文件數據過大導致所在磁盤空間被佔滿,如何快速釋放空間

1、如何快速將一個文件增大

[root@CentOS7 ~]# cp /dev/zero /boot/a.txt      // /dev/zero爲設備文件,將設備文件複製到另文件內會瞬間增大存儲空間

查看磁盤被佔滿

[root@CentOS7 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda1      1014M 1014M   32K 100% /boot
...

解決辦法1、:
刪除文件:

[root@CentOS7 ~]# rm -rf /boot/a.txt 

注意:當要刪除的文件正在被使用時,文件顯示已被刪除,但內存仍然被佔滿。此時需要將正在使用的文件關閉即可。

查看被刪除的文件:

[root@CentOS7 ~]# lsof |grep /boot/a.txt
vim       69356     root    3r      REG    8,1 892141568    113 /boot/a.txt (deleted)

解決辦法2:使用/dev/null 文件的特性清空文件

[root@CentOS7 ~]# cat /dev/null > /data/f1.txt

18、生成隨機字符串


[root@CentOS7 ~]# cat /dev/urandom |tr -dc 'a-zA-Z0-9' |head -c12        
            // 文件/dev/urandom內爲隨機字符,通過tr刪除除字母和數字的字符,通過head命令取前n個字符
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章