您好,登錄后才能下訂單哦!
[TOC]
shell是一個命令解釋器,提供用戶和機器之間的交互(shell腳本是shell的一種表現)
.bash_history
存放命令記錄的文件,如果終端非exit,logout正常退出,命令會記錄不全。HISTSIZE
, 查看 echo $HISTSIZE
如果顯示超過1000,是因為命令暫時存在內存中,還沒寫進文件,history-c
可清空內存里記錄,但是不會清除.bash_history
里的記錄/etc/profile
中修改,要修改后立即生效重新進終端或執行 source /etc/profile
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
增加此變量,可記錄對應命令的執行時間, 例: 1005 2019/11/12 10:29:47 w
chattr +a ~/.bash_history
即使超過1000條也沒有權限刪除yum install -y bash-completion
需要重啟系統生效 systemctl restart network
alias restartnet="systemctl restart network"
取消alias:unalias restartnet
~/.bashrc
自定義的alias放到~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias restartnet="systemctl restart network"
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
sleep 100 &
a='a b c'
里面帶空格要用單引號括起來
[root@mydb1 ~]# a="a$bc"
[root@mydb1 ~]# echo $a
a
[root@mydb1 ~]# a='a$bc'
[root@mydb1 ~]# echo $a
a$bc
在取值時,單引號和雙引號結果不一樣,所以在取值時要用單引號
[root@mydb1 ~]# a=1
[root@mydb1 ~]# b=2
[root@mydb1 ~]# echo $a$b
12
[root@mydb1 ~]# a='a$bc'
[root@mydb1 ~]# echo $a$b
a$bc2
[root@mydb1 ~]# c="a$bc"
[root@mydb1 ~]# echo $c
a
[root@mydb1 ~]# c="a$b"c
[root@mydb1 ~]# echo $c
a2c
全局變量export b=2
[root@mydb1 ~]# w
14:44:15 up 24 days, 23:49, 2 users, load average: 0.07, 0.04, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.182 10:18 7:11 0.37s 0.37s -bash
root pts/1 192.168.1.182 14:44 0.00s 0.03s 0.01s w
[root@mydb1 ~]# echo $SSH_TTY 查看當前終端的tty
/dev/pts/1
[root@localhost ~]# yum -y install psmisc
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# bash //bash命令進入到子shell
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree //這里可以看出在子shell上執行了pstree命令
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd
[root@localhost ~]# a=linux
[root@localhost ~]# echo $a
linux
[root@localhost ~]# bash
[root@localhost ~]# echo $a 非全局變量下,進入子shell,無法獲取父shell中a=linux的值,這是因為在非全局變量下,當前定義的變量只在當前shell中生效,而不能在子shell生效
[root@localhost ~]# export b=123 父shell下定義全局變量 b=123,這樣定義全局變量只在當前終端有效,重新打開新的終端無效。
[root@localhost ~]# echo $b
123
[root@localhost ~]# bash 進入子shell,仍然可以獲得父shell定義的b=123的值
[root@localhost ~]# echo $b
123
[root@localhost ~]# export c=456 在子shell中定義c=456
[root@localhost ~]# echo $c
456
[root@localhost ~]# exit 退出子shell進入父shell
exit
[root@localhost ~]# echo $c 在父shell中無法獲得在子shell中定義c=456的值,父shell與子shell的關系是從上到下的,而不能從下到上
unset b
unset 變量名/etc/profile
用戶環境變量,交互,登錄才執行,輸入用戶名,ip,port,密碼就會自動加載,然后profile又會自動的調用bashrc。/etc/bashrc
用戶不用登錄,執行shell就生效,只要執行shell腳本,就會調用bashrc里面的配置~/.bashrc
~/.bash_profile
. .bash_profile或者source .bash_profile~/.bash_history
~/.bash_logout
定義用戶退出時需要做出的一些動作,比如:退出時刪除命令歷史,就可把刪除歷史命令的命令,放在.bash_logout里面PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
vim /etc/bashrc
里定義
* 任意個任意字符
? 任意一個字符
# 注釋字符
\ 脫義字符
要使c='$a$b'的結果為$a$b除了加單引號,還可以使用脫意符c=\$a\$b。| 管道符
cut 分割
,-d 分隔符 -f 指定段號 -c 指定第幾個字符
[root@localhost ~]# cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
root
bin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,5
root:root
bin:bin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-5
root:x:0:0:root
bin:x:1:1:bin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -c 4
t
:
sort 排序
, -n 以數字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
[root@localhost ~]# cat /etc/passwd |head -4 |sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# cat /etc/passwd |head -4 |sort -n
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# cat /etc/passwd |head -4 |sort -nr
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
wc -l 統計行數
-m 統計字符數 -w 統計詞
[root@localhost ~]# cat 1.txt 內容有6個字符
123
abc
[root@localhost ~]# cat -A 1.txt
123$
abc$
[root@localhost ~]# wc -m 1.txt
8 1.txt 統計有8個字符,不要忘記隱藏的換行符
[root@localhost ~]# cat 1.txt
123
abc ,f23
[root@localhost ~]# wc -w 1.txt 統計多少個詞,以空格區分
3 1.txt
uniq 去重
, -c統計行數
[root@localhost ~]# uniq 1.txt 直接uniq沒有去重
123
abc ,f23
123
abc
1
2
1
[root@localhost ~]# sort 1.txt |uniq 去重首先要排序,uniq通常要與sort一起使用
1
123
2
abc
abc ,f23
[root@localhost ~]# sort 1.txt |uniq -c 先排序再去重再統計行數
2 1
2 123
1 2
1 abc
1 abc ,f23
tee 和 > 類似
,重定向的同時還在屏幕顯示
[root@localhost ~]# cat 1.txt
123
abc ,f23
123
abc
1
2
1
[root@localhost ~]# sort 1.txt |uniq -c |tee a.txt |tee的作用相當于>,但是它會把重定向的內容顯示在屏屏幕上
2 1
2 123
1 2
1 abc
1 abc ,f23
[root@localhost ~]# sort 1.txt |uniq -c |tee -a a.txt |tee -a 相當于>>
2 1
2 123
1 2
1 abc
1 abc ,f23
[root@localhost ~]# cat a.txt
2 1
2 123
1 2
1 abc
1 abc ,f23
2 1
2 123
1 2
1 abc
1 abc ,f23
tr 替換字符
,tr 'a' 'b',大小寫替換tr '[a-z]' '[A-Z]'
[root@localhost ~]# echo "aminglinux" |tr 'a' 'A' 替換單個
Aminglinux
[root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]' 替換多個
AmingLinux
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]' 替換指定范圍
AMINGLINUX
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '1' 也可以替換成數字
1111111111
split 切割
,-b大小(默認單位字節),-l行數, -d添加數字后綴
[root@localhost test]# split -b 2M 2.txt 指定切割后每個文件的大小
[root@localhost test]# ls
2.txt xaa xab xac xad xae
[root@localhost test]# ll -h
總用量 20M
-rw-r--r--. 1 root root 10M 2月 24 08:57 2.txt
-rw-r--r--. 1 root root 2.0M 2月 24 09:04 xaa
-rw-r--r--. 1 root root 2.0M 2月 24 09:04 xab
-rw-r--r--. 1 root root 2.0M 2月 24 09:04 xac
-rw-r--r--. 1 root root 2.0M 2月 24 09:04 xad
-rw-r--r--. 1 root root 2.0M 2月 24 09:04 xae
[root@localhost test]# split -b 2M 2.txt 2019. 指定切割后每個文件的大小以及文件的前綴
[root@localhost test]# ls
2019.aa 2019.ab 2019.ac 2019.ad 2019.ae 2.txt xaa xab xac xad xae
[root@localhost test]# split -l 10000 2.txt 201911. 指定切割文件的行數以及文件的前綴
[root@localhost test]# ls
201911.aa 201911.ab 201911.ac 201911.ad 201911.ae 201911.af 201911.ag 201911.ah 2.txt
[root@localhost test]# for i in `seq 1 10`
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
[root@localhost test]# for i in `seq 1 10`; do echo $i; done
[root@localhost test]# ls 2.txt ; wc -l 2.txt
2.txt
77517 2.txt
> >> 2> 2>> &>
[ ]
指定字符中的一個,[0-9],[a-zA-Z],[abc]|| 和 && ,用于命令之間
[root@localhost test]# ls 2.txt || wc -l 2.txt
2.txt
[root@localhost test]# ls 2a.txt || wc -l 2.txt
ls: 無法訪問2a.txt: 沒有那個文件或目錄
77517 2.txt
|| 如果前面執行成功,就不執行后面。如果前面執行不成功,才會執行后面
[root@localhost test]# ls 2a.txt && wc -l 2.txt
ls: 無法訪問2a.txt: 沒有那個文件或目錄
[root@localhost test]# ls 2.txt && wc -l 2.txt
2.txt
77517 2.txt
前面執行不成功,后面就不會去執行,前面執行成功,后面才會去執行
[root@localhost test]# [ -d aminglinux ] || mkdir aminglinux
[root@localhost test]# ls
201911.aa 201911.ac 201911.ae 201911.ag 2.txt
201911.ab 201911.ad 201911.af 201911.ah aminglinux
[root@localhost test]# [ -d aminglinux ] && mkdir aminglinux
mkdir: 無法創建目錄"aminglinux": 文件已存在
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。