亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4969 | 回復(fù): 7
打印 上一主題 下一主題

Linux命令之學(xué)習(xí)總結(jié) [復(fù)制鏈接]

論壇徽章:
2
獅子座
日期:2014-08-29 16:15:422015亞冠之阿爾納斯?fàn)?日期:2015-08-28 17:47:49
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-05-08 15:12 |只看該作者 |倒序瀏覽
本帖最后由 122285969 于 2011-05-08 16:17 編輯

學(xué)習(xí)Linux命令也有些時日了,今天把這份簡單總結(jié)分享給大家
如果你是正在學(xué)習(xí)Linux命令的朋友,希望能給你帶來些許幫助

有問題才會有方向,解決問題就是我們的方向
所以讓我們帶著下面6個問題出發(fā)……

    當(dāng)前用戶直接能使用的命令都存在哪里呢?
    當(dāng)前用戶直接能使用的命令一共有多少個?
    我記不清命令拼寫該怎么處理呢?
    我怎么知道一個命令是干什么的?
    我怎么知道一個命令如何使用呢?
    當(dāng)前目錄的可執(zhí)行文件怎么不能直接執(zhí)行?



我們按照上面的順序一一來解答:

    當(dāng)前用戶直接能使用的命令都存在哪里呢?


我們先看看root用戶:
  1. [root@Centos ~]# whoami
  2. root
復(fù)制代碼
PS:當(dāng)前用戶root
  1. [root@Centos ~]# echo $PATH
  2. /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
復(fù)制代碼
PS:Linux所有可以直接執(zhí)行的命令都是存在 PATH 環(huán)境變量中以“:”分隔的路徑下的
  1. [root@Centos ~]# echo $PATH | sed 's/:/\n/g' | cat -n
  2.      1  /usr/kerberos/sbin
  3.      2  /usr/kerberos/bin
  4.      3  /usr/local/sbin
  5.      4  /usr/local/bin
  6.      5  /sbin
  7.      6  /bin
  8.      7  /usr/sbin
  9.      8  /usr/bin
  10.      9  /root/bin
復(fù)制代碼
PS:默認(rèn)root用戶所有可以直接執(zhí)行的命令,就存在這9個目錄下


我們再看看一個普通用戶的情況:
  1. [ctu@Centos ~]$ whoami
  2. ctu
復(fù)制代碼
PS:當(dāng)前用戶ctu
  1. [ctu@Centos ~]$ echo $PATH
  2. /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/ctu/bin
  3. [ctu@Centos ~]$ echo $PATH | awk -F ':' '{for (i=1; i<=NF; i++) {printf("%s\n",$i)}}' | cat -n
  4.      1  /usr/kerberos/bin
  5.      2  /usr/local/bin
  6.      3  /bin
  7.      4  /usr/bin
  8.      5  /home/ctu/bin
復(fù)制代碼
PS:普通用戶默認(rèn)可以直接執(zhí)行的命令,就存在這個5個目錄下。我們可以看到,root跟普通用戶的默認(rèn) PATH 環(huán)境變量的值并不相同,沒在各自環(huán)境變量中指定路徑的命令,就只能用絕對路徑和相對路徑來執(zhí)行了。


    當(dāng)前用戶直接能使用的命令一共有多少個?


我們先寫一個測試腳本:
  1. [root@Centos ~]# cat -n comm_sum_1.sh
  2.      1  #!/bin/sh
  3.      2
  4.      3  sum=0
  5.      4  count=0
  6.      5
  7.      6  echo -e "I'am $USER !\n"
  8.      7
  9.      8  for comm_path in `echo $PATH | sed 's/:/\n/g'`
  10.      9  do
  11.     10          count=`ls $comm_path 2>/dev/null | wc -l`
  12.     11          echo -e "$count\t: $comm_path"
  13.     12          sum=$[sum+count]
  14.     13  done
  15.     14
  16.     15  echo -e "\n$sum\t: comm_sum"
復(fù)制代碼
我們以root用戶運行一下試試看吧:
  1. [root@Centos ~]# . comm_sum_1.sh
  2. I'am root !

  3. 14      : /usr/kerberos/sbin
  4. 20      : /usr/kerberos/bin
  5. 0       : /usr/local/sbin
  6. 0       : /usr/local/bin
  7. 264     : /sbin
  8. 111     : /bin
  9. 348     : /usr/sbin
  10. 1111    : /usr/bin
  11. 0       : /root/bin

  12. 1868    : comm_sum
復(fù)制代碼
PS:提示我們root用戶可以直接使用的命令一共有 1868 個? 真的是這樣嗎?

我們再寫一個腳本,這次加入了可執(zhí)行權(quán)限的判斷,并把不能直接執(zhí)行的命令記錄在 no_allow_comm.txt 文件中
  1. [root@Centos ~]# cat -n comm_sum_2.sh
  2.      1  #!/bin/sh
  3.      2
  4.      3  sum=0
  5.      4
  6.      5  echo -e "I'am $USER !\n"
  7.      6
  8.      7  for comm_path in `echo $PATH | sed 's/:/\n/g'`
  9.      8  do
  10.      9          count=0
  11.     10          for file in `ls $comm_path 2>/dev/null`
  12.     11          do
  13.     12                  [ -x "$comm_path/$file" ] && count=$[count+1] || echo "$comm_path/$file" >> no_allow_comm.txt
  14.     13          done
  15.     14          echo -e "$count\t: $comm_path"
  16.     15          sum=$[sum+count]
  17.     16  done
  18.     17
  19.     18  echo -e "\n$sum\t: comm_sum"
  20.     19
復(fù)制代碼
我們以腳本 comm_sum_2.sh 來檢測試試看:
  1. [root@Centos ~]# . comm_sum_2.sh
  2. I'am root !

  3. 14      : /usr/kerberos/sbin
  4. 20      : /usr/kerberos/bin
  5. 0       : /usr/local/sbin
  6. 0       : /usr/local/bin
  7. 264     : /sbin
  8. 111     : /bin
  9. 348     : /usr/sbin
  10. 1107    : /usr/bin
  11. 0       : /root/bin

  12. 1864    : comm_sum
復(fù)制代碼
PS:?這個跟我們上次檢測的結(jié)果有出入了
  1. [root@Centos ~]# cat -n no_allow_comm.txt
  2.      1  /usr/bin/ecryptfs-dot-private
  3.      2  /usr/bin/huge_page_setup_helper.pyc
  4.      3  /usr/bin/huge_page_setup_helper.pyo
  5.      4  /usr/bin/pygtk-demo
  6. [root@Centos ~]# ecryptfs-dot-private
  7. -bash: /usr/bin/ecryptfs-dot-private: 權(quán)限不夠
  8. [root@Centos ~]# ls -l /usr/bin/ecryptfs-dot-private
  9. -rw-r--r-- 1 root root 1154 2009-09-04 /usr/bin/ecryptfs-dot-private
復(fù)制代碼
PS:我們再次檢測的時候,提示一共有 1864 個了。還有4個命令,確實不可以直接執(zhí)行。

用一個普通用戶來試試看:
  1. [ctu@Centos ~]$ . comm_sum_1.sh
  2. I'am ctu !

  3. 20      : /usr/kerberos/bin
  4. 0       : /usr/local/bin
  5. 111     : /bin
  6. 1111    : /usr/bin
  7. 0       : /home/ctu/bin

  8. 1242    : comm_sum
復(fù)制代碼
PS:腳本1檢測的結(jié)果是 1242 個
  1. [ctu@Centos ~]$ . comm_sum_2.sh
  2. I'am ctu !

  3. 20      : /usr/kerberos/bin
  4. 0       : /usr/local/bin
  5. 111     : /bin
  6. 1105    : /usr/bin
  7. 0       : /home/ctu/bin

  8. 1236    : comm_sum
復(fù)制代碼
PS:腳本2檢測的結(jié)果是 1236 個,一樣有出入
  1. [ctu@Centos ~]$ cat -n no_allow_comm.txt
  2.      1  /usr/bin/amtu
  3.      2  /usr/bin/aulastlog
  4.      3  /usr/bin/ecryptfs-dot-private
  5.      4  /usr/bin/huge_page_setup_helper.pyc
  6.      5  /usr/bin/huge_page_setup_helper.pyo
  7.      6  /usr/bin/pygtk-demo
  8. [ctu@Centos ~]$ amtu
  9. -bash: /usr/bin/amtu: 權(quán)限不夠
  10. [ctu@Centos ~]$ ls -l /usr/bin/amtu
  11. -rwxr-x--- 1 root root 33412 2008-05-25 /usr/bin/amtu
復(fù)制代碼
PS:跟上面的結(jié)果是一樣的,也有些命令雖然是在 PATH 環(huán)境變量中,仍然不可以直接執(zhí)行的。


    我記不清命令拼寫該怎么處理呢?


我們以命令 ifconfig 為例說明:

我要使用這個命令,但是我不記得怎么拼寫了,模糊地記得好像前面兩個字符是 if 吧?

那就輸入 if ,再按兩下 TAB 鍵吧。
  1. [root@Centos ~]# if
  2. if         ifconfig   ifenslave  ifrename
  3. ifcfg      ifdown     ifnames    ifup
復(fù)制代碼
系統(tǒng)自動為我們找到了我們要使用的命令 ifconfig

但是 TAB 鍵的方法只適合我們記得前面幾個字符的情況。

要是我們只記得第3,4個字符為 co 呢? 或者我們只記得命令中含有 fig 呢?這樣的情況我們使用 TAB 鍵好像無能為力了。

顯然 TAB 鍵在這些情況下并不適合,要必要尋找新的方法來替代了(這并不是 TAB 鍵功能的缺陷)。

我們寫一個命令查找的shell腳本
  1. [ctu@Centos ~]$ cat -n comm_find.sh
  2.      1  #!/bin/sh
  3.      2
  4.      3  read -p "Please enter a keyword : " comm_name
  5.      4
  6.      5  echo -e "I'am $USER !\n"
  7.      6
  8.      7  for comm_path in `echo $PATH | sed 's/:/\n/g'`
  9.      8  do
  10.      9          ls $comm_path 2>/dev/null | grep -iE "$comm_name" && echo -e "\n[ $comm_path ]\n"
  11.     10  done
復(fù)制代碼
我們測試下只記得第3,4個字符是 co 的情況:
  1. [root@Centos ~]# . comm_find.sh
  2. Please enter a keyword : ^..co
  3. I'am root !

  4. ifconfig
  5. iwconfig
  6. ldconfig

  7. [ /sbin ]

  8. dbconverter-2
  9. lvconvert
  10. pwconv
  11. racoon
  12. racoonctl
  13. vgconvert

  14. [ /usr/sbin ]

  15. chcon
  16. cscope
  17. cscope-indexer
  18. fgconsole
  19. opcontrol
  20. piconv
  21. recountdiff
  22. rfcomm
  23. secon
  24. sfconvert

  25. [ /usr/bin ]
復(fù)制代碼
憑著我們的印象,相信你能找出來要使用的命令 ifconfig ,除非你從來就沒使用過。

我們再看看只記得含有 fig 的情況:
  1. [root@Centos ~]# . comm_find.sh
  2. Please enter a keyword : fig
  3. I'am root !

  4. krb5-config

  5. [ /usr/kerberos/bin ]

  6. chkconfig
  7. ifconfig
  8. iwconfig
  9. ldconfig
  10. plipconfig
  11. vconfig

  12. [ /sbin ]

  13. authconfig
  14. authconfig-gtk
  15. authconfig-tui
  16. hciconfig
  17. iconvconfig
  18. iconvconfig.i686
  19. system-config-authentication
  20. system-config-lvm
  21. system-config-network
  22. system-config-network-cmd
  23. system-config-network-gui
  24. system-config-network-tui
  25. system-config-packages
  26. sys-unconfig
  27. timeconfig

  28. [ /usr/sbin ]

  29. authconfig
  30. authconfig-gtk
  31. authconfig-tui
  32. curl-config
  33. dateconfig
  34. gpg-error-config
  35. libgcrypt-config
  36. libusb-config
  37. nspr-config
  38. nss-config
  39. pkg-config
  40. scim-config-agent
  41. scrollkeeper-config
  42. system-config-authentication
  43. system-config-date
  44. system-config-display
  45. system-config-kdump
  46. system-config-keyboard
  47. system-config-language
  48. system-config-lvm
  49. system-config-network
  50. system-config-network-cmd
  51. system-config-rootpassword
  52. system-config-securitylevel
  53. system-config-securitylevel-tui
  54. system-config-soundcard
  55. system-config-time
  56. system-config-users
  57. xml2-config
  58. xmlsec1-config
  59. xslt-config

  60. [ /usr/bin ]
復(fù)制代碼
一樣可以憑著印象找出來的,這樣也就可以應(yīng)付所有忘記拼寫但使用過的命令的情況了。


    我怎么知道一個命令是干什么的?


我們以 ping 命令為例說明:
  1. [ctu@Centos ~]$ man ping

  2. PING(8)                System Manager’s Manual: iputils                PING(8)

  3. NAME
  4.        ping, ping6 - send ICMP ECHO_REQUEST to network hosts
復(fù)制代碼
  1. [ctu@Centos ~]$ info ping

  2. File: *manpages*,  Node: ping,  Up: (dir)

  3. PING(8)                System Manager’s Manual: iputils                PING(8)

  4. NAME
  5.        ping, ping6 - send ICMP ECHO_REQUEST to network hosts
復(fù)制代碼
PS:man info命令給出了要查找命令的功能說明


    我怎么知道一個命令如何使用呢?
  1. [root@Centos ~]# ping
  2. Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
  3.             [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
  4.             [-M mtu discovery hint] [-S sndbuf]
  5.             [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
復(fù)制代碼
PS:不帶參數(shù)執(zhí)行一個命令,通常會給出該命令的簡單使用說明,但不是所有命令都會的
  1. [ctu@Centos ~]$ man ping

  2. OPTIONS
  3.        -a     Audible ping.

  4.        -A     Adaptive ping. Interpacket interval adapts to round-trip
  5.               time, so that effectively not more than one (or more, if
  6.               preload  is  set)  unanswered probes present in the net-
  7.               work. Minimal interval is 200msec  for  not  super-user.
  8.               On networks with low rtt this mode is essentially equiv-
  9.               alent to flood mode.

  10.        -b     Allow pinging a broadcast address.

  11.        -B     Do not allow ping to change source  address  of  probes.
  12.               The address is bound to one selected when ping starts.

  13.        -c count
  14.               Stop  after  sending  count  ECHO_REQUEST  packets. With
  15.               deadline option, ping waits for count  ECHO_REPLY  pack-
  16.               ets, until the timeout expires.

  17.        -d     Set  the  SO_DEBUG  option  on  the  socket  being used.
  18.               Essentially, this socket option is  not  used  by  Linux
  19.               kernel.

  20.        -F flow label
  21.               Allocate and set 20 bit flow label on echo request pack-
  22.               ets.  (Only ping6). If value is zero,  kernel  allocates
  23.               random flow label.
復(fù)制代碼
PS:man命令會給出命令的詳細參數(shù)說明,還有info也一樣,通常info命令會有相應(yīng)的應(yīng)用舉例,按自己喜好來查找吧


    當(dāng)前目錄的可執(zhí)行文件怎么不能直接執(zhí)行?


默認(rèn)情況下,Linux是不搜索當(dāng)前目錄的命令的
  1. [root@Centos ~]# echo $PATH
  2. /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  3. [root@Centos ~]# cat -n hp.sh
  4.      1  #!/bin/bash
  5.      2
  6.      3  echo "hello ping"
復(fù)制代碼
PS:hp.sh作用就是輸出“hello ping”
  1. [root@Centos ~]# chmod +x hp.sh
復(fù)制代碼
PS:添加當(dāng)前用戶的可執(zhí)行權(quán)限
  1. [root@Centos ~]# hp.sh
  2. -bash: hp.sh: command not found
復(fù)制代碼
PS:具有可執(zhí)行權(quán)限,也確實存在當(dāng)前目錄下,但是仍然提示命令找不到
  1. [root@Centos ~]# ./hp.sh
  2. hello ping
復(fù)制代碼
PS:使用相對路徑,我們就可以執(zhí)行成功
  1. [root@Centos ~]# export PATH=.:$PATH
復(fù)制代碼
PS:現(xiàn)在我們將當(dāng)前目錄加入到 PATH 環(huán)境變量中
  1. [root@Centos ~]# echo $PATH
  2. .:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  3. [root@Centos ~]# hp.sh
  4. hello ping
復(fù)制代碼
PS:不使用絕對路徑或者相對路徑,這次我們也可以執(zhí)行成功了
  1. [root@Centos ~]# ping
  2. Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
  3.             [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
  4.             [-M mtu discovery hint] [-S sndbuf]
  5.             [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
復(fù)制代碼
PS:此時執(zhí)行的 ping 命令是系統(tǒng)自帶的
  1. [root@Centos ~]# mv hp.sh ping
復(fù)制代碼
PS:我們將 hp.sh 也改名為 ping
  1. [root@Centos ~]# ping
  2. hello ping
復(fù)制代碼
PS:這次執(zhí)行的ping命令就不再是系統(tǒng)自帶的了。命令搜索是按照 PATH 環(huán)境變量,以“:”分隔的路徑,從左到右逐個搜索的。因此當(dāng)我們將 hp.sh 腳本改名成 ping 命令時。這時候存在兩個 ping 命令了。而當(dāng)前目錄下的 ping 優(yōu)先于 /bin/ping 命令,也就被執(zhí)行了。

就寫到這里吧,希望大家多多支持。≈x謝!



--- THE END ---

論壇徽章:
0
2 [報告]
發(fā)表于 2011-05-08 15:22 |只看該作者
加油~

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
3 [報告]
發(fā)表于 2011-05-08 16:23 |只看該作者
回復(fù) 1# 122285969


我們寫一個命令查找的shell腳本

直接使用系統(tǒng)的find命令是不是更簡潔一些

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亞洲杯之阿曼
日期:2015-04-07 20:00:59
4 [報告]
發(fā)表于 2011-05-08 20:59 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
5 [報告]
發(fā)表于 2011-05-09 10:02 |只看該作者
謝謝分享!

論壇徽章:
0
6 [報告]
發(fā)表于 2011-05-09 10:15 |只看該作者
學(xué)習(xí)……

論壇徽章:
0
7 [報告]
發(fā)表于 2011-05-09 10:17 |只看該作者
最喜歡這樣的帖子,不浮夸,從基礎(chǔ)做起……
樓主再接再礪……

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
8 [報告]
發(fā)表于 2011-05-09 13:44 |只看該作者
支持支持!!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP