Фолдерын замыг хэрхэн зааж өгөх Linux зам. PATH орчны хувьсагч. Линукс дээр хэрэглэгчийн болон системийн орчны хувьсагчдыг нэмэх

Та тушаалыг оруулах үед тушаалын мөр, та үндсэндээ бүрхүүлд өгөгдсөн нэртэй гүйцэтгэх файлыг ажиллуулахыг хэлж байна. Линукс дээр эдгээр гүйцэтгэх боломжтой програмууд ls гэх мэт find, file болон бусад нь таны систем дээрх хэд хэдэн өөр директоруудад амьдардаг. Эдгээр сангуудад хадгалагдсан гүйцэтгэх зөвшөөрөлтэй аливаа файлыг хаанаас ч ажиллуулж болно. Гүйцэтгэх боломжтой програмуудыг агуулсан хамгийн түгээмэл сангууд нь /bin, /sbin, /usr/sbin, /usr/local/bin, /usr/local/sbin юм.

Гэхдээ бүрхүүл нь гүйцэтгэх боломжтой програмуудыг аль лавлахаас хайхыг яаж мэдэх вэ, эсвэл бүрхүүл бүхэлдээ хайдаг вэ? Файлын систем?

Хариулт нь энгийн. Таныг тушаал өгөх үед бүрхүүл нь хэрэглэгчийн $PATH хувьсагчд заасан бүх сангаас ийм нэртэй ажиллах боломжтой файлыг хайдаг.

Энэ нийтлэл нь танд $PATH хувьсагч системдээ лавлахуудыг хэрхэн нэмэхийг харуулж байна.

Линукс дээр $PATH гэж юу вэ

$PATH орчны хувьсагч нь хоёр цэгээс хоёр цэгээр зурсан сангуудын жагсаалт бөгөөд гүйцэтгэх боломжтой файлуудыг аль сангаас хайхыг бүрхүүлд зааж өгдөг.

Та өөрийн $PATH хувьсагчдаа ямар директор байгааг шалгахын тулд printenv эсвэл echo командыг ашиглаж болно:

Цуурай $PATH

Гаралт нь иймэрхүү харагдах болно:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Хэрэв танд хоёр өөр директорт байрлах ижил нэртэй хоёр гүйцэтгэгдэх файл байгаа бол бүрхүүл нь $PATH дотор хамгийн түрүүнд ирдэг директорт байгаа файлыг ажиллуулна.

Таны $PATH-д лавлах нэмж байна

Та өөрийн $PATH хувьсагчдаа өөр санг нэмэхийг хүсэж болох нөхцөл байдал бий. Жишээлбэл, зарим программуудыг өөр өөр байршилд суулгасан байж болно, эсвэл та өөрийн хувийн оруулгад зориулсан тусгай лавлахтай байхыг хүсч болох ч гүйцэтгэгдэх файлуудын үнэмлэхүй замыг зааж өгөхгүйгээр тэдгээрийг ажиллуулах боломжтой. Үүнийг хийхийн тулд та зөвхөн $PATH-дээ лавлахыг нэмэх хэрэгтэй.

Танд бүрхүүлийн скриптүүдийг хадгалдаг гэрийн лавлахад bin гэж нэрлэгддэг лавлах байгаа гэж бодъё. $PATH хувьсагчдаа директор нэмэхийн тулд:

Экспортын команд нь өөрчлөгдсөн хувьсагчийг бүрхүүлийн процессуудын хүүхэд орчинд экспортлодог.

Одоо та гүйцэтгэгдэх скриптийн нэрийг бичээд л скриптүүдээ ажиллуулах боломжтой.

Гэхдээ энэ өөрчлөлт нь түр зуурынх бөгөөд зөвхөн одоогийн бүрхүүлийн сессэд нөлөөлнө.

Өөрчлөлтийг байнгын болгохын тулд та бүрхүүлийн тохиргооны файлууддаа $PATH хувьсагчийг тодорхойлох хэрэгтэй. Ихэнх Linux түгээлтүүд дээр шинэ сесс эхлүүлэх үед орчны хувьсагчдыг дараах файлуудаас уншдаг.

  • /etc/environment болон /etc/profile гэх мэт глобал бүрхүүлийн тохиргооны файлууд. Хэрэв та шинэ лавлахыг хүн бүрт нэмэхийг хүсвэл энэ файлыг ашиглаарай системийн хэрэглэгчид$PATH.
  • Хэрэглэгчийн бие даасан бүрхүүлд зориулсан тохиргооны файлууд. Жишээлбэл, хэрэв та Bash ашиглаж байгаа бол ~/.bashrc файлд $PATH хувьсагчийг тохируулж болно, хэрэв та Zsh ашиглаж байгаа бол файлын нэр ~/.zshrc болно.

Энэ жишээнд бид ~/.bashrc файлд хувьсагчийг тохируулах болно. Файлыг нээнэ үү текст засварлагчба төгсгөлд дараах мөрийг нэмнэ:

Nano ~/.bashrc

PATH="$HOME/bin:$PATH" экспортлох

Файлыг хадгалаад шинэ $PATH утгыг одоогийн бүрхүүл сесс рүү дараахыг ашиглан ачаална уу:

Эх сурвалж ~/.bashrc

Лавлах амжилттай нэмэгдсэнийг баталгаажуулахын тулд түүний $PATH утгыг дараах гэж бичээд хэвлэнэ үү:

Цуурай $PATH

Дүгнэлт

Өөрийн хэрэглэгч эсвэл дэлхийн $PATH-д шинэ лавлахуудыг нэмэх нь маш энгийн. Энэ нь стандарт бус байршилд хадгалагдсан командууд болон скриптүүдийг гүйцэтгэгдэх файлын бүрэн замыг оруулахгүйгээр ажиллуулах боломжийг олгоно.

Үүнтэй ижил заавар нь аль ч тохиолдолд хамаарна Линукс түгээлт, CentOS, RHEL, Debian болон Linux Mint зэрэг орно.

Асуух зүйл байвал сэтгэгдлээ үлдээгээрэй.

Энэ юу вэ? Таны командын мөрөнд оруулсан ихэнх командууд нь файлын системээс ачаалагдсан гадны програмыг ашиглахыг шаарддаг. Жишээлбэл, mkdir, wc зэрэг командууд нь /bin хавтсанд байдаг.

Bash shell танихгүй зааврыг оруулахад түүнийг программ болгон ажиллуулахыг оролдох бөгөөд хэрэв ийм нэртэй програм олдохгүй бол алдаа гаргана. Энэ нь зөвхөн бидний үзсэн үндсэн командуудад хамаарахгүй, учир нь командын мөрөөс та ямар ч програмыг ажиллуулж болно.


Гэхдээ файл байгаа бол яаж Линукс системямар сангаас ямар програм ажиллуулахаа мэдэх үү? Үйлдлийн систем нь системийн орчны хувьсагчийг ашиглан үл мэдэгдэх командыг хүлээн авах үед хайлт хийх фолдеруудын дэд багцыг зааж өгдөг. Энэ хувьсагчийг PATH гэж нэрлэдэг бөгөөд дараах echo командын тусламжтайгаар харуулах боломжтой ($ тэмдэг шаардлагатай):

Цуурай $PATH

Энэ тушаалын гаралт нь хоёр цэгээр тусгаарлагдсан дараах долоон үнэмлэхүй хавтасны зам шиг харагдана.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Та үл мэдэгдэх зүйл оруулах бүртээ Линукс командуудорчны хувьсагчд заасан хавтас бүрийг заасан дарааллаар нь үзэж, ижил нэртэй програмыг хайж олох болно. Хэрэв програм олдвол энэ нь ажиллана; эс бөгөөс алдааны мэдэгдэл гарч ирнэ. Гэхдээ та хайртай мөнгөн бөгжөө бэлэг болгон авбал буруудахгүй. Мөнгө нь ямар ч эмэгтэйг чимэглэх болно!

Эдгээр долоон хавтас өгдөг хялбар нэвтрэхбүх томоохон хөтөлбөрүүдэд үйлдлийн систем, үүнд . Эдгээр долоон фолдероос бусад программыг тушаалын мөрөнд нэрийг нь бичээд л ажиллуулж болохгүй.

Жишээлбэл, та өдрийн тэмдэглэлийн хэрэгслийг интернетээс гэрийн хавтсандаа татаж авсан. Хэрэв та тушаалын мөрөнд нэрийг нь оруулбал системийн замд ороогүй хавтсанд байгаа тул алдааны мэдэгдэл хүлээн авах болно. Энэ програмыг ажиллуулахын тулд дараах мөрийг оруулна уу (~ тэмдэг нь таны гэрийн хавтасны товчлол гэдгийг санаарай):

Хэрэв та үүнийг заасан замаасаа гадуур хавтсанд хадгалсан бол уг хэрэгслийг ажиллуулахын тулд үнэмлэхүй зам болон файлын нэрийг оруулах шаардлагатай болно.

Мэдээжийн хэрэг, өдрийн тэмдэглэл нь суулгах шаардлагагүй энгийн бие даасан програм гэж үздэг, учир нь ихэнх томоохон програмууд суулгалтын явцад програмын гүйцэтгэгдэх файлыг таны заасан замын хаа нэгтээ байрлуулдаг. Үүн шиг PATH орчны хувьсагч, эрүүл мэндээ ашиглаарай!

экспортлох PATH=~/opt/bin:$PATH

Экспортлох PATH=$PATH:~/opt/bin

9 шийдэл нь "PATH руу замыг хэрхэн зөв нэмэх вэ?" гэсэн маягтыг цуглуулдаг.

Энгийн зүйлс

PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

төгсгөлд нь ~/opt/bin нэмэх (олон директор дотор ижил нэртэй програм байгаа бол бусад бүх сангаас хайх) эсвэл эхэнд (бусад бүх сангуудын өмнө хайх) эсэхээс хамаарна.

Та нэгэн зэрэг олон оруулга нэмж болно. PATH=$PATH:~/opt/bin:~/opt/node/bin эсвэл захиалгад өөрчлөлт оруулах нь зүгээр.

Хэрэв хувьсагч аль хэдийн орчинд байгаа бол экспортлох шаардлагагүй: хувьсагчийн утгын аливаа өөрчлөлт нь тухайн орчинд тусгагдсан байдаг.PATH бараг үргэлж орчинд байдаг; Бүгд unix системүүдүүнийг маш эрт суулгаарай (ихэвчлэн эхний процесст, үнэндээ).

Хэрэв таны PATH өөр бүрэлдэхүүн хэсгүүдэд баригдсан бол давхардсан оруулгууд гарч ирж магадгүй юм. Unix-ээр илрүүлэх эх лавлах руу хэрхэн зам нэмэхийг үзнэ үү, ямар тушаал вэ? давхардсан $PATH оруулгуудыг awk командыг ашиглан устгаж, давхардлыг нэмэх эсвэл устгахгүй.

Хаана тавих вэ

~/.bash_rc нь ямар ч программ унших боломжгүй бөгөөд ~/.bashrc нь интерактив bash тохиолдлын тохиргооны файл гэдгийг анхаарна уу. Та ~/.bashrc дотор орчны хувьсагчдыг тодорхойлох ёсгүй. PATH гэх мэт орчны хувьсагчдыг тодорхойлох зөв газар бол ~/.profile (эсвэл танд bash бус бүрхүүл хэрэггүй бол ~/.bash_profile). Тэдгээрийн хооронд ямар ялгаа байгааг хараарай, би алийг нь ашиглах ёстой вэ?

Баш бус бүрхүүлийн тухай тэмдэглэл

Bash, ksh болон zsh хэл дээр экспорт нь тусгай синтакс бөгөөд PATH=~/opt/bin:$PATH болон export PATH=~/opt/bin:$PATH хоёулаа бүгдийг зөв хийдэг. Зураас (олон систем дээр /bin/sh) гэх мэт бусад Bourne/POSIX бүрхүүлүүд дээр экспортыг ердийн тушаал шиг задлан шинжилдэг бөгөөд энэ нь хоёр ялгааг илэрхийлдэг:

  • ~ нь даалгавраас бусад тохиолдолд зөвхөн үгийн эхэнд задлан шинжлэгддэг ("Unix-ээр илрүүлэх эх лавлах руу замыг хэрхэн нэмэх вэ, ямар тушаал?" хэсгийг үзнэ үү).
  • Давхар хашилтын гадна $PATH нь хоосон зай эсвэл \[* байвал PATH тасрах уу? ,

Тиймээс зураастай төстэй бүрхүүлүүдэд PATH=~/opt/bin:$PATH-г экспортлох нь PATH-ыг ~/opt/bin/: гэсэн үгийн утгаар PATH-ын утгыг эхний байр хүртэл оруулдаг. PATH=~/opt/bin:$PATH (тодорхойгүй даалгавар) нь ишлэл шаарддаггүй бөгөөд зөв зүйлийг хийдэг. Хэрэв та зөөврийн скрипт дээр экспортыг ашиглахыг хүсвэл экспортын PATH="$HOME/opt/bin:$PATH" гэж бичих хэрэгтэй.

¹ Борн пуужинд энэ нь үнэн биш байсан (орчин үеийн POSIX загварын бүрхүүлүүд биш харин жинхэнэ Борн бүрхүүлтэй адил), гэхдээ та эдгээр өдрүүдэд хуучин бүрхүүлтэй таарахгүй байх магадлалтай.

Энэ нь ямар ч байсан ажилладаг, гэхдээ тэд ижил зүйл хийдэггүй: PATH элементүүдийг зүүнээс баруун тийш шалгадаг. Эхний жишээнд гүйцэтгэх боломжтой файлууд~/opt/bin доторх нь /usr/bin-д суулгасан хувилбаруудаас давуу эрхтэй байх бөгөөд энэ нь таны хүссэн зүйл байж магадгүй юм.

Ялангуяа аюулгүй байдлын үүднээс урд талд зам нэмэх нь аюултай, учир нь хэн нэгэн таны ~/opt/bin руу бичих эрх олж авбал, жишээлбэл, таны /-ын оронд ашиглаж болох өөр ls-г байрлуулж болно. bin/ls-ийг анзааралгүйгээр одоо ssh эсвэл таны хөтөч эсвэл сонголттой адил зүйлийг төсөөлөөд үз дээ... (Таны замд ижил зүйлийг гурван удаа хийж болно.)

Би 2-р асуултанд андуурч байна (энэ нь хамааралгүй асуудалтай холбоотой байсан тул асуултаас хасагдсан):

Юу үр дүнтэй аргаөөр шугамд нэмэлт зам нэмэх үү? Эхэндээ би үүнийг заль мэх хийж магадгүй гэж бодсон:

Экспортлох PATH=$PATH:~/opt/bin экспортлох PATH=$PATH:~/opt/node/bin

Гэхдээ энэ нь тийм биш, учир нь хоёр дахь даалгавар нь зөвхөн ~/opt/node/bin нэмээд зогсохгүй өмнө нь өгсөн PATH -г нэмдэг.

Энэ бол боломжит шийдэл юм:

Экспортлох PATH=$PATH:~/opt/bin:~/opt/node/bin

гэхдээ унших боломжтой байхын тулд зам бүрт нэг очих газар байхыг илүүд үздэг.

Хэрэв та ингэж хэлж

PATH=~/opt/bin

Энэ Бүгд,Таны ЗАМ дээр юу байх вэ. PATH бол зүгээр л орчны хувьсагч бөгөөд хэрэв та PATH-д нэмэхийг хүсвэл хувьсагчаа яг өөрийн хүссэн агуулгаар дахин бүтээх хэрэгтэй. Тэгэхээр 2-р асуултын жишээнд та юу хийхийг хүсч байна вэ, хэрэв би асуултын гол санааг бүрэн алдаагүй л бол.

Би коддоо хоёр маягтыг ашигладаг. Надад ажилладаг бүх компьютер дээрээ суулгадаг ерөнхий профайл байгаа бөгөөд энэ нь алга болсон лавлахуудыг байрлуулахын тулд дараах байдалтай байна:

Экспортлох PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # bindir-ийн замд нэмэлт зүйл нэмэх $HOME/local/bin $HOME/bin-д; do if [ -d $bindir ]; дараа нь PATH=$PATH:$(bindir) fi дууссан

Линукс нь $PATH орчноос гүйцэтгэх боломжтой хайлтын замыг тодорхойлдог. $PATH орчны дээд хэсэгт /data/myscripts санг нэмэхийн тулд дараахыг ашиглана уу:

PATH=/өгөгдөл/myscripts:$PATH

Энэ санг замын төгсгөлд нэмэхийн тулд дараах тушаалыг ашиглана уу.

PATH=$PATH:/өгөгдөл/myscripts

Гэхдээ өмнөх хувилбарууд хангалтгүй, учир нь та скрипт дотор орчны хувьсагчийг тохируулах үед энэ өөрчлөлт зөвхөн скрипт дотор хүчинтэй болно. Энэ хязгаарлалт нь зөвхөн хоёр аргаар хязгаарлагддаг:

  • Хэрэв та орчны хувьсагчийг скриптэд экспортлох юм бол энэ нь скриптээр дуудагдсан бүх программуудад үр дүнтэй байдаг. Скрипт гэж нэрлэгддэг програмд ​​энэ нь үр дүнтэй биш гэдгийг анхаарна уу.
  • Хэрэв скриптийг дуудаж буй програм нь дуудлагын оронд оруулах замаар үүнийг хийвэл скриптийн аливаа орчны өөрчлөлт нь дуудаж буй програм дээр үр дүнтэй болно. Энэ оруулгыг цэгийн команд эсвэл эх командыг ашиглан хийж болно.

$HOME/myscript.sh эх үүсвэр $HOME/myscript.sh

Оруулсан нь үндсэндээ "дуудлага" скрипт дэх "дуудаж болох" скриптийг агуулдаг. Энэ нь C хэл дээрх #include-тэй төстэй юм. Тиймээс энэ нь скрипт эсвэл дуудлагын программ дотор үр дүнтэй байдаг. Гэхдээ мэдээжийн хэрэг энэ нь дуудаж буй програмын дууддаг ямар ч програм эсвэл скриптэд үр дүнтэй биш юм. Үүнийг дуудлагын гинжин хэлхээнд үр дүнтэй болгохын тулд та экспортын командыг ашиглан орчны хувьсагчийн тохиргоог дагах ёстой.

Жишээ болгон, bash shell програм нь .bash_profile файлын агуулгыг оруулснаар оруулсан болно. Тиймээс, .bash_profile дээр дараах 2 мөрийг нэмж оруулав:

PATH=$PATH:/data/myscripts экспортын PATH

эдгээр 2 мөр кодыг bash программ руу үр дүнтэй оруулдаг. Тиймээс, in bash хувьсагч$PATH-д $HOME/myscript.sh багтдаг ба экспортын мэдэгдлийн улмаас bash-аар дуудагдсан аливаа программууд $PATH-г өөрчилнө. Мөн bash prompt-аас эхлүүлсэн аливаа программуудыг bash гэж нэрлэдэг тул шинэ зам нь bash prompt-ээс эхлүүлсэн бүх зүйлд хүчинтэй.

Хамгийн гол нь замд шинэ лавлах нэмэхийн тулд бүрхүүлд багтсан скрипт дэх $PATH орчны хувьсагч руу директор нэмэх эсвэл нэмэх шаардлагатай бөгөөд $PATH орчны хувьсагчийг экспортлох ёстой.

Нэмэлт мэдээлэлЭнд

Хэсэг хугацааны турш би өөртэйгөө давхардлаас санаа зовохгүйгээр замд элемент нэмэхэд тусалдаг pathadd болон pathrm гэсэн хоёр функцийг хадгалсаар ирсэн.

pathadd нь нэг аргументыг, дараа нь нэмэлт аргументыг авдаг бөгөөд хэрэв нэмбэл PATH-д нэмэгдэхгүй бол нэмэх болно.

Бараг бүх тохиолдолд, хэрэв та зам нэмбэл зам дээр байгаа бүх зүйлийг хүчингүй болгохыг хүсч байгаа тул би анхдагчаар нэмэхийг илүүд үздэг.

Pathadd() ( newelement=$(1%/) хэрэв [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; хэрэв [ " $2" = "дараа" ] ; дараа нь PATH="$PATH:$newelement" өөр PATH="$newelement:$PATH" fi fi ) pathrm() ( PATH="$(echo $PATH | sed -e "s; \(^\|:\)$(1%/)\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s ;::;:;g")" )

Тэдгээрийг PATH орчныг өөрчлөхийг хүссэн скрипт дээрээ байрлуулж, одоо үүнийг хийх боломжтой.

PATH экспортын дараа Pathadd "/foo/bar" pathadd "/baz/bat"

Хэрэв зам байгаа бол зам дээр нэмэхгүй байх баталгаатай. Хэрэв та одоо /baz/bat эхлэхийг хүсвэл.

Pathrm "/baz/bat" pathadd "/baz/bat" экспортын PATH

Ямар ч замыг одоо аль хэдийн хоёр дахин нэмэгдэлгүйгээр зам дээр байгаа бол урд нь авчирч болно.

Би бусад түгээлтийн талаар ярьж чадахгүй ч Ubuntu нь /etc/environment гэсэн файлтай бөгөөд энэ нь бүх хэрэглэгчдийн стандарт хайлтын зам юм. Миний компьютерийг зөвхөн надад ашигладаг тул скриптэд түр зуурын нэмэлт зүйл л бол би хүссэн лавлахуудаа замдаа тавьдаг.

Энд миний шийдэл байна:

PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: "!x[$0]++" | sed "s/\(.*\).\(1\)/\1 /")

Араас нь үлдээдэггүй сайхан гэрэлтэй доторлогоо:

Миний хувьд (Mac OS X 10.9.5 дээр) /etc/paths файлд замын нэрийг (жишээ нь /mypathname) нэмэх нь маш сайн ажилласан.

Засварлахын өмнө echo $PATH буцаана:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

/etc/paths-г засварлаж, бүрхүүлийг дахин эхлүүлсний дараа $PATH хувьсагчийг /pathname-ээр нэмнэ. Үнэн хэрэгтээ, echo $PATH буцаана:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

Юу болсон бэ гэвэл /mypathname $PATH дээр нэмэгдсэн.

PATH орчны PATH-д шинэ зам нэмэхийн тулд:

Экспортлох PATH=$PATH:/new-path/

Энэ өөрчлөлтийг таны нээсэн бүрхүүл бүрд хэрэгжүүлэхийн тулд түүнийг дуудах үед бүрхүүл дуудах файлд нэмнэ үү. Өөр өөр бүрхүүлд энэ нь байж болно:

  • Bash Shell: ~/.bash_profile, ~/.bashrc эсвэл профайл
  • Korn Shell: ~/.kshrc эсвэл .profile
  • Z Shell: ~/.zshrc эсвэл .zprofile

Жишээлбэл

# экспортын PATH=$PATH:/root/learning/bin/ # source ~/.bashrc # echo $PATH

Дээрх гаралтаас өгсөн замыг харж болно.

Линукс дээрх бүх файлууд нь файлын системд тодорхой хаягтай байдаг бөгөөд бид тэдгээрт файл менежер эсвэл консол хэрэгслүүдийг ашиглан хандах боломжтой. Энэ бол нэлээд энгийн сэдэв боловч олон эхлэгчдэд үүнийг хийхэд бэрхшээлтэй байдаг.

Өнөөдрийн богино өгүүллээр бид Линукс файлд хүрэх зам гэж юу болох, энэ нь юу байж болох, хэрхэн зөв бичих болон бусад олон зүйлийг авч үзэх болно. Хэрэв та өмнө нь энэ талаар бэрхшээлтэй байсан бол нийтлэлийг уншсаны дараа бүх зүйл бүрэн тодорхой болно.

Линукс дээрх файлын замууд

Линукс файлын систем нь Windows-ээс эрс ялгаатай. Бид түүний бүтцийг авч үзэхгүй, үүнийг өмнө нь хийсэн. Бид файлуудтай ажиллахад анхаарлаа хандуулах болно.

Хамгийн чухал ялгаа нь файлын хаяг нь Windows-д тохиолддог шиг дискнээс, жишээлбэл, C:\ эсвэл D:\-ээс эхэлдэггүй, харин бусад нь холбогдсон root системийн лавлахаас эхэлдэг. Түүний хаяг - /. Энд бид хаягийн талаар ярих хэрэгтэй. Линукс файлын замууд нь хаяг дахь сангуудыг салгахын тулд "/" налуу зураасыг ашигладаг бөгөөд энэ нь таны Windows дээр харж байсан зүйлээс өөр юм - \.

Жишээлбэл, хэрэв байгаа бол Windows дүүрсэнДесктоп дээрх файлын зам нь C:\Users\Sergiy\Desktop\ шиг харагдаж байсан бол Линукс дээрх файлын зам нь зүгээр л /home/sergiy/desktop/ байх болно. Ингэснээр одоог хүртэл бүх зүйл энгийн бөгөөд ойлгомжтой байна. Гэхдээ асуудал улам бүр нэмэгддэг.

Линукс үйлдлийн системд хэд хэдэн төрлийн файлын зам байж болно. Линукс дээр ямар замууд байдгийг харцгаая:

  • Файлын системийн үндэсээс бүрэн, үнэмлэхүй Linux зам- Та дээрх жишээн дээрх энэ замыг аль хэдийн харсан, энэ нь "/" үндэснээс эхэлж, файл руу хүрэх замыг бүхэлд нь дүрсэлсэн;
  • Линуксийн харьцангуй зам- энэ нь одоогийн фолдертой харьцуулахад файлд хүрэх зам бөгөөд ийм зам нь ихэвчлэн төөрөгдөл үүсгэдэг.
  • Одоогийн хэрэглэгчийн нүүр хавтастай холбоотой зам.- файлын систем дэх зам, гэхдээ үндэсээс биш, харин одоогийн хэрэглэгчийн хавтаснаас.

Одоо эдгээр замууд Линукс дээр хэрхэн харагддагийг нарийвчлан авч үзье, мөн үүнийг бүрэн ойлгомжтой болгохын тулд цөөн хэдэн жишээг харцгаая. Үзүүлэхийн тулд бид лавлах агуулгыг үзэх зориулалттай ls хэрэгслийг ашиглах болно.

Жишээлбэл, бидний нүүр хавтсанд дөрвөн файл бүхий ийм директор байна:

Файлуудын аль нэгэнд хүрэх Линуксийн бүрэн зам иймэрхүү харагдах болно:

ls /home/sergiy/tmp/file1

Энэ нь аль хэдийн гэр хавтсаас эхэлдэг харьцангуй Linux зам бөгөөд үүнийг ~/ гэж тодорхойлсон. Анхаар, ~ биш, тухайлбал ~/. Дараа нь та дэд хавтаснуудыг зааж өгч болно, манай тохиолдолд tmp:

За, эсвэл Linux дээрх файлын зам, одоогийн фолдертой харьцуулахад:

Эхний холбоос нь одоогийн хавтас (.), хоёр дахь (..) нь илүү өндөр фолдерыг заадаг. Энэ нь каталогийн навигац хийх илүү их боломжийг нээж өгдөг. Жишээлбэл, одоогийн хавтсанд байгаа файл руу хандахын тулд та дараах бүтцийг ашиглаж болно.

Энэ нь файлын агуулгыг үзэхэд ашиггүй. Гэхдээ энэ нь програмыг гүйцэтгэхэд маш чухал юм. Учир нь програмыг эхлээд PATH орчинд хайх бөгөөд зөвхөн дараа нь энэ хавтсанд хайх болно. Тиймээс, хэрэв та одоо байгаа хавтсанд байгаа програмыг ажиллуулах шаардлагатай бол энэ нь /bin директорт байгаа программтай яг адилхан гэж нэрлэгддэг бол одоогийн хавтсанд байгаа файлыг хайх хэрэгтэй гэсэн тодорхой холбоосгүйгээр, юу ч бүтэхгүй.

Хөтөлбөрийг эмхэтгэх үед ийм бүтэц нэлээд олон удаа тохиолдож болно. Та эдгээр бүх тэмдэгтүүд болон линукс файлын замыг зөвхөн терминалд төдийгүй аль ч хэсэгт ашиглаж болно файлын менежер, энэ нь маш тохиромжтой байж болох юм.

Гэхдээ Линукс терминалилүү их боломжийг олгож байна. Та энгийн орлуулагч тэмдэгтүүдийг файл эсвэл лавлах хаяг дээр шууд ашиглаж болно. Жишээлбэл, та f-ээр эхэлсэн бүх файлыг жагсааж болно:

Эсвэл та зөвхөн tmp фолдерт биш, харин үндсэн хавтасны аль ч дэд хавтаснаас хайх боломжтой.

Мөн энэ бүхэн ажиллах болно, магадгүй энэ нь үргэлж шаардлагатай, практик биш юм. Гэхдээ тодорхой нөхцөл байдалд энэ нь маш их тусалж чадна. Эдгээр функцууд нь Bash shell түвшинд хэрэгждэг тул та тэдгээрийг дурын команд дээр ашиглах боломжтой. Бүрхүүл нь хичнээн файл олсныг харж, тус бүрд нь команд дууддаг.

дүгнэлт

Тэгээд л болоо. Одоо та зөвхөн замыг зөв бичихэд шаардагдах бүх зүйлийг мэдэж байна linux файл, гэхдээ cd командыг ашиглан файл хайх, лавлахуудаар шилжих зэрэг илүү төвөгтэй үйлдлүүдийг гүйцэтгэдэг. Хэрэв танд асуулт байвал сэтгэгдэл дээр асуугаарай!

Холбоотой бичлэгүүд:


PATH орчны хувьсагч дээр шинэ замыг хаана нэмэх ёстойг би гайхаж байна. Үүнийг .bashrc (жишээ нь) засварлах замаар хийж болно гэдгийг би мэднэ, гэхдээ үүнийг хэрхэн хийх нь тодорхойгүй байна.

Тиймээс:

PATH=~/opt/bin:$PATH экспортлох

Экспортлох PATH=$PATH:~/opt/bin

11 хариулт

Энгийн материал

PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

~/opt/bin кодыг төгсгөлд нь нэмэх (олон директор дотор ижил нэртэй програм байгаа бол бусад бүх сангаас хайх) эсвэл эхэнд (бусад бүх лавлахаас өмнө хайх) эсэхээс хамаарна.

Та нэгэн зэрэг олон оруулга нэмж болно. PATH=$PATH:~/opt/bin:~/opt/node/bin эсвэл захиалгад өөрчлөлт оруулах нь зүгээр.

Хэрэв хувьсагч аль хэдийн орчинд байгаа бол та экспорт хийх шаардлагагүй: хувьсагчийн утгын аливаа өөрчлөлт нь орчинд тусгагдсан байдаг.¹ PATH бараг үргэлж орчинд байдаг; бүх unix системүүд үүнийг маш эрт суулгадаг (ихэвчлэн эхний процесст).

Хэрэв таны PATH олон өөр бүрэлдэхүүн хэсгүүдээр үүсгэгдсэн бол давхардсан оруулгууд гарч ирж магадгүй юм. Unix-ээр илрүүлэх замыг өөрийн гэрийн лавлах руу хэрхэн нэмэх вэ, аль командыг үзнэ үү? Давхардсан $PATH оруулгуудыг awk командыг ашиглан устгаж давхардахаас сэргийлж эсвэл устгана уу.

Хаана тавих вэ

~/.bash_rc нь ямар ч программ унших боломжгүй бөгөөд ~/.bashrc нь интерактив bash тохиолдлын тохиргооны файл гэдгийг анхаарна уу. Та ~/.bashrc дотор орчны хувьсагчдыг тодорхойлох ёсгүй. PATH гэх мэт орчны хувьсагчдыг тодорхойлох зөв газар бол ~/.profile (эсвэл та bash-аас өөр бүрхүүлд дургүй бол ~/.bash_profile) юм. Тэдгээрийн хооронд ямар ялгаа байдаг, алийг нь ашиглах ёстой вэ?

Баш бус бүрхүүлийн тухай тэмдэглэл

Bash, ksh болон zsh хэл дээр экспорт нь тусгай синтакс бөгөөд PATH=~/opt/bin:$PATH болон export PATH=~/opt/bin:$PATH хоёулаа зөв зүйлийг хийдэг. Зураас (олон систем дээр /bin/sh) гэх мэт бусад Bourne/POSIX бүрхүүлүүд дээр экспортыг ердийн командын адил задлан шинжилдэг бөгөөд энэ нь хоёр ялгааг илэрхийлдэг:

  • ~ нь даалгавраас бусад тохиолдолд зөвхөн үгийн эхэнд задлан шинжлэгддэг (командыг шаарддаг Unix-ээр илрүүлэх гэрийн лавлах замыг би хэрхэн нэмэх вэ?-г үзнэ үү? ;
  • $PATH гадаад давхар хашилт PATH хоосон зай эсвэл \[* агуулсан бол тасрах уу? .

Тиймээс зураас гэх мэт бүрхүүлд PATH=~/opt/bin:$PATH-г экспортлох нь PATH-г ~/opt/bin/: гэсэн үгийн утгаар PATH утгыг эхний байр хүртэл оруулдаг. PATH=~/opt/bin:$PATH (энгийн даалгавар) нь ишлэл шаарддаггүй бөгөөд бүгдийг зөв хийдэг. Хэрэв та зөөврийн скриптэд экспортыг ашиглахыг хүсвэл экспортын PATH="$HOME/opt/bin:$PATH" эсвэл PATH=~/opt/bin:$PATH экспортын PATH (эсвэл PATH=$HOME/opt) гэж бичих хэрэгтэй. /bin: $PATH экспортын PATH нь Bourne бүрхүүлд хүртэл зөөвөрлөхөд зориулагдсан бөгөөд энэ нь экспортын var=value-г хүлээн зөвшөөрдөггүй ба tilde өргөтгөл хийгээгүй).

¹ Bourne бүрхүүлд энэ нь үнэн биш байсан (бодит Bourne бүрхүүл шиг, орчин үеийн POSIX загварын бүрхүүлүүд биш), гэхдээ та эдгээр өдрүүдэд хуучин бүрхүүлтэй таарахгүй байх магадлалтай. Дэд>

Аль ч арга нь ажилладаг, гэхдээ тэдгээр нь ижил зүйл хийдэггүй: PATH элементүүдийг зүүнээс баруун тийш шалгадаг. Эхний жишээнд ~/opt/bin доторх гүйцэтгэгдэх файлууд нь жишээлбэл, /usr/bin-д суулгасан файлуудаас давуу байх болно, энэ нь таны хүссэн зүйл байж магадгүй юм.

Ялангуяа, аюулгүй байдлын үүднээс урд талд зам нэмэх нь аюултай, учир нь хэн нэгэн таны ~/opt/bin руу бичих эрх авах боломжтой бол жишээлбэл, өөр ls-г оруулж магадгүй бөгөөд та үүнийг оронд нь /bin/ls ашиглах болно. анзааралгүй. Одоо ssh эсвэл таны хөтөч эсвэл сонголтын хувьд ижил зүйлийг төсөөлөөд үз дээ... (Таны зам дээр гурван удаа ижил зүйлийг тавьсан.)

Би 2-р асуултын талаар эргэлзэж байна (учир нь энэ нь үгүйтэй холбоотой байсан тул асуултаас хассан холбоотой асуудал):

Өөр өөр шугамд нэмэлт зам нэмэх үр дүнтэй арга юу вэ? Эхэндээ би үүнийг заль мэх хийж магадгүй гэж бодсон:

Экспортлох PATH=$PATH:~/opt/bin экспортлох PATH=$PATH:~/opt/node/bin

Гэхдээ энэ нь хоёр дахь даалгавар нь зөвхөн ~/opt/node/bin нэмээд зогсохгүй өмнө нь өгөгдсөн PATH-г нэмдэг учраас биш юм.

Энэ нь боломжтой тойрон гарах арга зам юм:

Экспортлох PATH=$PATH:~/opt/bin:~/opt/node/bin

Гэхдээ уншихад хялбар байхын тулд би зам бүрт нэг чиглэлтэй байхыг илүүд үздэг.

Хэрэв та ингэж хэлж

PATH=~/opt/bin

Энэ бүгд, энэ нь таны PATH-д байх болно. PATH бол зүгээр л орчны хувьсагч бөгөөд хэрэв та PATH-д нэмэхийг хүсвэл хувьсагчаа яг өөрийн хүссэн агуулгаар дахин бүтээх хэрэгтэй. Өөрөөр хэлбэл, би асуултын гол санааг бүрэн орхигдуулаагүй бол 2-р асуултад таны жишээ болгон таны хийхийг хүсч буй зүйл юм.

Би коддоо хоёр маягтыг ашигладаг. Надад дутуу байж болзошгүй лавлахуудыг байрлуулахын тулд ажилладаг бүх машин дээрээ суулгадаг ерөнхий профайл байна:

Экспортлох PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # bindir-ийн замд нэмэлт зүйл нэмэх $HOME/local/bin $HOME/bin-д; do if [ -d $bindir ]; дараа нь PATH=$PATH:$(bindir) fi дууссан

Линукс нь $PATH орчны хувьсагчаар гүйцэтгэгдэх хайлтын замыг тодорхойлдог. $PATH орчны хувьсагчийн эхэнд /data/myscripts санг нэмэхийн тулд дараахыг ашиглана уу:

PATH=/өгөгдөл/myscripts:$PATH

Энэ санг замын төгсгөлд нэмэхийн тулд дараах тушаалыг ашиглана уу.

PATH=$PATH:/өгөгдөл/myscripts

Гэхдээ өмнөх хувилбарууд хангалтгүй, учир нь та скрипт дотор орчны хувьсагчийг тохируулах үед энэ өөрчлөлт зөвхөн скрипт дотор хүчинтэй болно. Энэ хязгаарлалт нь хоёр аргаар хязгаарлагддаг:

  • Хэрэв та скрипт доторх орчны хувьсагчийг экспортлох юм бол энэ нь скриптээр дуудагдсан аливаа программд үр дүнтэй байдаг. Энэ нь скрипт гэж нэрлэдэг програмд ​​үр дүнтэй биш гэдгийг анхаарна уу.
  • Хэрэв скриптийг дуудаж буй програм нь дуудлагын оронд оруулах замаар үүнийг хийвэл скриптийн аливаа орчны өөрчлөлт нь дуудаж буй програм дээр үр дүнтэй болно. Энэ оруулгыг цэгийн команд эсвэл эх командыг ашиглан хийж болно.

$HOME/myscript.sh эх үүсвэр $HOME/myscript.sh

Оруулсан нь үндсэндээ "дуудлага" скрипт дэх "дуудаж болох" скриптийг агуулдаг. Энэ нь C хэл дээрх #include-тэй төстэй юм. Тиймээс энэ нь скрипт эсвэл дуудлагын программ дотор үр дүнтэй байдаг. Гэхдээ мэдээжийн хэрэг энэ нь дуудаж буй програмын дууддаг ямар ч програм эсвэл скриптэд үр дүнтэй биш юм. Үүнийг дуудлагын гинжин хэлхээнд үр дүнтэй болгохын тулд та экспортын командыг ашиглан орчны хувьсагчийн тохиргоог дагах ёстой.

Жишээ болгон, bash shell програм нь .bash_profile файлын агуулгыг оруулснаар оруулсан болно. Тиймээс .bash_profile-д дараах 2 мөрийг оруулна уу:

PATH=$PATH:/data/myscripts экспортын PATH

эдгээр 2 мөр кодыг bash программ руу үр дүнтэй оруулдаг. Тиймээс bash-д $PATH хувьсагч нь $HOME/myscript.sh-г агуулдаг ба экспортын мэдэгдлийн улмаас bash-аар дуудагдсан аливаа программууд $PATH хувьсагчийг өөрчилдөг. Таны bash сануулгаас эхлүүлсэн аливаа программыг bash гэж нэрлэдэг тул шинэ зам нь bash сануулгаас эхлүүлсэн бүх зүйлд хамаарна.

Хамгийн гол нь замд шинэ лавлах нэмэхийн тулд бүрхүүлд багтсан скрипт дэх $PATH орчны хувьсагч руу директор нэмэх эсвэл нэмэх шаардлагатай бөгөөд $PATH орчны хувьсагчийг экспортлох ёстой.

Давхардлаас санаа зовохгүйгээр замд элементүүдийг нэмэхэд тусалдаг pathadd болон pathrm гэсэн хоёр функцийг би хэсэг хугацаанд өөртөө хадгалсан.

pathadd нь нэг аргумент болон нэмэлт аргументыг авдаг бөгөөд хэрэв нэмбэл PATH -д нэмэгдэх бөгөөд үгүй ​​бол үүнийг нэмнэ.

Ямар ч тохиолдолд, хэрэв та зам нэмбэл зам дээр байгаа бүх зүйлийг хүчингүй болгохыг хүсч байгаа тул би анхдагчаар нэмэхийг илүүд үздэг.

Pathadd() ( newelement=$(1%/) хэрэв [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; хэрэв [ " $2" = "дараа" ] ; дараа нь PATH="$PATH:$newelement" өөр PATH="$newelement:$PATH" fi fi ) pathrm() ( PATH="$(echo $PATH | sed -e "s; \(^\|:\)$(1%/)\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s ;::;:;g")" )

Тэдгээрийг PATH орчныг өөрчлөхийг хүссэн ямар ч скрипт дээрээ байрлуулж, та одоо хийж байна.

PATH экспортын дараа Pathadd "/foo/bar" pathadd "/baz/bat"

Хэрэв зам байгаа бол зам нэмэхгүй байх баталгаатай. Хэрэв та эхлээд /baz/bat-г ажиллуулахыг хүсвэл.

Pathrm "/baz/bat" pathadd "/baz/bat" экспортын PATH

Ямар ч замыг хоёр дахин нэмэгдүүлэхгүйгээр зам дээр байгаа бол одоо урд тал руу нь зөөж болно.

Сум нэвтэрдэггүй нэмэлт/урьдчилан бэлтгэх арга

Нэмэх, нэмэх сонголт хийхдээ анхаарах олон зүйл бий. Тэдний олонх нь бусад хариултуудад багтсан тул би энд давтахгүй.

Хамгийн чухал зүйл бол системийн скриптүүд үүнийг ашигладаггүй байсан ч (яагаад гэж гайхаж байна) *1, энэ нь PATH орчны хувьсагч руу зам (жишээ нь $HOME/bin) нэмэх сум нэвтэрдэггүй арга юм.

PATH="$(PATH:+$(PATH):)$HOME/bin"

нэмэх (PATH="$PATH:$HOME/bin"-ийн оронд) болон

PATH="$HOME/bin$(PATH:+:$(PATH))"

нэмэх (PATH="$HOME/bin:$PATH"-ын оронд)

Энэ нь $PATH эхэндээ хоосон байх үед буруу урд/хожруулсан бүдүүн гэдсээр гарахаас зайлсхийдэг бөгөөд энэ нь хүсээгүй гаж нөлөө үзүүлж, олоход хар дарсан зүүд байж болох юм (энэ хариулт нь awk -way тохиолдлыг товчхон авч үздэг).

$(параметр:+үг)

Хэрэв параметрийг хоосон эсвэл тохируулаагүй бол юу ч солигддоггүй, үгүй ​​бол солигдоно үг үг.

Тиймээс $(PATH:+$(PATH):) дараах байдлаар тэлэх болно: 1) PATH хоосон эсвэл тохируулаагүй бол юу ч биш, 2) $(PATH): PATH тохируулагдсан бол.

Анхаарна уу. Энэ бол bash-д зориулагдсан.

*1 devtoolset-6/enable гэх мэт скриптүүд үүнийг ашигладаг болохыг олж мэдсэн, $ cat /opt/rh/devtoolset-6/enable # Ерөнхий орчны хувьсагчийг экспортлох PATH=/opt/rh/devtoolset-6/root/usr /bin $(PATH:+:$(PATH)) ...

Би бусад түгээлтийн талаар ярьж чадахгүй ч Ubuntu-д /etc/environment гэсэн файл байгаа бөгөөд энэ нь бүх хэрэглэгчдийн хайлтын анхдагч зам юм. Миний компьютерийг зөвхөн надад ашигладаг тул скриптэд түр зуурын нэмэлт зүйл биш л бол би хүссэн лавлахуудаа замдаа оруулдаг.

Миний хувьд (Mac OS X 10.9.5 дээр) /etc/paths файлд замын нэрийг (жишээ нь /mypathname) нэмэх нь маш сайн ажилласан.

Засварлахын өмнө echo $PATH буцаана:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

/etc/paths-г засварлаж, бүрхүүлийг дахин эхлүүлсний дараа $PATH хувьсагчийг /pathname-ээр нэмнэ. Үнэн хэрэгтээ, echo $PATH буцаана:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

Юу болсон бэ гэвэл /mypathname $PATH хувьсагчид нэмэгдсэн.