首頁>Club>
題主是Linux初學者(在校生)題主理解./的意思是當前目錄,但是:據題主目前所理解的內容,gcc,nm,objdump,ping這些命令實際上都是一些在Linux的bin資料夾下放著的"小程式",透過系統環境變數從而在任意路徑下呼叫但是為什麼當我開啟一個另一個"小程式" a.out(hello world程式)時,卻需要./a.out而不是直接a.out?更加底層,更加具體的原因是什麼?假設我寫了一個ping小程式,放在/root資料夾下,那麼我(root使用者)能不能直接在/root路徑下輸入ping來使用它?還是說,如果我不配置其他某些東西的話,我只能使用./ping來呼叫這個程式? 多謝各位大佬!
12
回覆列表
  • 1 # 從程式設計師到交易員

    有一個叫PATH的環境變量了解一下,裡面存放了搜尋路徑,因為你的a.out不在那些路徑裡面所以需要自己指明具體路徑。

  • 2 # AioT智慧家居

    這裡涉及到了一個環境變數的問題,想要直接開啟a.out,你需要將a.out的目錄新增到環境變數裡面。

    linux中有個環境變數PATH,告訴系統要去哪些目錄查詢可執行程式。

    比如我的debian伺服器的環境變數是這樣的。

    xstarwxb@nbdeb64:~/kmssvr$ echo $PATH

    /home/xstarwxb/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

    透過which命令可以查詢到ping程式所在目錄

    xstarwxb@nbdeb64:~/kmssvr$ which ping

    /bin/ping

    然後如果你想執行/home/xstarwxb/demo/a.out程式,並且不想輸入這麼長的路徑,或者進入這個目錄後才執行。則需要做如下操作

    xstarwxb@nbdeb64:~/kmssvr$ export PATH=$PATH:/home/xstarwxb/demo/

    xstarwxb@nbdeb64:~/kmssvr$ echo $PATH

    /home/xstarwxb/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/xstarwxb/demo/

    xstarwxb@nbdeb64:~/kmssvr$ a.out

    hello world

  • 3 # 豬哥數碼

    這是因為Unix(Linux的原版)的設計初衷就是萬物皆檔案。

    Linux或Unix的可執行程式不像Windows的程式要有特定的“.exe ”字尾和檔案頭,它們就是一個普通檔案,只是屬性中有可執行的屬性。那對於你編寫的程式,編譯器預設的輸出名就是a.out,你要執行它就要輸入a.out。你認為它執行的過程和結果沒有問題後,就可以把它改成你想要的名字了,如ping之類。

    至於開啟程式要輸入./a.out,這只是部分版本的Linux所用的許可權限制機制造成的,此版本的系統想要明確執行人或父程序是誰,所以需要你在執行程式時要鍵入相對路徑。

    而Ping這類系統程式的本身級別就高,不需要指定路徑就可以運行了。

  • 4 # 拒海

    在linux系統,.表示當前目錄,./xxx.sh 表示當前目錄下的指令碼檔案

    當輸入一個未指定路徑的命令時,系統並不必然在當前目錄下查詢一個命令

    系統到哪裡找你輸入的命令呢?答案是PATH環境變數,如果這個環境變數裡定義的所有路徑裡都找不到你的命令那就無法執行,哪怕該命令就在當前目錄下

    所以,要麼將當前目錄新增到環境變數PATH裡,要麼在輸入命令時指定該命令的路徑,比如當前目錄就可以寫作./xxx.sh

    windows下是會把當前目錄也作為命令搜尋路徑的

  • 5 # Cofire

    建議先學習作業系統的基本操作和引數設定,再學習在該作業系統上搞開發,就如同一個嬰兒,應該先學習站起來,掌握平衡,再學習直立行走和奔跑。

  • 中秋節和大豐收的關聯?
  • 關於水與山的成語或詩句?