歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> linux常用命令之bash 入門指南

linux常用命令之bash 入門指南

日期:2017/2/27 14:18:07   编辑:更多Linux

  1 什麼是Bash 什麼是Shell

  Bash 是 GNU Bourne-Again SHell,是目前大多數Linux發行版采用的Shell。

  Shell 是 *nix提供給用戶使用的界面。

  一個操作系統的底層是獨立運行的,用戶界面和底層分開,可以最大限度的保證系統穩定。Shell就是一個特殊的程序,負責接受用戶的命令,並把系統的響應返回給用戶。

  Bash Shell一般不需要自己安裝,在安裝發行版的同時都會安裝好。

  Shell的存在是和登陸相關的,從用戶名密碼驗證通過以後,Shell就啟動了,知道你退出,Shell就結束了運行。

  除了Bash Shell之外,還有很多其他的Shell。

  2 Linux的文件、目錄、程序

  Linux的文件、目錄、程序是使用bash操作的主要對象。有必要事先了解一下文件、目錄和程序的概念

  文件

  Linux中一切都是文件、普通的文件、設備文件、管道也是文件的形式。一切操作都是文件為基礎的。DOS操作系統早期也是模擬這種方式,不過有很多漏洞(比如C:\con\con會藍屏)

  文件是有屬性的,有一個屬性表示這個文件是不是目錄,有3個屬性表示這個文件的訪問權限,還有一些表示從這個文件派生出的文件屬性。

  目錄

  目錄是管理文件的手段,不同的文件要分門別類才容易找到。嚴格的說,目錄也是一種文件,是具有目錄屬性的文件。

  文件和目錄都有所有者和所有組。叫UID和GID,對應的,有3個屬性表示相應的權限。後面寫到ls和chmod有詳細地說明。

  程序

  程序是可以執行的代碼,有些是直接交給內核或者CPU執行的,有些是通過其他程序執行的(解釋腳本),可以運行的程序都有一個可執行的屬性。

  3 簡單的命令 ls cp mv mkdir rm chown chmod

  前面說了一些枯燥的概念,現在趁著看官還沒有煩躁,開始實際操作的例子。

  QUOTE:

  Last login: Mon Aug 14 21:52:47 2006 from 61.149.202.143

  [root@CERNET ~]#

  這就是bash登陸後的樣子。#井號是root特權用戶的提示符號,一般用戶提示符是$符號。

  現在輸入ls,列出當前目錄的內容

  QUOTE:

  [root@CERNET ~]# ls

  anaconda-ks.cfg install.log.syslog log4cplus-1.0.2 MceMonitor-install-files.tgz.md5sum vmstat_monitor

  Ice-3.0.1 jwsmtp-1.32.11 log4cplus-1.0.2.tar.gz memcached-1.1.12 wuhan.sh

  Ice-3.0.1.tar.gz jwsmtp-1.32.11.tar.gz login_keepalived memcached-1.1.12.tar.gz

  ids.sh libevent-0.8 MceMonitor sar.log

  install.log libevent-0.8.tar.gz MceMonitor-install-files.tgz tmp

  再輸入cd /,把當前目錄改為根目錄

  QUOTE:

  [root@CERNET /]# ls

  bin data etc home lib media mnt proc sbin srv tmp var

  boot dev eth1.route initrd lost+found misc opt root selinux sys usr

  相信你的Linux一定是有顏色的,呵呵。

  現在回到原來的目錄(剛登陸的時候那個目錄叫用戶主目錄),然後新建一個目錄叫aaa。

  QUOTE:

  [root@CERNET /]# cd ~

  [root@CERNET ~]# mkdir aaa

  [root@CERNET aaa]#

  ~表示用戶的主目錄,mkdir是建立目錄的命令,還可以這樣用

  mkdir {aaa,bbb,ccc,ddd} 會同時建立4個目錄

  mkdir -p ~/aaa/bbb/ccc/ddd/eee 這樣在前面目錄不存在的時候,會自動建立。

  在當前目錄下有這樣的文件,復制和移動是這樣的:

  QUOTE:

  [root@CERNET /]# ls

  a.log

  [root@CERNET /]# cp a.log b.log

  [root@CERNET /]# ls

  a.log b.log

  [root@CERNET /]# rm a.log

  [root@CERNET /]# ls

  b.log

  [root@CERNET /]# mkdir dir1

  [root@CERNET /]# ls

  b.log dir1

  [root@CERNET /]# rm -r dir1

  b.log

  cp是復制文件,rm是刪除文件。cp和rm都有-r的參數,可以復制目錄或者刪除目錄。




  刪除時有可能會提示你每個文件都按y確認,可以用-f參數不讓它提示。

  -r -f這樣的參數可以寫成-rf。也就是

  QUOTE:

  [root@CERNET /]# rm -rf dir1

  最後看一下設置權限的兩個命令,這通常會給初學者造成很大的困擾,遇到權限不足錯誤的時候,應該看一下是不是權限的問題。

  先列出完整的文件列表:

  QUOTE:

  [root@CERNET /]# ll

  total 176

  drwxr-xr-x 2 root root 4096 Apr 12 04:02 bin

  drwxr-xr-x 3 root root 4096 Apr 3 15:47 boot

  drwxr-xr-x 4 root root 4096 Apr 27 00:34 data

  drwxr-xr-x 8 root root 5180 Jun 27 13:51 dev

  drwxr-xr-x 76 root root 12288 Aug 13 04:03 etc

  -rw-r--r-- 1 root root 176 Apr 4 14:17 eth1.route

  drwxr-xr-x 2 root root 4096 Aug 13 2004 home

  drwxr-xr-x 2 root root 4096 Aug 13 2004 initrd

  drwxr-xr-x 11 root root 4096 Apr 4 04:04 lib

  drwx------ 2 root root 16384 Apr 3 23:45 lost+found

  drwxr-xr-x 2 root root 4096 Aug 13 2004 media

  drwxr-xr-x 2 root root 4096 Dec 2 2005 misc

  drwxr-xr-x 2 root root 4096 Aug 13 2004 mnt

  drwxr-xr-x 5 root root 4096 Aug 9 00:27 opt

  dr-xr-xr-x 191 root root 0 Jun 27 21:50 proc

  drwxr-x--- 12 root root 4096 Aug 12 09:02 root

  drwxr-xr-x 2 root root 12288 Apr 4 04:05 sbin

  drwxr-xr-x 2 root root 4096 Apr 3 15:46 selinux

  drwxr-xr-x 2 root root 4096 Aug 13 2004 srv

  drwxr-xr-x 9 root root 0 Jun 27 21:50 sys

  drwxrwxrwt 4 root root 4096 Aug 14 22:16 tmp

  drwxr-xr-x 14 root root 4096 Apr 3 15:47 usr

  drwxr-xr-x 22 root root 4096 May 17 16:08 var

  ll命令是RedHat系列一般都有的一個別名,它代表ls -l。每一行是一個文件或者目錄,就這一行說明一下:

  QUOTE:

  drwxr-xr-x 14 root root 4096 Apr 3 15:47 usr

  drwxr-xr-x 表示:目錄 所有者有rwx權限 所有組有r-x權限 其他用戶有r-x權限

  root root 表示:所有者是root,所有組是root。(前面的是用戶,後面的是組)

  4096是大小,目錄的大小和文件系統有關系,文件的話,大小就是文件真實的大小。

  現在看看修改權限:

  QUOTE:

  [root@CERNET aaa]# ls -l

  drwxr-xr-x 2 root root 4096 Apr 3 15:46 bbb

  drwxr-xr-x 2 root root 4096 Aug 13 2004 ccc

  [root@CERNET aaa]# chown FTP:ftp bbb

  [root@CERNET aaa]# ls -l

  drwxr-xr-x 2 ftp ftp 4096 Apr 3 15:46 bbb

  drwxr-xr-x 2 root root 4096 Aug 13 2004 ccc

  [root@CERNET aaa]# chmod -R 777 bbb

  drwxr-xr-x 2 ftp ftp 4096 Apr 3 15:46 bbb

  drwxrwxrwx 2 root root 4096 Aug 13 2004 ccc

  4 管道 和 高級一些的命令 grep less more sed awk

  常用的命令還有很多,在後面有沒見過的命令,我會隨時說明。

  現在說一些主要用作配合別的命令的命令。

  管道

  配合別的文件操作的這類命令一般是這樣工作的:前一個程序的輸出結果,是後一個程序的輸入。這樣銜接起來,可以實現一個很長的串完成復雜的工作。

  *nix的設計概念就是這樣的,每個工具完成很簡單的工作,都使用文本做輸入輸出。還有就是關鍵的“管道”,這就可以串起來了。

  比如:

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg

  這個命令會把/var/log/dmesg顯示在屏幕上。但是這個文件裡面是系統的日志,非常得多,幾百行一個屏幕放不下。所以這樣:



  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg less

  自己動手實驗看看效果吧,這個很重要。

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg more

  也是可以分屏顯示的,區別是less可以上下的滾動,more只能整屏的向後翻。

  QUOTE:

  [root@CERNET log]# cat /var/log/dmesg grep ACPI

  這會把包含“ACPI”的行,都顯示出來,不包含的不顯示。這就是grep的作用。

  上面的這個結果,不用管道也可以:

  QUOTE:

  [root@CERNET log]# grep ACPI /var/log/dmesg

  grep有-v的參數,可以把不符合條件的都顯示出來。自己試驗一下吧。

  -c的參數可以把符合條件和行數數出來。

  awk和sed是稍復雜一些的命令,有很多高級的用法,本文只對初學者,所以只舉兩個例子說一下最簡單的用途。

  QUOTE:

  [root@CERNET log]# cat /etc/passwd awk -F: '{print $1}'

  這會把/etc/passwd這個文件每一行按冒號分割,輸出第一個部分。

  QUOTE:

  [root@CERNET log]# sed -i 's/aaa/bbb/' test

  這會把test文件裡面,所有的aaa字符替換成bbb。sed -i的含義是直接在文件裡替換。沒有-i的參數,它會把替換過的結果輸出到屏幕上。

  *學用Linux命令有兩個方面下手:一個是命令本身的參數,一個是如何把命令結合的更好。

  命令本身的參數要用幫助慢慢學,man是系統幫助命令。比如

  QUOTE:

  [root@CERNET log]# man grep

  可以顯示出grep命令的幫助。有些版本的Linux這個幫助是中文的。

  至於如何結合好不同的命令,就要看自己的理解了。

5 常用的編輯器 vi nano emacs為了把一個些常用的命令放在一起執行,可以寫一個文件,把命令都放在一起,可以通過一個命令執行很多命令。為了下一節做准備,先來學習一下編輯器。nano最簡單,類似Windows的操作方式,啟動以後通過Ctrl+一個鍵執行一些命令。vi有插入模式和改寫模式,用Insert鍵操作。按ESC退出這兩個模式。冒號w可以保存文件。冒號q可以退出。當然也可以寫在一起,用:wq退出。如果要不保存退出,用:q! 點擊查看大圖

emacs更適合做程序開發,因為最初是為了做成一個Shell,所以功能十分復雜。編輯之後,用Ctrl+C+X退出。vi和emacs一直是最受爭議的兩個編輯器,兩者都有各自的特點,各自的忠實用戶。這兩者的選擇完全是個人喜好。初學者從nano用起也不錯,功能稍弱一些,但是至少不至於連退出都不會。

6 編寫自己的腳本好了!開始編寫一個自己的bash腳本文件,執行通常的操作。每次開機都要在桌面上點開lumaQQ,Firefox,Gaim是不是很累?寫個腳本,一起執行!

QUOTE: vi first.sh按Insert進入插入模式,輸入代碼:#!/bin/bashPATH=~/bin/LumaQQ:${PATH}lumaqq &firefox &gaim &

點擊查看大圖

QUOTE: 然後按ESC鍵,輸入:wq退出。

QUOTE: 看看文件屬性:用ll first.sh給文件加上可執行屬性:用chmod +x first.sh執行這個腳本:./first.sh

點擊查看大圖之後,lumaqq firefox gaim就都打開了!上面的例子中有一些需要解釋的:PATH是執行程序尋找的路徑,在這個路徑下的程序,可以只輸入名字就能運行。比如我們剛才用過的chmod,它其實就是這個文件/bin/chmod。因為PATH環境變量包括/bin,所以可以直接使用。對於PATH中不包括的地方的程序,就要寫全路徑來執行,比如./first.sh就是執行當前目錄下的first.sh文件。被執行的程序都必須有可執行的權限才可以。first.sh文件的第一行是一個標志。因為實際上電腦只能執行編譯過的二進制文件,對這種用文本寫的文件,需要有一個二進制文件來進行解釋,然後執行。如果沒有這句的話,也可以這樣運行:

QUOTE: [root@localhost ~]# /bin/bash first.sh



&符號表示這個程序在後台運行,這樣可以在一個腳本裡並行啟動多個程序。類似的操作還有Ctrl+Z,可以把前台運行的程序放到後台休眠起來,用bg命令讓它在後台繼續執行,用fg命令讓它回到前台。

7 自動運行crontabLinux有一個服務叫做Crond,用來定時地完成一定的操作。這個功能在桌面應用可能不是很多,但是依然是一個十分有趣的功能,值得了解一下。

QUOTE: [root@localhost ~]# crontab -e

可以打開一個vi編輯器,裡面包含當前用戶的計劃表。格式是這樣的:

QUOTE: 1 2 3 * * /root/second.sh > /root/second.log 2>&1 &

前面5個表示的就是運行的時間

QUOTE: 1 2 3 * *表示每月3日的2點1分 執行後面的語句*/15 * * * * 表示每15分鐘執行一次(有的舊版本crond不支持/,就要寫成0,15,45 * * * *)1 1 * * 1 表示每周一運行(也有用0表示周一,要man crond)一直沒有變的那個*,呵呵,表示年,一般沒人計劃一年的事啦。

QUOTE: [root@localhost ~]# crontab -l

可以列出來當前的計劃表。上面的命令有兩個地方需要說明:>符號表示把運行的結果保存在後面的文件裡。因為是自動運行嘛,根本沒有一個屏幕供顯示結果,所以一般在crontab裡面都會保存一個運行結果。>>符號可以用“追加”模式,將新的結果寫在原有文件後面。2>&1的意思是把錯誤輸出也同時輸出到標准輸出。



QUOTE: [root@localhost ~]# crontab -l

可以列出來當前的計劃表。上面的命令有兩個地方需要說明:>符號表示把運行的結果保存在後面的文件裡。因為是自動運行嘛,根本沒有一個屏幕供顯示結果,所以一般在crontab裡面都會保存一個運行結果。>>符號可以用“追加”模式,將新的結果寫在原有文件後面。2>&1的意思是把錯誤輸出也同時輸出到標准輸出。



QUOTE: [root@localhost ~]# crontab -l

可以列出來當前的計劃表。上面的命令有兩個地方需要說明:>符號表示把運行的結果保存在後面的文件裡。因為是自動運行嘛,根本沒有一個屏幕供顯示結果,所以一般在crontab裡面都會保存一個運行結果。>>符號可以用“追加”模式,將新的結果寫在原有文件後面。2>&1的意思是把錯誤輸出也同時輸出到標准輸出。



Copyright © Linux教程網 All Rights Reserved