Bagaimana cara menetapkan $ PATH di Linux / Unix secara permanen?


880

Saya mencoba menambahkan direktori ke jalur saya sehingga akan selalu ada di jalur Linux saya. Saya sudah mencoba:

export PATH=$PATH:/path/to/dir

Ini berfungsi, namun setiap kali saya keluar dari terminal dan memulai instance terminal baru, jalur ini hilang, dan saya perlu menjalankan perintah ekspor lagi.

Bagaimana saya bisa melakukannya sehingga ini akan ditetapkan secara permanen?

Jawaban:


230

Ada banyak cara untuk melakukannya. Solusi aktual tergantung pada tujuannya.

Nilai variabel biasanya disimpan dalam daftar tugas atau skrip shell yang dijalankan pada awal sistem atau sesi pengguna. Dalam hal skrip shell, Anda harus menggunakan sintaks dan exportatau setperintah shell tertentu .

Sistem luas

  1. /etc/environmentDaftar penugasan unik, memungkinkan referensi. Sempurna untuk menambahkan direktori seluruh sistem seperti /usr/local/something/binke PATHvariabel atau mendefinisikan JAVA_HOME. Digunakan oleh PAM dan SystemD.
  2. /etc/environment.d/*.confDaftar penugasan unik, memungkinkan referensi. Sempurna untuk menambahkan direktori seluruh sistem seperti /usr/local/something/binke PATHvariabel atau mendefinisikan JAVA_HOME. Konfigurasi dapat dipecah menjadi beberapa file, biasanya satu per masing-masing alat (Java, Go, NodeJS). Digunakan oleh SystemD yang menurut desain tidak meneruskan nilai-nilai itu ke shell login pengguna.
  3. /etc/xprofileScript shell dieksekusi saat memulai sesi Sistem X Window. Ini dijalankan untuk setiap pengguna yang masuk ke Sistem X Window. Ini adalah pilihan yang baik untuk PATHentri yang valid untuk setiap pengguna /usr/local/something/bin. File ini disertakan oleh skrip lain jadi gunakan sintaksis shell POSIX bukan sintaksis shell pengguna Anda.
  4. /etc/profiledan /etc/profile.d/*skrip Shell. Ini adalah pilihan yang baik untuk sistem shell-only. File-file itu hanya dibaca oleh shell dalam mode login.
  5. /etc/<shell>.<shell>rc. Skrip shell. Ini adalah pilihan yang buruk karena ini adalah shell khusus. Digunakan dalam mode non-login.

Sesi pengguna

  1. ~/.pam_environment. Daftar penugasan unik, tidak ada referensi yang diizinkan. Dimuat oleh PAM pada awal setiap sesi pengguna yang tidak relevan jika itu adalah sesi atau shell Sistem X Window. Anda tidak dapat merujuk variabel lain termasuk HOMEatau PATHkarena itu penggunaannya terbatas. Digunakan oleh PAM.
  2. ~/.xprofileSkrip shell. Ini dijalankan ketika pengguna masuk ke sistem Sistem X Window. Variabel yang didefinisikan di sini terlihat oleh setiap aplikasi X. Pilihan yang sempurna untuk memperluas PATHdengan nilai-nilai seperti ~/binatau ~/go/binatau mendefinisikan pengguna tertentu GOPATHatau NPM_HOME. File ini disertakan oleh skrip lain jadi gunakan sintaksis shell POSIX bukan sintaksis shell pengguna Anda. Editor teks grafis atau IDE Anda dimulai dengan pintasan akan melihat nilai-nilai itu.
  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginShell script. Ini akan terlihat hanya untuk program yang dimulai dari terminal atau terminal emulator. Ini adalah pilihan yang baik untuk sistem shell-only. Digunakan oleh shell dalam mode login.
  4. ~/.<shell>rc. Skrip shell. Ini adalah pilihan yang buruk karena ini adalah shell khusus. Digunakan oleh shell dalam mode non-login.

Catatan

Gnome on Wayland memulai shell login pengguna untuk mendapatkan lingkungan. Secara efektif menggunakan konfigurasi shell login ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginfile.

Manual

  • lingkungan Hidup
  • lingkungan.d
  • pesta
  • berlari

Distribusi dokumentasi khusus

Terkait

Perbedaan antara Shell Login dan Shell Non-Login?


4
Terima kasih atas jawaban terinci, ini harus lebih tinggi. Mungkin .bash_profileharus ditambahkan ke daftar juga?
James Ko

2
@JamesKo yang nomor 4
trve.fa7ad

1
Saya pikir jawaban terbaik disarankan /etc/environment. Tetapi dapatkah saya menyegarkannya tanpa keluar dan masuk? Terkadang saya tidak menggunakan bash atau sh jadi source /etc/environmenttidak berfungsi.
banan3'14

2
Hebat dan menurut saya jawaban paling lengkap. Harus jauh lebih tinggi.
Peter Gloor

2
Alasan saya untuk mencari topik ini sebenarnya Pergi. Senang melihat saya bukan satu-satunya yang menyadari bahwa .bashrc bukan tempat yang tepat. ;)
Peter Gloor

1039

Anda perlu menambahkannya ke file ~/.profileatau Anda ~/.bashrc. 

export PATH="$PATH:/path/to/dir"

Bergantung pada apa yang Anda lakukan, Anda juga mungkin ingin symlink ke biner:

cd /usr/bin
sudo ln -s /path/to/binary binary-name

Perhatikan bahwa ini tidak akan secara otomatis memperbarui jalur Anda selama sisa sesi. Untuk melakukan ini, Anda harus menjalankan:

source ~/.profile 
or
source ~/.bashrc

11
Beberapa pertanyaan. 1) Bukankah seharusnya ada titik dua di antara $PATHdan /usr/bin. 2) Harus /usr/binada di sana. 3) Bukankah sebaiknya Anda menggunakan /usr/local/bin?
Batandwa

197
Harap perhatikan : sering dianggap sebagai lubang keamanan untuk meninggalkan titik dua di akhir bash PATH Anda karena bash membuatnya sehingga bash terlihat di direktori saat ini jika tidak dapat menemukan executable yang dicari. Pengguna yang menemukan posting ini mencari informasi lebih lanjut harus diberitahukan tentang hal ini.
erewok

51
@AdamRobertson Tidak aman - pertimbangkan skenario saat Anda membongkar tarball, lalu cdke direktori tempat Anda membukanya, lalu jalankan ls--- dan kemudian sadari bahwa tarball memiliki program jahat yang disebutnya ls.
Lily Chung

21
Bagi saya itu .bash_profile, bukan .profile. Sepertinya ini berbeda untuk semua orang.
donquixote

9
Saya pikir saya secara signifikan meningkatkan kualitas jawaban ini, dan membahas beberapa masalah yang dibicarakan pengguna lain. Setiap jalur ekspor, atau setiap perintah yang menyesuaikan jalur, harus selalu memastikan untuk memisahkan jalur yang ada dengan titik dua. Titik dua atau titik dua tidak boleh digunakan, dan direktori saat ini tidak boleh berada di jalur.
Erick Robertson

243

Di Ubuntu, edit /etc/environment. Tujuan utamanya adalah untuk menyimpan Variabel Lingkungan. Awalnya variabel $ PATH didefinisikan di sini. Ini adalah tempel dari /etc/environmentfile saya :

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Jadi Anda bisa membuka file ini sebagai root dan menambahkan apa pun yang Anda inginkan.

Untuk hasil Segera, Jalankan (coba seperti pengguna dan root seperti biasa ):

source /etc/environment && export PATH

MEMPERBARUI:

Jika Anda menggunakan zsh(alias Z Shell), tambahkan baris ini tepat setelah komentar di /etc/zsh/zshenv:

source /etc/environment

Saya mengalami kekhasan kecil ini di Ubuntu 15.10, tetapi jika zsh Anda tidak mendapatkan PATH yang benar , ini bisa menjadi alasannya


13
Tidak semua sistem memiliki / etc / environment
user3439968

9
FWIW $PATHjuga didefinisikan /etc/profiledalam Arch Linux.
Sparhawk

3
@ e-sushi saya benar-benar kaget dengan itu. Saya di ubuntu 14.04.1 sendiri. dan saya dapat menjanjikan kepada Anda file itu disertakan.
trve.fa7ad

2
Setelah mencoba setiap saran di bawah matahari tetapi / etc / environment, dan memiliki semuanya TIDAK bekerja, saya akhirnya menemukan ini. Saya juga di Ubuntu 14.04 dan ini adalah satu-satunya yang benar-benar mengubah variabel PATH setelah reboot.
Chockomonkey

4
Pengguna harus me-restart PC setelah memperbarui file lingkungan.
Harish_N

71

Masukkan exportdeklarasi ~/.bashrc. .Bashrc saya mengandung ini:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH

7
restart diperlukan?
Klik Upvote

2
Bekerja ketika saya meletakkan ini di .profile', tidak menemukan.bashrc
Klik Upvote

Mungkin tergantung pada sistem yang tepat; Saya tidak yakin persis kondisi apa yang menentukan file mana yang dieksekusi. Senang masalahnya diselesaikan, meskipun.
Fraxtil

12
@Klik Upvote yang perlu Anda lakukan source ~/.bashrcuntuk memuat ulang .bashrckonfigurasi. Maka itu akan berhasil
BigSack

4
Kata exportkunci hanya diperlukan jika PATHbelum ditandai sebagai variabel lingkungan - yang hampir tanpa syarat. Secara sederhana PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATHakan memiliki efek yang sama.
Charles Duffy

30

Anda dapat mengatur $PATHsecara permanen dalam 2 cara.

  1. Untuk mengatur jalur untuk pengguna tertentu: Anda mungkin perlu membuat entri di .bash_profiledirektori home di pengguna.

    misalnya dalam kasus saya, saya akan mengatur jalur java di profil pengguna kucing jantan

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. Untuk mengatur jalur umum untuk SEMUA pengguna sistem, Anda mungkin perlu mengatur jalur seperti ini:

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

3
Apakah file tersebut dinamai /etc/profilesdengan sdistro Anda? Punyaku tidak s. Saya pikir Anda salah ketik.
Chris Johnson

3
Anda mungkin ingin melarikan diri dari $ yang Anda tulis ke file profil. mis. echo "export PATH = \ $ PATH: / path / to / dir" >> / etc / profile, dengan cara itu Anda benar-benar menambahkan ke variabel ketika skrip berjalan daripada mengaturnya ke nilai literal berdasarkan pada nilainya di waktu menjalankan perintah awal ini.
BuvinJ

15

Anda dapat menggunakan Centos atau RHEL untuk pengguna lokal:

echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

Ini menambahkan direktori saat ini (atau Anda dapat menggunakan direktori lain) ke PATH, ini membuatnya permanen tetapi berlaku pada login pengguna berikutnya.

Jika Anda tidak ingin melakukan login ulang, maka dapat menggunakan:

source ~/.bash_profile

Yang memuat kembali # User specific environment and startup programskomentar ini hadir di.bash_profile


12

Anda juga dapat mengatur secara permanen, mengedit salah satu file ini:

/etc/profile (untuk semua pengguna)

~/.bash_profile (untuk pengguna saat ini)

~/.bash_login (untuk pengguna saat ini)

~/.profile (untuk pengguna saat ini)

Anda juga dapat menggunakan /etc/environmentuntuk menetapkan variabel lingkungan PATH permanen, tetapi tidak mendukung ekspansi variabel .

Diambil dari: http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html


7

Saya menemukan pertanyaan ini kemarin ketika mencari cara untuk menambahkan folder yang berisi skrip saya sendiri ke PATH - dan terkejut mengetahui bahwa ~/.profilefile saya sendiri (di Linux Mint 18.1) sudah berisi ini:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Jadi, yang harus saya lakukan adalah membuat folder ~/bindan meletakkan skrip saya di sana.


7

Saya pikir cara yang paling elegan adalah:

1. tambahkan ini di file ~ / .bashrc Jalankan perintah ini

gedit ~ / .bashrc

tambahkan jalur Anda di dalamnya

export PATH = $ PATH: / opt / node / bin

2.sumber ~ / .bashrc

(Ubuntu)


6

Anda dapat menambahkan baris itu ke file konfigurasi konsol Anda (misalnya .bashrc), atau ke .profile


2
Saya tidak memiliki satu pun dari file tersebut di/home/(username)
Klik Upvote

3
@ClickUpvote: Shell apa yang Anda gunakan? (Dan file yang dimulai dengan titik disembunyikan, Anda perlu sesuatu ls -auntuk melihatnya.)
David Schwartz

Jika Anda tidak memiliki file-file itu (bashrc atau profil), Anda dapat membuatnya secara manual dan akan digunakan secara otomatis
trve.fa7ad

4

Tambahkan variabel PATH secara permanen

Global:

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

Lokal (hanya untuk pengguna):

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

Untuk restart global . Untuk relogin lokal .

Contoh

Sebelum:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

Setelah:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Atau Anda dapat mengedit profil:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

Cara lain (terima kasih gniourf_gniourf):

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile

Anda tidak harus menggunakan tanda kutip ganda di sini! echo 'export PATH = $ PATH: / new / path / variable' ... Dan omong-omong, kata kunci ekspor kemungkinan besar tidak berguna karena variabel PATH sangat mungkin sudah ditandai sebagai diekspor. - gniourf_gniourf


1
Nggak. Anda tidak harus menggunakan tanda kutip ganda di sini! echo 'export PATH=$PATH:/new/path/variable'... Dan omong-omong, exportkata kunci kemungkinan besar tidak berguna karena PATHvariabel tersebut kemungkinan besar sudah ditandai sebagai diekspor.
gniourf_gniourf

Tidak, Anda harus menggunakan tanda kutip ganda karena $ PATH dalam tanda kutip tunggal tidak diinterpolasi. Dan ekspor BTW juga bermanfaat.
user3439968

Saya mendapatkannya. Anda dapat menggunakan tanda kutip ganda atau menggunakan tanda kutip tunggal, karena $ PATH diinterpolasi ketika gema dieksekusi atau interpolasi ketika / etc / profile dieksekusi.
user3439968

1
@ user3439968 sebenarnya, Kutipan ganda akan menyebabkan banyak masalah jika Anda menambahkan $ PATH dari banyak file. Pertimbangkan: ketika Anda menggunakan tanda kutip ganda, $ PATH akan diterjemahkan ke string statis dengan semua direktori PATH yang ditetapkan sebelumnya. mengatakan Anda menambahkannya /usr/localmenggunakan ~/.bashrc. sekarang jika Anda bermaksud menambahkan /opt/binke variabel yang sama menggunakan /etc/bash.bashrc; $ PATH akan menerjemahkan ke string statis yang sama, sebagai hasilnya $ PATH akan diganti alih-alih ditambahkan ke ... Ini akan menjadi masalah preferensi sistem untuk satu file di atas yang lain
trve.fa7ad

4

1.modifikasi file "/ etc / profile".

#vi /etc/profile

Tekan tombol "i" untuk memasukkan status pengeditan dan memindahkan kursor ke akhir file, Entri tambahan :

export PATH=$PATH:/path/to/dir;

Tekan "Esc" tombol keluar dari status edit, ': wq' simpan file.

2. Buat konfigurasi efektif

source /etc/profile

Jelaskan : file profil berfungsi untuk semua pengguna, jika Anda hanya ingin valid untuk pengguna aktif, atur file ".bashrc"


4

Setelah banyak penelitian, saya menemukan solusi sederhana untuk ini (saya menggunakan OS dasar ), terinspirasi oleh tautan berikut .

Jalankan perintah berikut untuk membuka file .bashrc dalam mode edit . [Anda juga dapat menggunakan vi atau editor lain].

~$ sudo nano ~/.bashrc

Tambahkan baris berikut di akhir file dan simpan.

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"

Sebagai contoh :

export PATH="/home/rageshl/dev/flutter/bin:$PATH"

masukkan deskripsi gambar di sini

Saya percaya ini adalah solusi permanen untuk mengatur path di flutter di distro Ubuntu

Semoga ini bisa membantu.


3

file tempat Anda menambahkan perintah ekspor tergantung apakah Anda berada dalam mode login atau mode non-login.

jika Anda berada dalam mode masuk, file yang Anda cari adalah / etc / bash atau /etc/bash.bashrc

jika Anda berada dalam mode non-login, Anda mencari file /.profile atau file dalam direktori /.profiles.d

file yang disebutkan di atas jika variabel sistemnya berada.


3

Tambah ke /etc/profile.dfolder naskah [name_of_script].shdengan jalur: export PATH=$PATH:/dir. Setiap skrip di dalam /etc/profile.dfolder secara otomatis dijalankan /etc/profilepada saat login.


Ini adalah cara yang disarankan untuk menyesuaikan lingkungan Anda
Yuriy

1
Ini hanya jika Anda ingin pengaturan untuk seluruh sistem, yang mungkin bukan kasus penggunaan yang paling umum. Sebagian besar orang ingin (atau seharusnya menginginkan) jalur untuk ditetapkan secara lokal, karena sebagian besar pengguna / peran melakukan operasi yang berbeda secara kontekstual, dan semakin sedikit asumsi yang Anda buat, semakin baik.
mpowered

@ mpowered, ya, ini hanya untuk seluruh sistem. Jika Anda ingin lokal mengubah PATH Anda harus menambahkan ekspor yang sama di ~ / .profile atau ~ / .bashrc. Di sini Anda harus mempertimbangkan bahwa shell login read ~ / .profile dan shells interaktif read ~ / .bashrc. Ini sangat penting karena ssh misalnya tidak melakukan login, oleh karena itu ~ / .profile tidak akan dibaca. Beberapa distribusi seperti suse source ~ / .bashrc di / etc / profile. Tapi itu tidak umum untuk semua linux '
Yuriy

3

Zues77 memiliki ide yang tepat. OP tidak mengatakan "bagaimana saya bisa meretas jalan saya melalui ini". OP ingin tahu cara menambahkan secara permanen ke $ PATH:

sudo nano /etc/profile

Di sinilah diatur untuk semuanya dan merupakan tempat terbaik untuk mengubahnya untuk semua hal yang membutuhkan $ PATH


3

Jawaban saya mengacu pada pengaturan go-langpada. Ubuntu linux/amd64Saya telah menghadapi kesulitan yang sama dalam mengatur path variabel lingkungan ( GOPATHdan GOBIN), kehilangan itu pada terminal keluar dan membangunnya kembali menggunakan source <file_name>setiap waktu. Kesalahan adalah menempatkan path ( GOPATHdan GOBIN) dalam ~/.bash_profilefolder. Setelah membuang beberapa jam baik, saya menemukan bahwa solusi adalah untuk menempatkan GOPATHdan GOBINdi ~/.bash_rcberkas dengan cara yang:

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

dan melakukannya, instalasi go bekerja dengan baik dan tidak ada kerugian jalur.

EDIT 1: Alasan terkait masalah ini adalah pengaturan untuk shell non-login seperti terminal ubuntu atau terminal gnome tempat kita menjalankan kode go diambil dari ~./bash_rcfile dan pengaturan untuk shell login diambil dari ~/.bash_profilefile, dan dari ~/.profilefile jika ~/.bash_profilefile tidak dapat dijangkau.


3

Katakanlah Anda menjalankan MacOS dan Anda memiliki biner yang Anda percaya dan ingin membuatnya tersedia di seluruh sistem Anda, tetapi tidak perlu menginginkan direktori tempat biner ditambahkan ke PATH Anda, Anda dapat memilih untuk menyalin / memindahkan biner ke /usr/local/bin, yang seharusnya sudah ada di PATH Anda. Ini akan membuat biner dapat dieksekusi seperti biner lain yang mungkin sudah Anda akses di terminal Anda.


3

Itu dapat langsung ditambahkan dengan menggunakan perintah berikut:

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc

2
Pertanyaan diberi label bash, sehingga tidak terlalu membantu.
Laurenz Albe

2
Ini adalah jawaban yang valid -> judul hanya menyebutkan Linux, jadi bash dan JUGA akan zsh ... jika penandaan hanya "bash" kita perlu menambahkan "zsh" ke tag juga
Carlos Saltos

2

cara sederhana terbaik adalah baris berikut:
PATH="<directory you want to include>:$PATH"
di file .bashrc Anda di direktori home.
Ini tidak akan diatur ulang bahkan jika Anda menutup terminal atau reboot PC Anda. Ini permanen


1
@quant jika Anda melakukan apa yang dikatakan, itu akan mengatur pengaturan Anda secara permanen. itu akan berfungsi bahkan jika Anda menutup terminal.
Edward Torvalds

1

Saya pikir cara yang paling elegan adalah:

1. tambahkan ini di file ~. / Bashrc

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.sumber ~ / .bashrc

(Ubuntu)


Dan untuk menampilkan lintasan setelah di atas: printf "% s \ n" $ PATH
Robot70

1

salah satu cara untuk menambahkan jalur permanen, yang berfungsi untuk saya, adalah:

    cd /etc/profile.d
    touch custom.sh
    vi custom.sh 
    export PATH=$PATH:/path according to your setting/

restart komputer Anda dan di sini kita pergi jalan akan bersorak secara permanen.


Anda sebenarnya tidak perlu me-restart komputer Anda. Keluar dan kembali lagi sudah cukup. Ini adalah solusi yang cukup elegan karena sangat mudah untuk membatalkan perubahan apa pun tanpa perlu mengedit file. Juga mudah untuk menentukan pernyataan if sehingga jika direktori tidak ada pada sistem, itu tidak ditambahkan ke variabel PATH.
Warwick

0

Untuk distribusi debian, Anda harus:

    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root

0

Ini satu garis . Ini menambahkan garis ke .bashrc. Baris ini akan memeriksa apakah direktori telah ditambahkan ke path dan menambahkan jika tidak. Ini akan mencegah duplikasi direktori Anda di jalur setiap kali Anda sumber .bashrc.

echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

source ~/.bashrc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.