Command shell sa UNIX. Tungkol sa iba't ibang Linux at Unix shell

Anotasyon: Ang konsepto ng isang command shell. Pangkalahatang-ideya ng mga shell ng command. Bash command shell. Mga tampok ng pagpapatakbo (kasaysayan ng utos, operator "!", mga aksyon sa pamamagitan ng pagpindot sa isang key ). Multitasking sa console. Mga gawain. Pamamahala ng trabaho. Mga variable ng kapaligiran ng kumander ng hatinggabi

Pag-unlad ng aralin

1. Sa mundo ng Linux at Unix, ang pagtatrabaho sa isang computer ay hindi mapaghihiwalay na nauugnay sa konsepto command shell– isang programa na nagpapahintulot sa gumagamit na makipag-ugnayan sa system sa pamamagitan ng pagpasok at pagpapatupad ng mga utos. gayunpaman, command shell ay isang regular na programa. Mapapatunayan mo ito sa pamamagitan ng pagtatakda ng default na shell sa file passwd isa pang programa para sa gumagamit. Ngunit upang malaman ito ng system bilang isang shell, kailangan mong idagdag ang ganap na filename sa /etc/shells.

Ang Linux ay may ilang mga command shell, ang kanilang komposisyon ay maaaring mag-iba depende sa pamamahagi, ngunit palagi mong mahahanap ang:

Bourne Shell (sh) - ang pinakaluma at pinakakaraniwan command shell para sa mga sistema ng Unix. Walang isang Unix system kung saan hindi ito ginagamit.

Bourne Again Shell (bash) – isang pinahabang Bourne Shell. Ito ay may maraming kaaya-ayang mga pakinabang, na kung kaya't ito ay naging napakapopular kamakailan. Ito ang default na shell para sa halos lahat ng distribusyon ng Linux.

Gayundin ang mga sikat na shell ay:

csh– shell, ang command system na malapit sa C programming language

Ang tcsh ay isang shell na ang command system ay malapit sa Tcl programming language.

Ang zsh ay isang shell na marahil ay may pinakamalawak na kakayahan. Ito ay extension ng sh (bourne shell).

Dahil ang Linux ay gumagamit ng bash bilang default, pag-uusapan natin ito.

2. Command shell Ang bash ay orihinal na malayang ipinamahagi na bersyon ng Bourne Shell. Kasunod nito, nang lumago ang mga kakayahan nito, nagsimula itong ituring na isang malayang produkto. Ang mga pangunahing tampok ng bash ay ang mga sumusunod:

Talahanayan 1.1.
Pagkakataon Komento
1 Pag-edit ng isang linya Kakayahang i-edit ang ipinasok na command sa halip na muling isulat ito muli
2 Organisasyon ng mga channel Pagkakataon I/O redirection, pag-aayos ng mga channel sa pagitan ng mga ginanap na gawain
3 Dali ng paggamit Paggamit ng mga alias ng command, history ng command, autocompletion
4 Pamamahala ng trabaho Kakayahang lumikha at pamahalaan ang mga trabaho sa background
5 Flexibility ng pagpapasadya Gamit ang bawat user login script file, environment variable

Titingnan natin ang I/O redirection at pipe mamaya sa Aralin 8. Samakatuwid, aalisin namin ang puntong ito. Ngunit pag-usapan natin nang mas detalyado ang tungkol sa mga tampok ng pagtatrabaho sa bash at ang mga pakinabang na ibinibigay nito.

Awtomatikong isinusulat ng Bash ang lahat ng command na na-type ng user sa isang file ~/.bash_history. Para pamahalaan ang file na ito, gamitin ang history command. ang kasaysayan ay builtin na utos bash. Iyon ay, walang maipapatupad na file na naaayon sa utos na ito. Ang sarili niya command shell nagsasagawa ng lahat ng mga aksyon. Ipinasok nang walang mga parameter, inililista lang nito ang lahat ng mga command na nakaimbak sa file na ito at kapareho ng cat ~/.bash_history command.

Umiiral ang kasaysayan ng command upang pasimplehin ang hanay ng mga karaniwang ginagamit na command. Ang kasaysayan ng mga utos ay maaaring pagbukud-bukurin sa pamamagitan ng listahan gamit ang mga susi <вверх>At<вниз> .

Ang isa pang paraan ay ang pag-type! at simulan ang command at pindutin . Ang huling utos mula sa kasaysayan, ang mga unang titik na tumutugma sa mga nai-type, ay isasagawa. Halimbawa:

$ !/usr /usr/bin/perl ./ptest.pl OK $ !xfonts bash: !xfonts: event not found $

Ngunit paano natin mapapabilis ang pag-input kung ang kasaysayan ay hindi pa naglalaman ng utos na kailangan natin? Sa kasong ito, tutulungan tayo ng susi . Pagkatapos i-type ang unang ilang titik ng command (o file path), pindutin At Bash ay awtomatikong makukumpleto ang iyong command (o elemento ng landas). Kung maraming file ang angkop o walang file na angkop, magbibigay ang system ng sound signal. Kung ang pindutan pindutin muli, pagkatapos kapag maraming mga file ang lumabas, magpapakita ang system ng isang listahan, at kapag wala, uulitin nito ang sound signal

3. Mula sa unang aralin, dapat mong tandaan na ang Linux ay isang multitasking na kapaligiran. Gayunpaman, hanggang ngayon ay hindi mo pa nasusulit ang multitasking nito. Sa unang sulyap, tila hindi ka pinapayagan ng console na gamitin ang mga multitasking na kakayahan ng system, at sa isang graphical na kapaligiran lamang maaari kang magpatakbo ng dalawa o higit pang mga programa nang sabay-sabay. Ngunit hindi iyon totoo! Ang console ay multitasking din.

Una, maaari mong buksan ang ilang mga console sa pamamagitan ng pagbubukas ng isang programa sa bawat isa sa kanila. Ang paglipat sa pagitan ng mga console ay gagawin gamit ang mga susi Ctrl+ , Saan x– numero ng console.

At kahit sa isang console, gamit ang mga utos sa pamamahala ng trabaho, maaari mong samantalahin nang husto ang multitasking system.

– isang key combination na nagpapadala ng hindi matukoy na signal sa proseso sigstop. Binibigyang-daan kang ihinto ang pagpapatupad ng isang proseso upang ilipat ang kontrol sa command line.

command & – ang & simbolo pagkatapos ng command ay nagpapahintulot sa iyo na patakbuhin ito sa background.

mga trabaho – nagpapakita ng listahan ng kasalukuyang mga trabaho sa shell.

bg<#j>– inilalagay ang trabaho #j sa background. Bago ito, ang gawain ay dapat na ihinto gamit ang isang key na kumbinasyon . Kung sa ngayon ang interpreter ay mayroon lamang isang gawain, kung gayon ang numero ay hindi kailangang tukuyin.

fg<#j>– inilalagay ang trabaho #j sa foreground execution mode. Ang trabaho ay dapat na ihinto sa pamamagitan ng isang key na kumbinasyon o nasa background. Kung sa ngayon ang interpreter ay mayroon lamang isang gawain, kung gayon ang numero ay hindi kailangang tukuyin.

$ man bash ^Z + Huminto ang man bash $ vim ^Z vim + Huminto ang vim $ bg 1 + man bash at $ trabaho + Huminto ang man bash + Huminto ang vim $ fg 2 + vim $ fg + man bash $

4. Mga variable ng kapaligiran– impormasyon ng system na nagsasaad ng iyong mga kagustuhan, tulad ng text editor default, mga path ng paghahanap para sa mga executable na file, atbp., pati na rin ang mga kredensyal ng user, system, at shell gaya ng Username, bersyon ng Linux, atbp., na ginagamit ng command interpreter at iba pang mga program.

Ang mga madalas na ginagamit na variable ng user ay:

PATH – ang variable ay naglalaman ng mga path kung saan dapat maghanap ang system ng mga executable na file kung buo o kamag-anak na landas sa kanila.

PWD – ang variable ay naglalaman ng buong pangalan ng kasalukuyang direktoryo.

HOME - naglalaman ang variable ng buong landas home directory ng user.

HOSTNAME – naglalaman ang variable ng pangalan ng computer.

LOGNAME – naglalaman ng Username

SHELL – naglalaman ng pangalan ng command shell na tumatakbo sa kasalukuyang session.

USER - naglalaman ng Username, na ang session ay bukas na ngayon.

Ang listahan ng mga variable na naka-install sa system ay makikita gamit ang export command, na ipinasok nang walang mga parameter.

Ang bash command interpreter ay mayroon ding sariling mga variable. Para maging mga variable ng system ang mga lokal na variable, dapat itong i-export gamit ang parehong command sa pag-export Halimbawa:

$ export declare -x HOME="/home/gserg" declare -x HOSTNAME="WebMedia" declare -x LANG="ru_RU.KOI8-R" declare -x LOGNAME="gserg" declare -x PATH="/bin: /usr/bin:/usr/local/bin:/home/gserg/bin" declare -x PWD="/home/gserg" declare -x SHELL="/bin/bash" declare -x TERM="Eterm" declare -x USER="gserg" $ EDITOR=/bin/vim $ export EDITOR $ export declare -x EDITOR="/bin/vim" declare -x HOME="/home/gserg" declare -x HOSTNAME="WebMedia" declare -x LANG="ru_RU.KOI8-R" declare -x LOGNAME="gserg" declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" declare - x PWD="/home/gserg" ipahayag -x SHELL="/bin/bash" ipahayag -x TERM="Eterm" ipahayag -x USER="gserg" $

Koponan hindi nakatakda tinatanggal ang isang variable ng system. Halimbawa:

$ unset EDITOR $ export declare -x HOME="/home/gserg" declare -x HOSTNAME="WebMedia" declare -x LANG="ru_RU.KOI8-R" declare -x LOGNAME="gserg" declare -x PATH=" /bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" declare -x PWD="/home/gserg" declare -x SHELL="/bin/bash" declare -x TERM= Idineklara ng "Eterm" -x USER="gserg" $

5. Sa aralin ngayon ay ipakikilala namin sa iyo ang isa pang, bahagyang hindi pamantayan, command shell Midnight commander. Ay hindi command shell sa karaniwang kahulugan. Ito ay isang text file manager - analogue Komandante ng Norton o Malayo. Midnight commander inilunsad gamit ang mc command. Pag-uusapan natin ang mga kakayahan nito.

Screen Midnight commander nahahati sa dalawang bahagi. Halos ang buong espasyo ng screen ay inookupahan ng dalawang panel na may listahan ng mga direktoryo at file. Bilang default, ang pangalawang linya mula sa ibaba ng screen ay ang command line, kung saan maaari kang magpatakbo ng mga regular na shell command, at ang ilalim na linya ay nagpapakita ng mga function key prompt ( F1-F10). Ang tuktok na linya ng mga simbolo ay naglalaman ng isang menu kung saan maaari kang magsagawa ng maraming mga function. Upang gamitin ang menu, maaari mong i-click ang mouse sa nais na item o pindutin ang isang key F9 at gamit ang mga susi kontrol ng cursor piliin ang gustong item.

Mga panel Midnight commander magbigay ng pagtingin sa dalawang direktoryo nang sabay-sabay. Ang isa sa mga panel ay aktibo (sa kahulugan na ang gumagamit ay maaaring magsagawa ng ilang mga aksyon sa mga file at direktoryo na matatagpuan dito). Sa aktibong panel, ang pangalan ng isa sa mga file o direktoryo ay naka-highlight, at ang pamagat ng panel sa tuktok na linya ay naka-highlight sa kulay. Ang pangalan ng pamagat ay kapareho ng pangalan ng direktoryo na kasalukuyang ipinapakita. Halos lahat ng mga operasyon ay ginagawa sa aktibong panel. Ang ilang mga operasyon tulad ng paglilipat o pagkopya ng mga file gumamit ng passive panel bilang isang lugar kung saan ginagawa ang pagkopya, paglilipat, atbp.

Ngayon ay pag-usapan natin ang mga pangunahing keyboard shortcut na makakatulong sa iyong magtrabaho Midnight commander.

ang mga key ay ginagamit upang baguhin ang aktibong panel o +

para markahan ang isang file, i-click o +

i-click para sa tulong

tatawagan ang file viewer

sa pamamagitan ng paggamit i-edit mo ang file

ay magbibigay-daan sa iyo na kopyahin ang .

ilipat o palitan ang pangalan ng file

lumikha ng direktoryo

Susi ay magbibigay-daan sa iyong magtanggal ng file at/o direktoryo

, tulad ng nabanggit na, nagbubukas ng access sa menu.

- ay magbibigay-daan sa iyo upang makakuha ng out sa Midnight commander.

ililipat ang pointer sa simula ng listahan ng mga file,

- sa kabaligtaran - hanggang sa dulo ng listahan.

At ay babaguhin ang posisyon ng indicator sa pahina pataas at pababa ayon sa pagkakabanggit.

Susi <*> sa isang karagdagang keyboard ay magbibigay-daan sa iyo na baligtarin ang pagpili ng mga file (hindi ito nakakaapekto sa mga direktoryo)

Susi <+> sa karagdagang keyboard ay magbibigay-daan sa iyo upang markahan ang mga file sa pamamagitan ng mask, at <-> alisin ang marka ng mga file sa pamamagitan ng mask.

+ - i-update ang mga nilalaman ng direktoryo (sa pamamagitan ng muling pagbabasa mula sa disk o mula sa network)

+ - palitan ang kanan at kaliwang panel.

+ - alisin/ibalik ang mga panel.

Bagama't ang mga keyboard shortcut ay ang pinakamainam na tool para matapos ang trabaho Midnight commander bilang mabilis at maginhawa hangga't maaari, medyo mahirap para sa mga nagsisimula na matutunan ang mga ito nang sabay-sabay. Upang punan ang puwang na ito at magdagdag ng iba pang mga kakayahan na kulang sa mga keyboard shortcut, Midnight commander ay may menu (matatawagan ng F9).

Ang menu ay binubuo ng mga item: "Left Pane", "File", "Command", "Settings", "Right Pane".

"Kaliwa/Kanang Panel"- ang mga item sa menu na ito ay eksaktong pareho. Ang tanging pagkakaiba sa pagitan ng mga ito ay ang mga aksyon na isinagawa ay matutugunan sa kaliwa o kanang panel.

"Format ng Listahan"- nagbubukas ng dialog box kung saan maaari mong piliin ang view kung saan ipapakita ang listahan ng mga file/directory. Mayroong karaniwang, maikli at pinahabang mga format na mapagpipilian. Gayunpaman, ang user sa window na ito ay maaaring matukoy mismo ang uri ng panel na nababagay sa kanya sa pamamagitan ng pagpili sa switch na "Tukoy ng User".

"Mabilis na View"- inilalagay ang panel sa awtomatikong mode ng pagtingin para sa mga file na napili sa katabing panel. Awtomatikong lumilipat ang focus sa kabaligtaran na panel.

"Impormasyon"- inililipat ang panel upang tingnan ang impormasyon tungkol sa file na naka-highlight sa katabing panel, tulad ng posisyon, mga pahintulot at may-ari, file system at ang device kung saan ito matatagpuan, ang bilang ng mga hard link na nauugnay sa file na ito, pati na rin ang impormasyon tungkol sa device kung saan matatagpuan ang file.

"puno"- nagsasalin Midnight commander sa isang mode na katulad ng operating mode ng Explorer mula sa OS Windows. Sa panel kung saan inilapat ang utos "puno", isang puno ng direktoryo ay binuo, na maaaring i-navigate gamit ang mga arrow kontrol ng cursor, mga susi PageUp, PageDown, Home, End. Ang katabing panel ay nagpapakita ng mga nilalaman ng direktoryo na naka-highlight sa puno.

"Pag-aayos ng pagkakasunud-sunod"- nagbubukas ng isang dialog box kung saan maaari kang pumili ng isang katangian kung saan ang mga file at direktoryo ay pagbukud-bukurin sa isang listahan tulad ng pangalan, extension, oras ng pag-edit, oras ng pag-access, oras ng pagbabago ng katangian, laki, node (kung saan matatagpuan ang file) . Maaari mo ring iwanan ang mga file na hindi inayos, pag-uri-uriin ang mga ito sa case sensitive, o pag-uri-uriin ang mga ito sa reverse order.

"Salain"- nagpapahintulot sa iyo na pumili ng mga pangalan ng file na ipapakita sa panel gamit ang isang regular na expression na ipinasok sa dialog box.

"Koneksyon sa FTP"- gamit ang command na ito maaari kang magtatag ng isang koneksyon sa isang remote (o kahit na lokal) na computer gamit ang protocol ftp. Kung ang remote server address lamang ang ipinasok, kung gayon Midnight commander susubukan na magtatag ng hindi kilalang koneksyon. Ang buong linya kung saan tinukoy ang node ay:

ftp:user_name:password@server_address:port/directory_on_server

Matapos maitatag ang koneksyon, makipagtulungan sa malayuang sistema ng file gumagana katulad ng pagtatrabaho sa isang lokal na FS.

"Koneksyon sa shell"- nagbibigay-daan sa iyong magbukas ng koneksyon sa network gamit ang protocol ISDA (Paglipat ng FIle sa ibabaw ng SHell– paglilipat ng file sa pamamagitan ng shell). ISDA gumagamit ng mga protocol RSH (Remote SHell– inalis na shell) o SSH (Secure na Shell– protektadong shell, analogue RSH, ngunit may suporta para sa pag-encrypt ng ipinadalang data). Ang kumpletong string kung saan maaaring tukuyin ng user ang remote na node ay:

sh:user_name@server_address:options/directory_on_server

Parameter Username, mga opsyon at directory_on_server hindi kailangan. Kung Username hindi tinukoy, kung gayon Midnight commander ay susubukang mag-log on sa remote system gamit ang username na ginamit sa lokal na computer.

"Baguhin"- analogue ng isang pangunahing kumbinasyon + - nagiging sanhi ng pag-update ng listahan ng mga file at direktoryo sa kasalukuyang panel sa pamamagitan ng muling pagbabasa ng mga ito mula sa disk o sa network.

"File"- seksyon ng menu, ang mga item kung saan nagbibigay ng mga pangunahing function para sa pagproseso ng mga file at direktoryo, tulad ng:

"Menu ng user"- nagbibigay-daan sa iyong tumawag sa isang menu na itinakda mismo ng user. Tinatawag din ng susi .

"Tingnan ang file"- analogue ng isang function na isinagawa sa pamamagitan ng pagpindot . Binibigyang-daan kang tingnan ang naka-highlight na file (o ipasok ang direktoryo). Sinusuportahan ang maraming mga format tulad ng mga format ng teksto, archive, Winword DOC, Linux executables, atbp.

"Tinitingnan ang file..."- pareho sa nakaraang talata, ngunit hindi kumikilos sa naka-highlight na file, ngunit sa isa na ang pangalan at landas ay ipapasok sa dialog box.

"Tingnan ang Koponan"- nagbibigay-daan sa iyo na magsagawa ng isang utos at tingnan ito karaniwang output sa file viewing mode.

"Pag-edit"- binubuksan ang file para sa pag-edit. Simpleng built-in text editor ay may sapat na hanay ng mga built-in na function para sa pag-edit ng mga configuration file, program source code, atbp., at built-in na awtomatiko pag-highlight ng syntax ginagawang mas maginhawa ang pag-edit at mas nababasa ang mga na-edit na teksto.

"Kopya"- kinokopya ang isang file mula sa aktibong panel patungo sa passive. Katulad sa isang function na tinatawag ng . Bilang default, ang file (o grupo ng mga file) na naka-highlight sa aktibong panel ay itinuturing na kinopya, at ang patutunguhan ay ang direktoryo na binuksan sa passive panel. Maaari itong baguhin sa pamamagitan ng pagsasaayos ng mga halaga ng field sa dialog na bubukas pagkatapos tawagan ang utos na ito.

"Mga karapatan sa pag-access"- nagbibigay-daan sa iyong baguhin ang mga karapatan sa pag-access sa isang file (o grupo ng mga file) sa dialog box.

"Simbolikong link"- lumilikha ng simbolikong link. Bilang default, ang file na naka-highlight sa aktibong panel ay kinuha bilang addressee, at ang nilikha na link ay magkakaroon ng parehong pangalan at matatagpuan sa direktoryo na binuksan sa passive panel. Maaaring baguhin ito ng user sa dialog box na bubukas.

"May-ari/Grupo"- binabago ang may-ari at/o grupo kung saan kabilang ang file/direktoryo.

"Mga Karapatan (pinalawak)"- nagbibigay-daan sa iyo na sabay na baguhin ang mga karapatan sa pag-access sa isang file at sa may-ari at/o grupo nito. Ang mga pahintulot ay kinakatawan bilang tatlong rwx sequence para sa may-ari, grupo, at lahat ng user.

"Pagpalit ng pangalan"- nagbibigay-daan sa iyong palitan ang pangalan/paglipat ng file. Katulad sa isang function na tinatawag ng . Bilang default, ang file (o grupo ng mga file) na naka-highlight sa aktibong panel ay itinuturing na inilipat/pinangalanan, at ang patutunguhan ay ang direktoryo na binuksan sa passive panel. Maaari itong baguhin sa pamamagitan ng pagsasaayos ng mga halaga ng field sa dialog na bubukas pagkatapos tawagan ang utos na ito.

"Paggawa ng isang direktoryo"- lumilikha ng isang direktoryo. Katulad sa isang function na tinatawag ng . Bilang default, ang direktoryo ay nilikha sa direktoryo na binuksan sa aktibong panel. Mababago ito kung tinukoy mo ang buong landas sa direktoryo na gagawin sa dialog na bubukas.

"Tanggalin"- nagtatanggal ng file/pangkat ng mga file/direktoryo. Katulad sa isang function na tinatawag ng .

"Baguhin ang direktoryo"- binabago ang kasalukuyang direktoryo. Katulad ng cd command sa Bash shell. Ang kinakailangang direktoryo ay ipinasok sa dialog box.

"Markahan ang pangkat"- Minamarkahan ang isang pangkat ng mga file sa pamamagitan ng mask sa direktoryo na binuksan sa aktibong panel. Katulad sa isang function na tinatawag na may <+> sa isang karagdagang keyboard.

Ang mga command shell ay lumitaw sa pinakadulo simula ng pag-unlad ng Unix, sila ay kinakailangan dahil sila ang tanging paraan upang makipag-ugnayan sa system. Sa panahong ito, napakahabang paraan ng pag-unlad ang narating nila at nakatanggap ng maraming bagong function. Hindi madaling pahalagahan ang ebolusyon ng mga shell ng Linux. Maaari kang sumulat tungkol dito sa napakahabang panahon at tiyak na hindi sapat ang isang artikulo. Susubukan naming saklawin lamang ang mga pangunahing kaalaman nang hindi masyadong malalim. Tingnan muna natin kung ano ang shell ng command ng Linux at kung anong mga shell ang mayroon.

Ano ang Linux/Unix shell

Ang Unix shell ay isang command line interpreter na nagpapatupad ng mga command na ipinasok ng user. Nagpasok kami ng isang utos, ito ay binibigyang kahulugan, naisakatuparan at pagkatapos ay nakuha namin ang resulta ng pagpapatupad nito. Ang shell ay nagbibigay ng tradisyonal na Unix command input interface na nakasanayan na natin. Ito ay karaniwang isang itim na screen at puting teksto. Naglalagay kami ng mga command sa plain text, at maaari rin kaming lumikha ng mga script mula sa isa o higit pang mga command.

Ang shell ay ang iyong interface upang makipag-ugnayan sa system. Pagkatapos mag-log in sa isang Unix system, makikita mo ang iyong sarili sa isang program na tinatawag na shell.

Thompson Shell

Kung naniniwala ka sa kasaysayan at maraming mapagkukunan sa Internet, ang pinakaunang shell ay ang Thompson Shell, na isinulat ni Ken Thomson sa Bell Labs. Mayroong 6 na bersyon sa kabuuan at ito ay ipinamahagi mula 1971 hanggang 1975. Mga function tulad ng input/output redirection at simpleng control constructs - kung, goto - ay suportado. Sinusuportahan ng mga function na ito ang lahat ng modernong Linux command shell.

PWB Shell

Ang PWB shell ay isang pagbabago ng Thomson shell na binuo ni John Masheu. Ito ay isinulat upang madagdagan ang kaginhawahan ng Shell programming. Ang mga kagiliw-giliw na istruktura ay lumitaw tulad ng if-then-else-endif, switch at while loops.

Bourne Shell

Sinimulan ng Unix ang pagtaas nito sa Bourne shell. Ito ay isinulat ni Stefan Born at Bell Labs at ginamit bilang default na shell sa Unix na bersyon 7 mula 1979. Ang isang malaking bilang ng mga tampok na magagamit sa mga modernong shell ay naipatupad na dito - pagkumpleto ng pangalan ng file, pagkumpleto ng command, mga karaniwang variable ng kapaligiran at mga built-in na istruktura ng kontrol. Ang Bourne Shell ay tinawag na sh at matatagpuan sa Unix file system sa /bin/sh.

Sa maraming mga sistema, ang Bourne shell (sh) na programa ay isang simboliko o mahirap na link sa isa sa mga alternatibo nito:

  • Almquist shell (abo)
  • Bourne-Again shell (bash)
  • Korn shell (ksh)
  • Z shell (zsh)

Halimbawang script para sa Bourne Shell:

!/bin/sh
echo "Hello World 1!"
echo "Hello World 2!"

Almquist shell (abo)

Almquist shell, kilala rin bilang A Shell. Ito ay isang magaan na shell ng Unix na orihinal na isinulat ni Kenneth Almquist. Ito ay binuo noong huling bahagi ng 1980s. Ito ay isang pagbabago ng Bourne shell at pinalitan ang orihinal sa BSD Unix na inilabas noong 1990. Maaari na itong magamit sa mga distribusyon tulad ng Debian at Ubuntu bilang isang bersyon ng abo na tinatawag na gitling (Debian Almquist shell ay sikat din sa naka-embed na Unix distribution).

Ito ay isang mabilis, compact, at POSTIX-compliant na Unix shell, na maaaring dahilan kung bakit madalas itong ginagamit sa mga naka-embed na device. Ngunit hindi sinusuportahan ng ash ang mga kasaysayan ng utos. Bagama't sa mga modernong bersyon ay naidagdag na ang function na ito.

Bourne-Again Shell (Bash)

Isinulat ni Brian Fox bilang bahagi ng GNU Project bilang isang libre at open source na kapalit para sa Bourne shell. Ang Bash ay ang pinakasikat at malawakang ginagamit sa lahat ng shell. Ang lahat ng mga pamamahagi ng Linux ay kasama ang shell na ito bilang default. Pinapalawak nito ang hanay ng tampok na Bourne Shell. Sa karamihan ng mga Unix/Linux system, ang shell na ito ay matatagpuan sa file system sa /bin/bash. Ito ay inilabas noong 1989.

Dahil sa ganitong kasikatan, na-port ito sa Windows at ipinamahagi kasama ang isang set ng Cygwin at MinGW compiler. Ginagamit din ang Bash sa Android at maaaring ma-access gamit ang iba't ibang terminal emulator.

Sinusuportahan nito ang autocompletion, I/O redirection, command completion, variable at control structures para sa paggawa ng desisyon (if-then-elese if), at mga loop.

Nagsisimula ang mga script ng Bash sa linyang ito:

Sinusuportahan din ng linux shell na ito ang pagbabasa ng mga command mula sa isang file at pag-redirect ng output sa isang file o ibang command.

Halimbawang code sa Bash:

!/bin/sh
kung [ $days -gt 365 ]
pagkatapos
echo Mahigit isang taon na ito.
fi

Korn shell (ksh)

Isinulat ni David Kron at batay sa Bourne shell source code. Ang KornShell (ksh) ay isang shell na binuo sa Bell Labs noong 1980. Paatras itong tugma sa Bourne Shell at kasama rin ang marami sa mga feature ng C shell.

Mayroong mga sumusunod na bersyon at pagbabago:

  • Dtksh
  • MKS Korn shell

Halimbawa ng script:

!/bin/ksh
i-print ang paggamit ng espasyo sa disk
du-k
labasan 0

Z shell (zsh)

Sinulat ni Paul Falstad ang unang bersyon gamit ang zsh shell command noong 1990. Ito ay isang Linux command shell na maaaring gamitin bilang isang interactive login shell, isang napakalakas na command interpreter. Ang Zsh ay talagang pinahusay na Bourne shell na may maraming pagpapahusay na kinabibilangan ng ilang feature mula sa Bash, KSH at Tcsh.

Ang pangalang Zsh ay nagmula sa Yale professor na si Zhong Shao, dahil si Paul ay isang estudyante sa Princeton University.

Ang mga sumusunod na kawili-wiling tampok ay suportado:

  • Pagkumpleto ng linya
  • Nakabahaging kasaysayan ng command para sa lahat ng session ng shell
  • Pinahusay na trabaho sa mga variable at array
  • Pag-edit ng maraming linya sa isang buffer
  • Pagwawasto ng spelling at marami pang iba.

C shell

Ang C shell ay kilala rin bilang Csh. Ito ay binuo ni Bill Joy noong siya ay isang mag-aaral sa Unibersidad ng California. Ang shell na ito ay karaniwan sa mga BSD Linux system. Mayroong maraming mga kagiliw-giliw na mga tampok dito, kabilang ang mga istruktura ng kontrol at grammatical expression. Ang shell na ito ay nagpakilala din ng malaking bilang ng mga kawili-wiling feature sa unang pagkakataon, gaya ng kasaysayan at mga mekanismo sa pag-edit, mga alias, CDPATH, pamamahala ng gawain at pag-hash, pag-redirect ng output, pagdaragdag, pagpapalit ng variable, pagpapatupad ng background, atbp.

Tulad ng ibang mga uri ng Linux shell, sinusuportahan nito ang mga script file, redirection at control structures. Ginagamit na ngayon ang Csh bilang tcsh sa maraming system, tulad ng MacOS X at Red Hat Linux. Sa Debian maaari mong gamitin ang parehong CSH at Tcsh.

Sample code sa C Shell:

!/bin/csh
kung ($araw > 365) kung gayon
echo Mahigit isang taon na ito.
tapusin kung

Isda

Ang Fish o Friendly Interactive Shell ay isang bagong henerasyong Linux command shell. Ito ay dinisenyo upang gawing mas madali para sa gumagamit na magsagawa ng mga utos, mayroong pag-highlight ng syntax, pag-highlight ng mga tamang address ng file, mabilis na paghahanap sa kasaysayan, isang web configurator, pati na rin ang espesyal na script syntax.

Ito ay isang bagong command shell sa Linux at ang syntax nito ay hindi katulad ng iba pang modernong command shell, ngunit sa halip ay tulad ng Python programming language.

Isang halimbawa ng paglikha ng isang function sa isda:

!/usr/bin/isda
pinasaya su
function su
/bin/su --shell=/usr/bin/fish $argv
wakas
funcsave su

Makakakita ka ng mas detalyadong paghahambing ng mga command shell sa Linux sa link.

Para sa araw na ito ang lahat. Sana ay nakita mo itong kawili-wili.

    Ang mga operating system ng pamilya ng Linux, gayundin ang anumang iba pang operating system, ay nangangailangan ng pagkakaroon ng interface ng pakikipag-ugnayan sa pagitan ng mga bahagi ng computer system at ng end user, iyon ay, ang pagkakaroon ng antas ng software na nagbibigay ng input ng mga command. at mga parameter upang makuha ang ninanais na mga resulta. Ang antas ng programang ito ay tinatawag "shell" o, sa Ingles - kabibi.

Ano ang isang shell?

Command shell ( kabibi) ay nagbibigay ng pakikipag-ugnayan sa pagitan ng user at ng Linux operating system environment. Ito ay isang dalubhasang produkto ng software na nagsisiguro sa pagpapatupad ng mga utos at pagkuha ng mga resulta ng kanilang pagpapatupad, o, sa madaling salita, ang shell ay isang programa na idinisenyo upang matiyak ang pagpapatupad ng iba pang mga programa sa kahilingan ng gumagamit. Ang isang halimbawa ng isang shell ay maaaring, halimbawa, isang command interpreter command.com operating system na MS DOS, o shell bash Mga operating system ng Unix/Linux.

Ang lahat ng mga shell ay may katulad na mga pag-andar at katangian, alinsunod sa kanilang pangunahing layunin - upang maisagawa ang mga utos ng gumagamit at ipakita ang mga resulta ng kanilang pagpapatupad:

Interpretasyon ng command line.

Access sa mga utos at ang mga resulta ng kanilang pagpapatupad.

Suporta para sa mga variable, espesyal na character at nakalaan na salita.

Pagproseso ng mga file, karaniwang pagpapatakbo ng input at output.

Pagpapatupad ng isang espesyal na shell programming language.

    Para sa mga operating system ng Unix / Linux family, posibleng gumamit ng ilang iba't ibang shell na naiiba sa mga katangian at paraan ng pakikipag-ugnayan sa system. Ang pinakakaraniwang mga shell ay

sh- shell Bourne, classic na shell para sa Unix OS

bash kabibi Bourne na naman(GNU Bourne-Again SHell). Marahil ang pinakakaraniwang shell sa kasalukuyan sa kapaligiran ng Linux OS.

ksh- shell Korn, dinisenyo bilang isang pag-unlad ng shell Bourne na may kasaysayan ng command line at ang kakayahang mag-edit ng mga command.

csh- shell C, gamit ang syntax ng isang sikat na programming language C

tcsh- bersyon ng shell C na may interactive na pag-edit ng command line.

Maraming iba't ibang mga shell ang maaaring mai-install sa system, at ang bawat user ay maaaring gumamit ng kanilang sariling default na shell. Ang lahat ng ito, siyempre, ay awtomatikong ginagawa sa panahon ng pag-download at proseso ng pagpaparehistro ng user.

    Sa panahon ng proseso ng paglo-load ng mga operating system ng pamilya ng Linux, pagkatapos i-load ang kernel ng system, lilipat ang system sa interactive na mode - ang mode ng pakikipag-ugnayan sa pagitan ng user at ng operating system. Sa Linux, ang unang proseso na inilunsad sa panahon ng boot ay ang init program. sa loob, na nagbabasa ng mga nilalaman ng configuration file /etc/inittab, tinutukoy ang listahan at mga katangian ng mga terminal na magagamit sa system, at tinatawag ang interactive na programa sa pag-log in getty, na nag-uudyok sa iyo na ilagay ang iyong username. Matapos ipasok ang username at password, ang programa getty tumatawag sa programa mag log in, na nagbe-verify ng validity ng account, nagna-navigate sa home directory ng user, at nagpapasa ng kontrol sa paunang startup program ng session, na karaniwang shell program ng user, ang partikular na lasa nito ay tinutukoy ng mga nilalaman ng file /etc/passwd Para sa account na ito. Halimbawa:

user1:x:508:511::/home/user1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Tulad ng makikita mula sa mga nilalaman ng file /etc/passwd, para sa gumagamit user1 ilulunsad ang shell sh(Bourne shell), para sa gumagamit interbase- shell csh(C shell) at para sa gumagamit apb- shell bash(Bourne Muli) Matapos magsimula ang shell, ang isang command prompt ay ipinapakita sa screen (karaniwan ay sa anyo ng isang dollar sign $ kung ang gawain ay ginawa sa konteksto ng isang regular na user account, o pound # , kung ang shell ay ginagamit sa ilalim ng root user account ( ugat).

Kapag lumabas sa shell, ibabalik ng system kernel ang kontrol sa programa sa loob, na nagre-restart sa proseso ng pag-login at nagpapakita ng prompt ng username sa terminal. Ang paglabas sa shell ay maaaring gawin sa isa sa dalawang paraan:

Sa pamamagitan ng koponan labasan isinagawa ng gumagamit

Kapag ang proseso ng shell ay nakatanggap ng signal pumatay, na ipinadala ng kernel, halimbawa kapag na-reboot ang system.

Interpretasyon ng command line.

    Ang input ng user bilang tugon sa isang shell prompt ay karaniwang tinatawag command line o pangkat. Ang Linux command ay isang character string ng command name at mga argumento, na pinaghihiwalay ng mga puwang. Ang mga argumento ay nagbibigay sa command ng mga karagdagang parameter na tumutukoy sa pag-uugali nito. Kadalasang ginagamit bilang mga argumento mga pagpipilian At mga pangalan mga file at direktoryo. Halimbawa, command line

ls -l file01 file02

Naglalaman ng ls command, ang -l na opsyon, at dalawang filename file01 file02.

Kapag gumagamit ng ilang mga pagpipilian, maaari silang pagsamahin. Halimbawa, ang mga sumusunod na opsyon sa command ay magkapareho:

Ls -l -d
ls -ld

Ang mga utos na bahagi ng shell ay tinatawag built-in. Kasama sa mga naturang command, halimbawa, cd, if, case, atbp. Natural, ang mga built-in na command ay maaaring mag-iba para sa iba't ibang mga opsyon sa shell. Bilang karagdagan sa mga built-in na command, posibleng gumamit ng mga module ng program, na mga hiwalay na executable na file, o mga file. mga script o mga senaryo- ordinaryong mga text file na naglalaman ng sunud-sunod na mga linya na may mga shell command. Ang ilang mga script (script) ay maaaring isagawa ng mga proseso ng Linux, gaya ng task scheduler cron. Ang scheduler ng gawain ay karaniwang idinisenyo upang awtomatikong magsagawa ng mga gawain sa pangangasiwa ng system sa isang iskedyul. Mga gawain cron ay mga command o script at awtomatikong isinasagawa, nang walang anumang interbensyon ng tao, at maaaring isagawa sa konteksto ng iba't ibang user account. Sa kaso kung saan ang gawain ng scheduler ay nagsasangkot ng pagpapatupad ng isang script, ang problema ay lumitaw sa pagpili ng isang shell na dapat ilunsad bilang isang proseso ng bata cron upang iproseso ang mga utos mula sa isang script file - pagkatapos ng lahat, ang shell ay maaaring maging anuman, at ang syntax ng isang script, bilang panuntunan, ay nangangailangan ng paggamit ng partikular na shell kung saan ito nakasulat. Upang maalis ang problemang ito, sa mga operating system ng Linux ay kaugalian na ipahiwatig sa unang linya ng script ang uri ng shell na kinakailangan para sa pagpapatupad nito, sa anyo:

#!/bin/bash- para sa shell bash

#!/bin/sh- para sa shell sh

Tanda # ay isang tanda ng isang komento at ang mga karakter na sumusunod dito ay hindi binibigyang kahulugan bilang isang utos. Binibigyang-daan ka ng diskarteng ito na tahasang tukuyin kung aling shell ang dapat gamitin para iproseso ang mga kasunod na nilalaman ng file. Kung ang script ay hindi naglalaman ng isang entry na tahasang tumutukoy sa kinakailangang shell, ang mga setting mula sa account sa konteksto kung saan ang script ay ipapatupad ang gagamitin. Sa kasong ito, posibleng may nakasulat na script para sa shell, halimbawa, tch ipapasa sa shell para ipatupad bash, na gagawing imposibleng maisakatuparan.

Kapag nagsasagawa ng mga utos o script, gamitin mga variable ng kapaligiran(sa Ingles - kapaligiran, ang mga halaga kung saan nailalarawan ang kapaligiran ng software kung saan ang mga utos ay isinasagawa. Ang mga naturang variable ay maaaring maglaman ng mga pangkalahatang setting ng system, graphical o command shell na mga parameter, mga path ng mga executable na file, atbp. Ang mga halaga ng variable ng kapaligiran ay nakatakda sa antas ng system (para sa lahat ng user) at sa partikular na antas ng user. Upang magtakda ng mga variable ng kapaligiran sa antas ng system, ginagamit ang mga nilalaman ng mga file:

/etc/profile- nagtatakda ng mga variable para lamang sa mga command shell. Maaaring magpatakbo ng anumang mga script sa mga shell na katugma sa Bourne shell.

/etc/bash.bashrc- nagtatakda ng mga variable para lamang sa mga interactive na shell. Nagpapatakbo din ito ng mga script ng bash.

/etc/environment- ginagamit ng PAM-env module. Mga pares lang ang maaaring tukuyin sa file na ito pangalan=halaga.

Ang bawat isa sa mga file na ito ay may sariling aplikasyon, kaya dapat mong maingat na piliin ang isa na nababagay sa iyong mga layunin. Halimbawa, kung kailangan mong magdagdag ng custom na direktoryo ~/bin sa isang variable DAAN para sa lahat ng user, ilagay ang sumusunod na code sa isa sa mga system environment initialization file (/etc/profile o /etc/bash.bashrc):

# Kung ang user ID ay mas malaki sa o katumbas ng 1000 at mayroong ~/bin na direktoryo at ito

#ay hindi pa naidagdag dati sa PATH variable,

# i-export ang ~/bin sa $PATH.

Kung [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

I-export ang PATH=$HOME/bin:$(PATH)

Karaniwan, sa mga operating system ng Linux, isang user ID na mas mababa sa 1000 o mas mababa sa 500 ang ginagamit para sa mga account ng serbisyo. Sa halimbawang ito, itatakda ang environment variable para sa lahat ng lokal na user sa system na may ID na 1000 o mas mataas.

Kung kailangan mong baguhin ang kapaligiran para sa isang partikular na user, baguhin ang mga nilalaman ng kapaligiran ng user:

- ~/.bash_profile, ~/.bash_login at iba pa. - mga file ng pagsisimula ng shell mula sa home directory ng user.

- ~/.profile- file ng pagsisimula ng profile ng user. Ginagamit ng maraming shell upang tukuyin ang mga variable ng kapaligiran.

~/.pam_environment- isang custom na analogue ng /etc/environment file, na ginagamit ng PAM-env module.

Halimbawa, upang idagdag ang direktoryo ng gumagamit ~/bin sa landas ng paghahanap ng mga executable na file na tinukoy ng variable DAAN, halimbawa, sa isang file ~/.profile ilagay ang linya:

i-export ang PATH="$(PATH):/home/user/bin"

Upang magtakda ng mga variable ng kapaligiran para sa mga graphical na application, ginagamit ang mga nilalaman ng mga file ng setting ng graphical na kapaligiran ng user. ~/.xinitrc

Mas madalas, ang mga value ng environment variable ay nakatakda para sa kasalukuyang session ng user. Halimbawa, upang magdagdag ng custom na direktoryo ~/bin sa landas ng paghahanap para sa mga maipapatupad na file:

i-export ang PATH=~/bin:$PATH

Bagong variable na halaga DAAN tatagal lamang hanggang sa matapos ang kasalukuyang session ng user.

Upang tingnan ang halaga ng isang variable, maaari mong gamitin ang command echo $variable, Halimbawa:

echo $PATH

Sa kasalukuyan, ang pinakakaraniwang shell, tulad ng nabanggit sa itaas, ay bash. Ito ay sanhi lalo na sa pamamagitan ng ang katunayan na ang shell bash ay sh- isang katugmang command shell, na nagdaragdag ng mga kapaki-pakinabang na tampok mula sa Korn shell ( ksh) at C shell ( csh). Shell bash maaaring magpatakbo ng karamihan sa mga script na nakasulat sa ilalim ng isang shell programming language nang walang anumang pagbabago sh at sinusubukang makalapit sa pamantayan hangga't maaari POSIX, na humantong sa maraming pagpapabuti, kapwa para sa programming at interactive na paggamit. Sa modernong pagpapatupad bash Mayroong mode ng pag-edit ng command line, walang limitasyong laki ng history ng command, mga tool sa pamamahala ng gawain, ang kakayahang gumamit ng mga alias, isang malawak na listahan ng mga built-in na command, mga function ng command shell, atbp. Sa pangkalahatan, bash pinakamahusay na nababagay sa mga pangangailangan ng karaniwang gumagamit, na ginawa itong pinakaginagamit sa kapaligiran ng Linux.

Sa startup bash nang walang mga parameter ng command line, magsisimula ang shell sa interactive na mode, na nagpapakita ng command prompt sa screen. Ang isang interactive na shell ay karaniwang nagbabasa ng data mula sa terminal ng user at nagsusulat ng data sa parehong terminal, na ang karaniwang input device ay ang keyboard at ang karaniwang output device ang display. Ang gumagamit ay nagpasok ng mga utos sa keyboard, at ang resulta ng kanilang pagpapatupad ay ipinapakita sa display.

  • Pagtuturo

Bakit at para kanino ang artikulo?

Sa una, ito ay isang paalala para sa mga mag-aaral na nagsisimulang magtrabaho sa mga sistemang katulad ng Unix. Sa madaling salita, ang artikulo ay inilaan para sa mga taong walang dating karanasan sa pagtatrabaho sa Unix command line, ngunit para sa isang kadahilanan o iba pang nais o kailangang matutunan kung paano epektibong makipag-ugnayan dito.

Walang muling pagsasalaysay ng mana (dokumentasyon), at hindi kinakansela o pinapalitan ng artikulo sa anumang paraan ang pagbabasa sa kanila. Sa halip, magsasalita ako tungkol sa mga pangunahing bagay (mga utos, pamamaraan at prinsipyo) na kailangan mong maunawaan mula pa sa simula ng pagtatrabaho sa unix shell upang maging mabisa at kasiya-siya ang gawain.

Ang artikulo ay tungkol sa ganap na unix-like environment, na may fully functional na shell (mas maganda ang zsh o bash) at medyo malawak na hanay ng mga standard na programa.

Ano ang shell

Ang Shell (shell, aka "command line", aka CLI, aka "console", aka "terminal", aka "black window na may puting mga titik") ay isang text interface para sa pakikipag-usap sa operating system (well, mahigpit na ibig kong sabihin, ito ay programa, na nagbibigay ng ganitong interface, ngunit ngayon ang pagkakaiba na ito ay hindi gaanong mahalaga).

Sa pangkalahatan, ang paggawa sa isang shell ay ganito ang hitsura: ang gumagamit (i.e. ikaw) ay nagpasok ng isang utos mula sa keyboard, pinindot ang Enter, ang system ay nagpapatupad ng utos, nagsusulat ng resulta ng pagpapatupad sa screen, at muling naghihintay para sa susunod na utos papasukin.

Karaniwang uri ng shell:

Ang shell ay ang pangunahing paraan upang makipag-ugnayan sa lahat ng Unix-like server system.

Saan matatagpuan ang mga command line system?

Kung saan maaaring naghihintay sa iyo ang isang unix shell, mga sikat na opsyon:
  • MacOS (bash);
  • malayuang pag-access sa server para sa trabaho o para sa isang personal na proyekto sa web;
  • home file server na may malayuang pag-access;
  • Ubuntu, PC-BSD sa laptop/desktop - ang mga unix-like system ngayon ay madaling i-install at gamitin.

Anong mga problema ang makatwirang lutasin gamit ang isang shell?

Mga likas na gawain kung saan ang shell ay angkop, kapaki-pakinabang at kailangang-kailangan:
  • interactive na gawain sa terminal:
    • gumaganap ng compilation, pagpapatakbo ng mga trabaho sa pamamagitan ng make;
    • paghahambing ng mga text file;
    • mabilis na pagsusuri ng data ng ad-hoc (bilang ng mga natatanging IP sa log, pamamahagi ng mga tala sa mga oras/minuto, atbp.);
    • isang beses na mass action (pumatay ng maraming proseso; kung nagtatrabaho ka sa isang version control system, baligtarin o lutasin ang isang bungkos ng mga file);
    • diagnostic ng kung ano ang nangyayari sa system (semaphore, lock, proseso, descriptor, disk space, atbp.);
  • scripting:
    • mga script ng pag-install, kung saan hindi ka maaaring umasa sa pagkakaroon ng iba pang mga interpreter - hindi ito para sa mga nagsisimula;
    • ang mga function para sa pag-customize ng interactive na shell (nakakaapekto sa imbitasyon, pagbabago ng direktoryo, pagtatakda ng mga variable ng kapaligiran) ay hindi rin eksakto para sa mga nagsisimula;
    • minsanang mga script tulad ng mass file recoding;
    • makefiles.

Ganap na mga unang hakbang

Magsimula tayo: mag-sign in at mag-sign out

Tiyaking alam mo nang eksakto kung paano sisimulan ang shell at kung paano lalabas dito.

Kung nagtatrabaho ka sa isang makina na may naka-install na Ubuntu, kailangan mong ilunsad ang Terminal program. Kapag tapos na, maaari mo lamang isara ang window.

Sa MacOS - ilunsad din ang Terminal.

Upang ma-access ang isang malayuang server, gumamit ng ssh (kung mayroon kang MacOS, Ubuntu o isa pang unix-like system na lokal) o putty (kung mayroon kang Windows).

Sino ako, nasaan ako?

Patakbuhin ang sumusunod na mga utos:
  • hostname - ipinapakita ang pangalan ng makina (server) na kasalukuyang ginagamit mo;
  • whoami - ipinapakita ang iyong login (ang iyong pangalan sa system);
  • tree -d / |less - pseudo-graphic na representasyon ng puno ng direktoryo sa makina; lumabas mula sa pag-scroll - q ;
  • pwd - ipinapakita ang direktoryo kung saan ka kasalukuyan; sa command line hindi ka maaaring maging “ganyan lang”, dapat ay nasa ilang direktoryo ka (=kasalukuyang direktoryo, gumaganang direktoryo). Ang kasalukuyang gumaganang direktoryo ay malamang na ipinapakita sa iyong prompt.
  • ls - listahan ng mga file sa kasalukuyang direktoryo; ls /home - listahan ng mga file sa tinukoy na direktoryo;

Kasaysayan ng utos (kasaysayan)

Ang isang mahalagang katangian ng isang ganap na command line ay ang command history.

Magpatakbo ng ilang command: hostname, ls, pwd, whoami. Ngayon pindutin ang pataas na key. Ang nakaraang command ay lilitaw sa input line. Maaari mong gamitin ang pataas at pababang mga key upang sumulong at paatras sa kasaysayan. Kapag nakarating ka sa hostname, pindutin ang Enter - ang command ay isasagawa muli.

Ang mga utos mula sa kasaysayan ay hindi lamang maaaring isagawa nang paulit-ulit, ngunit mai-edit din. Mag-scroll sa kasaysayan sa utos ng ls, idagdag ang -l switch dito (lumalabas na ls -l , may puwang bago ang minus, ngunit hindi pagkatapos). Pindutin ang Enter - ang binagong utos ay isasagawa.

Ang pag-scroll sa kasaysayan, pag-edit at muling pagpapatupad ng mga command ay ang pinakakaraniwang mga aksyon kapag nagtatrabaho sa command line, kaya masanay na.

Copy-paste

Ang command line ay napaka text-centric: ang mga command ay text, input data para sa karamihan ng mga standard na program ay text, at ang output ay kadalasang text.

Ang magandang bagay tungkol sa teksto ay maaari itong kopyahin at i-paste, at totoo rin ito sa command line.

Subukan ang command date +"%y-%m-%d, %A"
Inilagay mo ba ito nang buo sa pamamagitan ng kamay o kinopya ito mula sa artikulo? Tiyaking maaari mong kopyahin ito, i-paste ito sa isang terminal at i-execute ito.

Kapag natutunan mo na kung paano gumamit ng man, tiyaking maaari mong kopyahin at patakbuhin ang mga halimbawang utos mula sa tulong. ang dollar sign ay hindi bahagi ng command , ito ay isang simbolikong imahe ng isang input prompt).

Kung paano eksaktong kopyahin ang teksto mula sa terminal at i-paste ito sa terminal ay depende sa iyong system at mga setting nito, kaya, sa kasamaang-palad, hindi posible na magbigay ng mga pangkalahatang tagubilin. Sa Ubuntu, subukan ito: kopyahin - piliin lamang gamit ang mouse, i-paste - ang gitnang pindutan ng mouse. Kung hindi ito gumana, o kung mayroon kang ibang sistema, tumingin sa Internet o magtanong ng mas maraming karanasang kaibigan.

Mga susi at pagpipilian

Habang ginalugad mo ang kasaysayan ng mga utos, nalaman mo na na ang utos ng ls ay may hindi bababa sa dalawang opsyon. Kung tatawagin mo ito nang ganoon, naglalabas ito ng isang simpleng listahan:

Akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Kung idaragdag mo ang -l switch, ipapakita ang detalyadong impormasyon para sa bawat file:

Akira@latitude-e7240: ~/shell-survival-quide> ls -l total 332 -rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 Feb 13 11 :45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Ito ay isang napaka-typical na sitwasyon: kung nagdagdag ka ng mga espesyal na modifier (mga key, mga opsyon, mga parameter) sa isang command call, nagbabago ang pag-uugali ng command. Paghambingin: puno / at puno -d / , hostname at hostname -f .

Bilang karagdagan, ang mga command ay maaaring kumuha ng mga pangalan ng file, pangalan ng direktoryo, o simpleng mga string ng text bilang mga parameter. Subukan:

Ls -ld /home ls -l /home grep root /etc/passwd

lalaki

man - Tulong sa mga command at program na available sa iyong makina, pati na rin sa mga system call at sa karaniwang C library.

Subukan: man grep , man atoi , man chdir , man man .

Ang pag-scroll pasulong at paatras ay ginagawa gamit ang "pataas", "pababa", "PageUp", "PageDown" na mga button, ang paglabas sa help view ay ginagawa gamit ang q button. Maghanap ng partikular na text sa isang artikulo ng tulong: pindutin ang / (forward slash), magpasok ng text na hahanapin, pindutin ang Enter. Lumipat sa mga susunod na pangyayari - key n.

Ang lahat ng artikulo ng tulong ay nahahati sa mga kategorya. Pinaka importante:

  • 1 - mga executable program at shell command (wc, ls, pwd, atbp.);
  • 2 - mga tawag sa system (tinidor, dup2, atbp.)
  • 3 - mga function ng library (printf, scanf, cos, exec).
Ito ay kinakailangan upang ipahiwatig mula sa kung aling kategorya ang sertipiko ay dapat ipakita sa mga kaso ng pagkakataon ng mga pangalan. Halimbawa, ang man 3 printf ay naglalarawan ng isang function mula sa C standard na library, at ang man 1 printf ay naglalarawan ng isang console program na may parehong pangalan.

Maaari mong tingnan ang isang listahan ng lahat ng artikulo ng tulong na magagamit sa iyong makina gamit ang man -k command. (ang tuldok ay bahagi rin ng komada).

mas mababa

Kapag kailangan mong tingnan ang napakahabang teksto sa isang maliit na terminal window (ang mga nilalaman ng isang file, isang mahabang tao, atbp.), Ang mga espesyal na "pager" na programa ay ginagamit (mula sa salitang pahina, iyon ay, mga flippers ng pahina). Ang pinakasikat na scroller ay mas kaunti, at ito ang nagbibigay sa iyo ng pag-scroll kapag nagbasa ka ng mga man page.

Subukan at ihambing ang pag-uugali:

Cat /etc/bash.bashrc cat /etc/bash.bashrc |less

Maaari mong ilipat ang file sa pager nang direkta sa mga parameter:

Mas kaunti /etc/bash.bashrc

Pag-scroll pataas at pababa - mga pindutan "pataas", "pababa", "PageUp", "PageDown", lumabas - pindutan q. Maghanap ng partikular na text: pindutin ang / (forward slash), ipasok ang text na hahanapin, pindutin ang Enter. Lumipat sa mga susunod na pangyayari - key n. (Nakikilala mo ba ang mga tagubilin tungkol sa tao ? Hindi nakakagulat, mas kaunti rin ang ginagamit upang magpakita ng tulong.)

Mga karapatan

Ang anumang file o direktoryo ay nauugnay sa isang hanay ng mga "karapatan": ang karapatang basahin ang file, ang karapatang sumulat sa file, ang karapatang isagawa ang file. Ang lahat ng user ay nahahati sa tatlong kategorya: may-ari ng file, pangkat ng may-ari ng file, at lahat ng iba pang user.

Maaari mong tingnan ang mga pahintulot ng file gamit ang ls -l . Halimbawa:

> ls -l Makefile -rw-r--r-- 1 akira students 198 Feb 13 11:48 Makefile
Ang output na ito ay nangangahulugan na ang may-ari (akira) ay maaaring magbasa at magsulat ng file, ang grupo (mga mag-aaral) ay makakabasa lamang, at lahat ng iba pang mga gumagamit ay maaari lamang magbasa.

Kung nakatanggap ka ng mensaheng tinanggihan ng pahintulot habang nagtatrabaho, nangangahulugan ito na wala kang sapat na karapatan sa bagay na gusto mong pagtrabahuhan.

Magbasa pa sa man chmod.

STDIN, STDOUT, conveyor (pipe)

Mayroong 3 karaniwang stream ng data na nauugnay sa bawat gumaganang programa: input data stream STDIN, output data stream STDOUT, error output stream STDERR.

Patakbuhin ang wc program, ipasok ang tekstong Magandang araw ngayon, pindutin ang Enter, ipasok ang tekstong magandang araw, pindutin ang Enter, pindutin ang Ctrl+d. Ang wc program ay magpapakita ng mga istatistika sa bilang ng mga titik, salita at linya sa iyong teksto at dulo:

> wc magandang araw ngayon magandang araw 2 5 24
Sa kasong ito, nagbigay ka ng dalawang linyang text sa STDIN ng programa, at nakatanggap ng tatlong numero sa STDOUT.

Ngayon patakbuhin ang command head -n3 /etc/passwd , dapat itong magmukhang ganito:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
Sa kasong ito, walang binasa ang head program mula sa STDIN, ngunit sumulat ng tatlong linya sa STDOUT.

Maaari mong isipin ito sa ganitong paraan: ang programa ay isang pipe kung saan dumadaloy ang STDIN at dumadaloy ang STDOUT.

Ang pinakamahalagang pag-aari ng Unix command line ay ang "pipe" na mga programa ay maaaring konektado sa isa't isa: ang output (STDOUT) ng isang programa ay maaaring maipasa bilang input data (STDIN) sa isa pang programa.

Ang ganitong pagtatayo ng mga konektadong programa ay tinatawag na pipe sa Ingles, o isang conveyor o pipe sa Russian.

Ang pagsasama-sama ng mga programa sa isang pipeline ay ginagawa gamit ang simbolo | (vertical bar)

Patakbuhin ang command head -n3 /etc/passwd |wc , magiging ganito ang hitsura:

> head -n3 /etc/passwd |wc 3 3 117
Narito ang nangyari: ang head program ay naglalabas ng tatlong linya ng teksto sa STDOUT, na agad na napunta sa input ng wc program, na binibilang naman ang bilang ng mga character, salita at linya sa nagresultang teksto.

Maaari mong pagsamahin ang maraming mga programa hangga't gusto mo sa isang pipeline. Halimbawa, maaari kang magdagdag ng isa pang wc program sa nakaraang pipeline, na bibilangin kung gaano karaming mga salita at letra ang nasa output ng unang wc:

> head -n3 /etc/passwd |wc |wc 1 3 24

Ang paglikha ng mga pipeline (pipe) ay isang pangkaraniwang gawain kapag nagtatrabaho sa command line. Para sa isang halimbawa kung paano ito ginagawa sa pagsasanay, basahin ang seksyong "Paggawa ng isang one-liner na pipeline."

I/O redirection

Ang output (STDOUT) ng isang programa ay hindi lamang maaaring ilipat sa isa pang programa sa pamamagitan ng pipeline, ngunit simpleng nakasulat din sa isang file. Ginagawa ang pag-redirect na ito gamit ang > (mas malaki kaysa sa sign):

Petsa > /tmp/today.txt
Bilang resulta ng pagpapatupad ng utos na ito, lalabas ang file na /tmp/today.txt sa disk. Tingnan ang mga nilalaman nito gamit ang cat /tmp/today.txt

Kung umiral na ang isang file na may parehong pangalan, masisira ang mga lumang nilalaman nito. Kung ang file ay hindi umiiral, ito ay malilikha. Ang direktoryo kung saan nilikha ang file ay dapat na umiiral bago ang utos ay naisakatuparan.

Kung hindi mo gustong i-overwrite ang isang file, ngunit sa halip ay magdagdag ng output sa dulo, gamitin ang >> :

Petsa >> /tmp/today.txt
Suriin kung ano ang nakasulat ngayon sa file.

Bilang karagdagan, maaari mong ipasa ang anumang file sa programa sa halip na STDIN. Subukan:

Wc

Ano ang gagawin kapag may hindi malinaw

Kung nakatagpo ka ng pag-uugali ng system na hindi mo naiintindihan, o nais na makamit ang isang tiyak na resulta, ngunit hindi mo alam kung paano, ipinapayo ko sa iyo na magpatuloy sa sumusunod na pagkakasunud-sunod (sa pamamagitan ng paraan, nalalapat ito hindi lamang sa mga shell):
  • Bilang malinaw hangga't maaari, bumalangkas ng tanong o gawain - walang mas mahirap kaysa sa paglutas ng "isang bagay na hindi ko alam kung ano";
  • tandaan kung nakatagpo ka na ng pareho o katulad na problema - sa kasong ito, sulit na subukan ang solusyon na nagtrabaho sa huling pagkakataon;
  • basahin ang naaangkop na mga man page (kung naiintindihan mo kung aling mga man page ang angkop sa iyong kaso) - marahil ay makakahanap ka ng mga angkop na halimbawa ng paggamit ng mga command, ang mga kinakailangang opsyon o mga link sa iba pang mga command;
  • isipin: posible bang baguhin nang kaunti ang gawain? - marahil, sa pamamagitan ng bahagyang pagbabago ng mga kondisyon, makakakuha ka ng isang problema na alam mo na kung paano lutasin;
  • tanungin ang iyong malinaw na nabuong tanong sa isang search engine - marahil ang sagot ay matatagpuan sa Stack Overflow o iba pang mga site;
Kung wala sa itaas ang nakakatulong, humingi ng payo mula sa isang guro, isang may karanasan na kasamahan o kaibigan. At huwag matakot na magtanong ng "hangal" na mga tanong - hindi nakakahiyang hindi malaman, nakakahiyang hindi magtanong.

Kung malulutas mo ang isang mahirap na problema (sa iyong sarili, sa tulong ng Internet o iba pang mga tao), isulat ang iyong solusyon kung sakaling lumitaw muli ang parehong problema para sa iyo o sa iyong mga kaibigan. Maaari mo itong i-record sa isang simpleng text file, sa Evernote, o i-publish ito sa mga social network.

Mga pamamaraan ng pagtatrabaho

Copy-and-paste- mula sa mga man page, mula sa mga artikulo sa StackOverflow, atbp. Ang command line ay binubuo ng teksto, samantalahin ito: kopyahin at gamitin ang mga halimbawang command, isulat ang matagumpay na mga natuklasan bilang isang alaala, i-publish ang mga ito sa Twitter at mga blog.

Hilahin ang nakaraang utos mula sa kasaysayan, magdagdag ng isa pang utos sa pipeline, patakbuhin, ulitin.Cm. Tingnan din ang seksyong "Paggawa ng one-liner pipeline".

Mga pangunahing utos

  • lumipat sa ibang direktoryo: cd ;
  • tinitingnan ang mga nilalaman ng mga file: pusa, mas mababa, ulo, buntot;
  • pagmamanipula ng file: cp, mv, rm;
  • pagtingin sa mga nilalaman ng direktoryo: ls , ls -l , ls -lS ;
  • istraktura ng direktoryo: puno , puno -d (maaaring maipasa ang direktoryo bilang isang parameter);
  • maghanap ng mga file: hanapin ang . -pangalan... ;

Analytics

  • wc, wc -l;
  • sort -k - pag-uri-uriin ayon sa tinukoy na field;
  • sort -n - numeric sorting;
  • diff - paghahambing ng file;
  • grep , grep -v , grep -w , grep "\ " , grep -E - maghanap ng teksto;
  • uniq , uniq -c - string uniqueization;
  • awk - sa awk na "(print $1)" na opsyon, upang iwanan lamang ang unang field mula sa bawat linya, $1 ay maaaring baguhin sa $2, $3, atbp.;

Mga diagnostic ng system

  • ps axuww - impormasyon tungkol sa mga proseso (tumatakbo ng mga programa) na tumatakbo sa makina;
  • tuktok - interactive na pagtingin sa pinaka-masinsinang mapagkukunan na proseso;
  • df - ginamit at libreng puwang sa disk;
  • du - kabuuang sukat ng mga file sa direktoryo (recursively na may mga subdirectory);
  • strace , ktrace - kung ano ang tinatawag ng system na ginagawa ng proseso;
  • lsof - kung anong mga file ang ginagamit ng proseso;
  • netstat -na, netstat -nap - kung aling mga port at socket ang bukas sa system.

Maaaring wala kang ilang mga programa; Bilang karagdagan, ang ilang mga opsyon ng mga program na ito ay magagamit lamang sa mga privileged user (root).

Bulk at semi-awtomatikong pagpapatupad

Sa una, laktawan ang seksyong ito; kakailanganin mo ang mga command at construct na ito kapag nakarating ka sa simpleng shell scripting.
  • pagsubok - pagsusuri ng mga kondisyon;
  • habang read - loop linya sa pamamagitan ng linya STDIN ;
  • xargs - pagpapalit ng mga string mula sa STDIN sa mga parameter ng tinukoy na programa;
  • seq - henerasyon ng mga pagkakasunud-sunod ng mga natural na numero;
  • () - pagsamahin ang output ng ilang mga utos;
  • ; - gawin ang isang bagay pagkatapos ng isa pa;
  • && - isagawa kung matagumpay na nakumpleto ang unang command;
  • || - isagawa kung nabigo ang unang utos;
  • tee - i-duplicate ang output ng program sa STDOUT at sa isang file sa disk.

Miscellaneous

  • petsa - kasalukuyang petsa;
  • curl - nagda-download ng dokumento mula sa tinukoy na url at isinusulat ang resulta sa STDOUT;
  • pindutin - i-update ang petsa ng pagbabago ng file;
  • pumatay - magpadala ng signal sa proseso;
  • totoo - walang ginagawa, nagbabalik ng totoo, kapaki-pakinabang para sa pag-aayos ng mga walang hanggang loop;
  • sudo - isagawa ang utos bilang root "a.

Paglikha ng isang one-liner na pipeline

Tingnan natin ang isang halimbawa ng isang tunay na gawain: kailangan nating patayin ang lahat ng proseso ng task-6-server na tumatakbo bilang kasalukuyang user.

Hakbang 1.
Unawain kung aling programa ang gumagawa ng humigit-kumulang na kinakailangang data, kahit na hindi sa purong anyo nito. Para sa aming gawain, sulit na makakuha ng isang listahan ng lahat ng mga proseso sa system: ps axuww. Ilunsad.

Hakbang 2.
Tingnan ang data na natanggap gamit ang iyong mga mata, bumuo ng isang filter na magtapon ng ilan sa mga hindi kinakailangang data. Ito ay madalas na grep o grep -v . Gamitin ang "Up" na key upang kunin ang nakaraang command mula sa kasaysayan, magtalaga ng isang naimbentong filter dito, at patakbuhin ito.

Ps axuww |grep `whoami`
- mga proseso lamang ng kasalukuyang gumagamit.

Hakbang 3.
Ulitin ang hakbang 2 hanggang makuha mo ang malinis na data na kailangan mo.

"
- lahat ng mga proseso na may kinakailangang pangalan (kasama, marahil, mga dagdag tulad ng vim task-6-server.c, atbp.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v mas kaunti
- mga proseso lamang na may kinakailangang pangalan

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(print $2)"

Pids ng mga kinakailangang proseso, nakumpleto ang hakbang 3

Hakbang 4.
Mag-apply ng angkop na panghuling handler. Gamit ang "Up" key, hinuhugot namin ang nakaraang utos mula sa kasaysayan at idagdag ang pagproseso na kukumpleto sa solusyon sa problema:

  • |wc -l upang mabilang ang bilang ng mga proseso;
  • >pids para magsulat ng pids sa isang file;
  • |xargs kill -9 kill na mga proseso.

Mga gawain sa pagsasanay

Gusto mong magsanay ng mga bagong kasanayan? Subukan ang mga sumusunod na gawain:
  • kumuha ng listahan ng lahat ng mga file at direktoryo sa iyong home directory;
  • kumuha ng listahan ng lahat ng mga artikulo ng tao mula sa kategorya 2 (system calls);
  • bilangin kung ilang beses lumalabas ang salitang grep sa grep program man page;
  • bilangin kung gaano karaming mga proseso ang kasalukuyang tumatakbo bilang ugat;
  • hanapin kung aling command ang lalabas sa maximum na bilang ng mga kategorya ng tulong (man);
  • bilangin kung ilang beses lumalabas ang salitang var sa page na ya.ru.
Hint: kakailanganin mong hanapin , grep -o , awk "(print $1)" , mga regular na expression sa grep , curl -s .

Ano ang susunod na pag-aaralan?

Kung nagsimula kang magustuhan ang command line, huwag tumigil, patuloy na pagbutihin ang iyong mga kasanayan.

Narito ang ilang mga programa na tiyak na magiging kapaki-pakinabang kung nakatira ka sa command line:

  • hanapin gamit ang mga kumplikadong opsyon
  • apropos
  • hanapin
  • telnet
  • netcat
  • tcpdump
  • rsync
  • screen
  • zgrep, zless
  • visudo
  • crontab -e
  • sendmail
Bilang karagdagan, sa paglipas ng panahon ito ay nagkakahalaga ng mastering ilang uri ng scripting language, halimbawa, perl o python, o kahit na pareho sa kanila.

Sino ang nangangailangan nito?

Ito ba ay nagkakahalaga ng pag-aaral ng command line at shell scripting ngayon? Talagang sulit. Magbibigay lang ako ng ilang halimbawa ng mga kinakailangan ng Facebook para sa mga kandidatong gustong makakuha ng trabaho sa FB.

Tiyak na halos lahat ng mga mambabasa ng Habr ay alam ang sh at bash shell. Gayundin, karamihan sa atin ay may narinig tungkol sa zsh at tcsh. Gayunpaman, ang listahan ng mga umiiral na shell ay hindi nagtatapos doon. Maaari silang halos nahahati sa tatlong grupo:

  • Bourne shell clone (bash, zsh)
  • C shell (csh, tcsh)
  • Batay sa mga sikat na programming language (psh, ipython, scsh)
  • Exotic, tiyak at lahat ng iba pa
Ang pinaka-kawili-wili sa kanila ay tatalakayin.

Ang layunin ng pagsulat ng artikulong ito ay hindi upang suriin o pag-uri-uriin ang lahat ng umiiral na mga shell ng command. Gusto ko lang makipag-usap tungkol sa ilang mga kagiliw-giliw na produkto sa lugar na ito at palawakin ang abot-tanaw ng mambabasa. matutuwa ako. Kung ito ay naghihikayat sa isang tao na pag-aralan ang paksa nang mas detalyado o kahit na lumipat sa ibang paksa.
Una, maikling tungkol sa kung ano ito. Ang command shell o command interpreter ay isang application na nagbibigay sa user ng command line interface kung saan ang user ay maaaring magpasok ng mga command nang paisa-isa o nagpapatakbo ng mga script na binubuo ng isang listahan ng mga command. Pasalita at sa hindi opisyal na mga teksto madalas itong tinatawag na "shell", mula sa English shell - shell.

Ang pinaka-malawak na ginagamit na POSIX-compatible shell ay nagmula sa Bourne shell, kaya magsisimula tayo diyan

Bourne shell at ang mga clone nito

Bourne shell, executable na file: sh. Isang command shell na ipinangalan sa lumikha nito, si Stephen Bourne. Karamihan sa mga operator ay hiniram mula sa wikang ALGOL 68 Ito ay inilabas sa ika-7 edisyon ng UNIX operating system, kung saan ito ang default na shell. Hanggang ngayon, ang karamihan sa mga sistemang katulad ng Unix ay may /bin/sh - isang simboliko o mahirap na link sa isang shell na katugma sa sh.

Bourne shell na naman, executable na file: bash. Ang pamagat ay maaaring isalin bilang "The Reborn Walk of Bourne." Malamang ang pinakasikat na shell ngayon. De facto na pamantayan para sa Linux. Hindi ko na ito papansinin, dahil... Maraming magagandang artikulo tungkol sa bash sa Internet. Halimbawa dito at dito.

Z shell, executable na file: zsh. Isang libre, modernong SH-compatible na shell. Ito ay may isang bilang ng mga pakinabang sa bash, pangunahin na nauugnay sa pagtatrabaho sa interactive na mode. Isinulat nila ang tungkol dito sa Habré at
Bilang karagdagan, mayroong ilang mga shell na nabibilang sa pangkat na ito: Korn shell (ksh) at Almquist shell (ash) atbp, ngunit hindi namin tatalakayin ang mga ito nang detalyado.

C shell

C shell, executable na file: csh Isang command shell na binuo ng may-akda na si Bill Joy. Ang batayan para sa csh scripting language ay, gaya ng ipinahihiwatig ng pangalan, ang wikang C. noong panahong iyon, noong 1978, ito ang pinakasikat na programming language sa mga developer at user ng BSD UNIX. Sa kasalukuyan, ang mas popular na libreng pagpapatupad ng csh ay tcsh.

TENEX C Shell, executable na file: tcsh. Sa tcsh unang lumitaw ang autocompletion. Ito ang default na shell sa FreeBSD. Maaari mong basahin ang higit pa tungkol dito.
Upang malinaw na ipakita ang pagkakaiba sa syntax, magbibigay ako ng ilang halimbawa ng mga script na gumagawa ng parehong bagay para sa csh at isang sh-compatible na command interpreter.

Kondisyon na konstruksyon:

Isang loop na kinakalkula ang unang 10 kapangyarihan ng dalawa:

#!/bin/sh i=2 j=1 habang [ $j -le 10 ]; gawin ang echo "2 **" $j = $i i=`expr $i "*" 2` j=`expr $j + 1` tapos na #!/bin/csh set i = 2 set j = 1 habang ($j<= 10) echo "2 **" $j = $i @ i *= 2 @ j++ end

Gayunpaman, ang listahan ng mga tampok na suportado ng mga pinakabagong bersyon ng bash, zsh at tcsh ay halos magkapareho at ang pagpili ng isang partikular na shell ay halos isang bagay ng panlasa. Sa hindi gaanong karaniwang mga shell, iba ang sitwasyon. Dito mas makabuluhan ang mga pagkakaiba.

Mga command shell batay sa mga sikat na programming language.

Perl Shell, executable na file: psh. Isang shell na pinagsasama ang mga tampok ng mga shell sa itaas at ang kapangyarihan ng wikang Perl. kasi Ang psh ay nakasulat sa perl at maaari ring tumakbo sa Windows. Ilang halimbawa ng paggamit ng psh:
ls | s/y/k/ # Pagpapalit gamit ang mga regular na expression ls | ( print ++$i, ": $_"; )q # Mabilis na filter. Sa loob ng curly braces ay isang Perl expression kung saan ang $_ ay naglalaman ng isang linya ng output. netstat | ($_>2; )g # grep filter. Tanging ang mga linya kung saan ang expression sa panaklong ay nagbabalik ng true ang naka-print na command >[=FOO] # Redirect sa isang open file descriptor command > file # Katumbas ng command 2> file sa bash. Nire-redirect ang output at error stream sa isang file grep foo lib/**/*.pm # Use **, na nangangahulugang ang kasalukuyang direktoryo at lahat ng mga subdirectory

Sinabi ni Schsh, executable na file scsh. Isang open-source na command interpreter na gumagamit ng Scheme 48 bilang isang scripting language ay hindi sumusuporta sa mga function na standard para sa iba pang mga shell (command history, text editing sa command line, path/command addition). Inirerekomenda ang pag-script, ngunit hindi para sa interactive na gawain. Maaaring mag-apela sa mga tagahanga ng functional programming. Nasa ibaba ang isang halimbawa ng isang script na nagpapakita ng mga pangalan ng lahat ng executable file na matatagpuan sa mga direktoryo mula sa PATH environment variable
#!/usr/local/bin/scsh -s !# (tukuyin ang (mga executable dir) (may-cwd dir (filter file-executable? (directory-files dir #t)))) (define (writeln x) (display x) (newline)) (para sa-bawat writeln (apend-map executables ((infix-splitter ":") (getenv "PATH"))))

IPython. Ito ay isang interactive na shell para sa Python programming language na may ilang karagdagang feature. Ang IPython ay may espesyal na profile para sa pagtakbo bilang isang shell ng system. Ang paraan upang ilunsad ang mode na ito ay nakasalalay, tulad ng naiintindihan ko, sa bersyon, ngunit sa aking makina ay ganito ang hitsura:
ipython3 --profile=pysh

Marami na ang naisulat tungkol sa IPython, kasama ang Russian (mga link sa dulo ng artikulo). Susubukan kong ilista ang mga pangunahing tampok nito mula sa punto ng view ng paggamit nito bilang isang command shell:

  • Cross-platform. Mayroong kahit isang bersyon para sa Windows
  • Mga bersyon ng Python 2.x o 3.x bilang isang scripting language, pinahusay na mga kakayahan sa pagsisiyasat ng sarili
  • Autocompletion ng Python code pati na rin ang mga file name at system command.
  • Kasaysayan ng command at mga macro batay dito
  • Isang mekanismo na nagpapabilis sa pag-navigate sa pamamagitan ng mga katalogo, bookmark at marami pang iba
Tulad ng nakikita mo, sa mga tuntunin ng mga interactive na kakayahan nito, ang IPython ay hindi bababa sa kasing ganda ng bash. Tulad ng para sa mga script, ang IPython ay magiging maginhawa para sa mga mas nakakaalam ng python kaysa sa bash. Sa katunayan, ang mga script ng IPython ay mag-iiba mula sa purong Python sa pinasimpleng pagtawag ng mga command ng system. Narito ang ilang mga halimbawa ng pagsasama ng python at mga utos ng system:
# Sabihin nating gusto naming kalkulahin ang kabuuang sukat ng dpkg log files: In : cd /var/log/ /var/log In : log_files = !ls -l dpkg.log* In : log_files Out: "-rw-r- -r-- 1 root root 1824 Nov 3 16:41 dpkg.log" In : para sa linya sa log_files: ....: size += int(line.split()) ....: In : size Out: 1330009 # ..o sunud-sunod na i-ping ang sampung host In : para sa i in range(100,110): ....: !ping -c 1 192.168.0.$i ....:
Pahinga
Siyempre, hindi ito kumpletong listahan ng kahit sikat na mga shell. Bilang karagdagan sa mga kategorya sa itaas, mayroon ding mga gumagamit ng sarili nilang syntax, na hindi tugma sa sh at hindi kinokopya ang umiiral na wika. Ang isang halimbawa ay magiging friendly interactive shell (isda). Ngunit sa wakas, nais kong pag-usapan hindi ang tungkol dito, ngunit tungkol sa isang mas tiyak na sleepshell.

Matulog Dummy Shell, executable na file: sleepshell. Sa mahigpit na pagsasalita, hindi matatawag na command processor ang sleepshell, dahil hindi nito maproseso ang mga utos. At sa pangkalahatan, wala itong magagawa maliban sa pana-panahong pagsulat ng mga asterisk na "*" sa karaniwang output. Gayunpaman, tumpak itong ginagamit bilang command shell at sa kadahilanang ito: Sabihin nating gusto naming bigyan ang isang tao ng pagkakataong gumawa ng mga ssh tunnel sa pamamagitan ng aming server na nagpapatakbo ng Linux o Unix. Magbasa pa tungkol sa ssh tunneling. Ngunit hindi namin kailangan ang isang tao na magkaroon ng access sa command line at file system ng aming server. Idinisenyo ang Sleepshell para sa ganoong kaso. Lumilikha kami ng isang account sa server bilang isang shell at nag-install ng sleepshell para dito. Ang may-ari ng account ay makakapagkonekta at makakapagpasa ng mga port, ngunit hindi makakapagsagawa ng mga utos.

Iyon lang. Sana naging kawili-wili ito. Natutuwa akong makatanggap ng anumang mga komento at payo sa teksto ng artikulo.

Mga kaugnay na link
www.faqs.org/faqs/unix-faq/shell/shell-differences - talaan ng buod ng mga pagkakaiba at pagkakatulad ng shell
www.mariovaldez.net/software/sleepshell - Sleep Dummy Shell
ipython.org/ipython-doc/dev/interactive/shell.html - IPython bilang shell ng system
www.opennet.ru/base/dev/ipython_sysadmin.txt.html - IPython shell bilang tool ng administrator ng system