linux基礎(day24)

8.6 管道符和做業控制

管道符、做業控制

  • ctrl z //暫停一個任務
  • jobs //查看後臺的任務
  • bg [id] //把任務調到後臺
  • fg [id] //把任務調到前臺
  • 命令後面加&直接丟到後臺

管道符的使用

  • 管道符 | ,表示把前面命令輸出的結果,傳輸給後面的命令
  • cat 1.txt |wc -l ;cat 1.txt |grep 'aaa'
    • grep 命令,用來過濾指定關鍵詞的命令,只要在一行中含有這個關鍵詞,就會把這一行過濾出來
    • wc -l 命令,查看文件有多少個
[root@localhost ~]# ls
111  123  1.txt  234  2.txt  2.txt.bak  3.txt  anaconda-ks.cfg
[root@localhost ~]# ls | wc -l    
8
  • find ./ -type f //在當前目錄下,列出全部的文件
    • find ./ -type f |wc -l //計算當前目錄下有多少個文件
[root@localhost ~]# find ./ -type f
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.viminfo
./1.txt
./2.txt
./3.txt
./2.txt.bak
[root@localhost ~]# find ./ -type f |wc -l    計算當前目錄下,有多少個文件
12

做業控制

  • ctrl+z快捷鍵,暫停一個任務
    • 如果正在編輯一個文件的時候
      • 能夠ctrl+z臨時暫停下這個服務(丟到後臺去了),回到命令行界面,去操做其餘的任務
      • fg 命令能夠把丟在後臺的命令,調回前臺
    • 能夠控制多個任務,將他們暫停掉
  • jobs 命令,能夠把暫停的任務列出來
    • 暫停多個任務後,並會顯示中止的任務列出來
[root@localhost ~]# vim 1.txt

[1]+  已中止               vim 1.txt
[root@localhost ~]# fg
vim 1.txt

[1]+  已中止               vim 1.txt
[root@localhost ~]# jobs
[1]+  已中止               vim 1.txt
[root@localhost ~]# vim 2.txt

[2]+  已中止               vim 2.txt
[root@localhost ~]# jobs
[1]-  已中止               vim 1.txt
[2]+  已中止               vim 2.txt
[root@localhost ~]#
  • fg [id] 命令,把任務調到前臺並執行——>不加id號就是執行最後一次的任務(加id就是指定任務)
    • 能夠選擇執行的任務
[root@localhost ~]# fg 1
  • bg [id] 命令,把任務調到後臺並執行
[root@localhost ~]# bg 1
[1]+ vim 1.txt &

運行一條命令,能夠將它丟到後臺(前臺)去運行 在結束任務的時候,必須是在前臺才能結束——>(不然在後臺是沒法結束任務的)html

  • sleep 1000 命令,暫停一千秒,什麼事都不作,一千秒以後把命令窗口恢復回來
[root@localhost ~]# sleep 1000
^Z
[1]+  已中止               sleep 1000
[root@localhost ~]# jobs
[1]+  已中止               sleep 1000
[root@localhost ~]# sleep 200
^Z
[2]+  已中止               sleep 200
[root@localhost ~]# jobs
[1]-  已中止               sleep 1000
[2]+  已中止               sleep 200
[root@localhost ~]# fg
sleep 200
^Z
[2]+  已中止               sleep 200
在調到先後臺運行的時候,不指定id號,就是默認最後一條執行命令
  • & 符號,把任務丟到後臺去執行
[root@localhost ~]# sleep 100 &
[3] 2239
[root@localhost ~]# jobs
[1]   運行中               sleep 100 &
[root@localhost ~]#

在打開另外一終端,jobs命令,是查看不到執行當前終端的任務mysql

可是在另外一個終端,能夠查看到進程ps aux |grep sleeplinux

```
[root@localhost ~]# ps aux |grep sleep
root      2235  0.0  0.0 107892   624 pts/0    T    23:20   0:00 sleep 1000
root      2236  0.0  0.0 107892   620 pts/0    T    23:20   0:00 sleep 200
root      2264  0.0  0.0 112656   984 pts/1    R+   23:31   0:00 grep --color=auto slee
[root@localhost ~]# 
```

8.7/8.8 shell變量

變量

  • PATH,HOME,PWD,LOGNAME
  • env命令,來獲取系統的變量
  • set命令多了不少變量,而且包括用戶自定義的變量
  • 自定義變量a=1
  • 變量名規則:字母、數字下劃線,首位不能爲數字
  • 變量值有特殊符號時須要用單引號括起來
  • 變量的累加
  • 全局變量export b=2
    • 格式 export 變量名=變量值
    • 全局變量僅僅在子shell裏面生效
      • 運行bash 命令,直接進去 子shell
  • unset變量 //取消變量

查看環境變量的命令

  • env命令,查看系統經常使用的環境變量
    • 系統的變量都是大寫的英文字母,變量的值能夠數字,字符串,英文字母等
  • set命令,查看系統內置的環境變量和用戶自定義的變量
    • 在centos6中,顯示一些環境變量出來或者是顯示全部的變量
  • 自定義變量
    • 自定義的變量會在 set 中體現出來
    • set |grep 111 查找變量
[root@localhost ~]# a=111
[root@localhost ~]# echo $a
111
[root@localhost ~]# set |grep 111
_=111
a=111
[root@localhost ~]#
  • set和env命令查看系統變量

變量名規則

  • 變量名規則:
    • 系統的環境變量是系統內置的(通常不會去更改)
    • 自定義的變量的名字:
      • 字母、數字下劃線,首位不能爲數字
[root@localhost ~]# 
[root@localhost ~]# a1=3
[root@localhost ~]# echo $a1
3
[root@localhost ~]# a_1=2
[root@localhost ~]# echo $a_1
2
[root@localhost ~]# _a1=4
[root@localhost ~]# echo $_a1
4
[root@localhost ~]# 1aa=2   變量名首位不能爲數字
-bash: 1aa=2: 未找到命令
[root@localhost ~]#

變量值規則

  • 變量值有特殊符號時須要用單引號括起來
[root@localhost ~]# a='a b c'
[root@localhost ~]# echo $a
a b c
[root@localhost ~]# a="a b c"
[root@localhost ~]# echo $a
a b c
這裏可使用 單引號'' 或 雙引號"",但使用 單引號 更加好用——>方便脫義
  • 在之後賦值變量,存在特殊符號的時候,使用單引號
    • 不然在使用雙引號的時候,賦予的值裏面的特殊符號會有可能會系統當作標記
[root@hf-01 ~]# a="a$bc"        //會發現使用雙引號,賦值變量得不到想要的結果
[root@hf-01 ~]# echo $a
a
[root@hf-01 ~]# a='a$bc'        //使用單引號會發現正常賦值
[root@hf-01 ~]# echo $a
a$bc

變量的累加

[root@hf-01 ~]# a=1
[root@hf-01 ~]# b=2
[root@hf-01 ~]# echo $a$b        //變量$a=1,變量$b=2
12
[root@hf-01 ~]# a='a$bc'
[root@hf-01 ~]# echo $a$b        //變量$a=a$bc,變量$b=2
a$bc2
[root@hf-01 ~]# c="a$bc"
[root@hf-01 ~]# echo $c        //變量$bc爲賦值,因此爲空,最後輸出的值爲a
a
[root@hf-01 ~]# c="a$b"c
[root@hf-01 ~]# echo $c        //變量$b=2,,因此輸出爲a2c
a2c
如下例子中,$bc爲總體,而我又沒有給它賦值,因此爲空

當變量或表達式較爲複雜的時候,變量疊加的時候,可使用雙引號將它們標記起來sql

全局變量

  • 全局變量 export b=2
  • w命令,用於顯示已經登錄系統的用戶列表,並顯示用戶正在執行的指令

非全局變量

    1. 首先打開兩個終端, 終端1 和 終端2
    1. 使用w命令,能夠看到有三個用戶登陸了系統
[root@hf-01 ~]# w
 05:34:28 up  4:05,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      01:29    4:04m  0.03s  0.03s -bash
root     pts/0     01:30    4.00s  0.07s  0.03s w
root     pts/1     05:34    5.00s  0.02s  0.02s -bash
    1. 查看在哪一個TTY下(終端下),執行環境變量
    • 在終端1 下執行命令 echo $SSH_TTY
[root@hf-01 ~]# echo $SSH_TTY        //當前是在/dev/pts/0下
/dev/pts/0
- 在終端2下執行命令 echo $SSH_TTY
[root@hf-01 ~]# echo $SSH_TTY
/dev/pts/1
    1. 在終端1 下定義一個變量,並去查看
[root@hf-01 ~]# hanfeng=linux
[root@hf-01 ~]# echo $hanfeng
linux
    1. 在終端2 下去查看終端1 定義的變量,會發現查看不到
[root@hf-01 ~]# echo $hanfeng        //會發現變量爲 空

[root@hf-01 ~]#
    1. 在終端1 下,在進入一個子shell
    • shell它是一個進程,打開一個shell,就至關於進入到了另外一個終端,雖然仍是在pts/1上,能夠執行pstree 命令查看
[root@hf-01 ~]# bash
[root@hf-01 ~]#
    1. 在終端1下,執行命令 pstree
[root@hf-01 ~]# pstree
systemd─┬─NetworkManager───3*[{NetworkManager}]
        ├─auditd───{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─iprdump
        ├─iprinit
        ├─iprupdate
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─mysqld_safe───mysqld───20*[{mysqld}]
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd─┬─bash───bash───pstree
        │             └─bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]
[root@hf-01 ~]#
    1. 在終端1下,這時再來執行echo $hanfeng,會發現變量未生效
[root@hf-01 ~]# echo $hanfeng

[root@hf-01 ~]#
這是由於這個變量僅僅在上一個shell中
    1. 在終端1下,退出當前shell,執行命令 exit ,並在此執行pstree命令
[root@hf-01 ~]# exit
exit
[root@hf-01 ~]# pstree
systemd─┬─NetworkManager───3*[{NetworkManager}]
        ├─auditd───{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─iprdump
        ├─iprinit
        ├─iprupdate
        ├─login───bash
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─mysqld_safe───mysqld───20*[{mysqld}]
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd─┬─bash───pstree
        │             └─bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]
[root@hf-01 ~]#
這時會看到缺乏了一個bash,由於剛exit退出了一個bash
    1. 在終端1下,再去執行echo $hanfeng 會獲得自定義的值
[root@hf-01 ~]# echo $hanfeng
linux

這種定義一個變量叫作非全局,或者叫作本地的變量(僅僅在你終端下生效)shell

全局變量

  • export hanfeng=linux //設置全局變量hanfeng=linux
    • 格式:export 變量名=變量值
  1. 在終端1下,設置
[root@hf-01 ~]# export hanfeng=linux
[root@hf-01 ~]# echo $hanfeng
linux
[root@hf-01 ~]# bash
[root@hf-01 ~]# echo $hanfeng
linux
[root@hf-01 ~]#
全局環境變量,在終端1下,在打開shell以後,只要執行export 命令 ,在這下面全部的子shell 都會變量值,但在終端2下,變量依舊是不會生效

全局變量是向下的,在這個shell的基礎上生成子shell,子子shell,子子子shell,而不會向上生效

取消變量,unset命令

  • unset命令,取消變量
    • 格式,unset 加變量名稱
[root@hf-01 ~]# hanfeng=linux
[root@hf-01 ~]# echo $hanfeng
linux
[root@hf-01 ~]# unset hanfeng
[root@hf-01 ~]# echo $hanfeng

[root@hf-01 ~]#

8.9 環境變量配置文件

環境變量配置文件目錄概要

  • /etc/profile 用戶環境變量,交互,登陸才執行
  • /etc/bashrc 用戶不能登陸,執行shell就生效
  • ~/.bashrc
  • ~/.bash_history
  • ~/.bash_logout
  • PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$ ' //帶顏色顯示命令行左邊

系統的環境變量配置文件

  • 兩個緯度,一個是系統層次,一個是用戶層次vim

    • 系統層次,就是/etc 下的文件
    • 用戶層次,就是用戶家目錄下的文件。每一個用戶的家目錄下都會有以 . 點開頭的隱藏文件.bash_profile或 .bashrc
  • 兩種類型,把 bashrc 做爲一種類型,把profile做爲一種類型centos

    • 區別:
      • profile是用戶登陸的時候,就會自動的加載profile,profile又會自動的調用bashrc
      • bashrc是執行shell腳本的時候,用戶不用登陸,就能夠直接執行shell腳本,執行shell腳本就會調用bashrc裏面的一些配置 -系統中的 /etc/profile文件和 /etc/bashrc文件,通常不要去編輯它們
    • 在遇到一些須要的時候,能夠編輯用戶家目錄下的.bash_profile
    • source .bash_profile 或 . .bash_profile 加載配置文件中的配置
  • ~/.bash_logout 文件,用來定義用戶退出的時候須要作的一些操做bash

  • PS1是在/etc/bashrc中定義的ssh

    • 在登陸一個系統以後,他會在命令左邊,有一串字符串 [root@hf-01 ~]
      • 最左側是root,就是登錄用戶的名字
      • @ 是主機名,hostname
      • 而後是你所在的目錄最後一層級
[root@hf-01 ~]# echo $PS1
[\u@\h \W]\$
  • 切換到/etc/sysconfig/network-scripts/,並將W改爲小寫w,會發現變成絕對路徑了
[root@hf-01 ~]# cd /etc/sysconfig/network-scripts/
[root@hf-01 network-scripts]# PS1='[\u@\h \w]\$'
[root@hf-01 /etc/sysconfig/network-scripts]#
[root@hf-01 ~]# cd 123/
[root@hf-01 ~/123]# cd /tmp/
[root@hf-01 /tmp]#
這是一個全局路徑
  • 也能夠去除方括號[]
[root@hf-01 /tmp]# PS1='\u@\h \w\$'
root@hf-01 /tmp#
  • 也能夠修改爲其餘符號
root@hf-01 /tmp# PS1='<\u@\h \w> \$'
<root@hf-01 /tmp> #
普通用戶是 $號,root用戶是# 號
  • 帶顏色顯示
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

擴展

相關文章
相關標籤/搜索