Używam Ubuntu od czterech lat.
Mam podstawową wiedzę na temat poleceń powłoki i wolę pracować w terminalu niż przy użyciu GUI. Ostatnio zacząłem używać komputera Mac.
Wypróbowałem kilka poleceń terminalowych (których używam na Ubuntu) w terminalu Mac i wydaje się, że reagują w większości w ten sam sposób.
Czy są jakieś znaczące różnice w poleceniach, których używam, zadaniach, które wykonują lub środowisku powłoki, o których powinienem wiedzieć?
Odpowiedzi:
Jeśli wykonałeś nową lub czystą instalację systemu OS X w wersji 10.3 lub nowszej, domyślną powłoką terminala użytkownika jest bash.
Bash jest zasadniczo ulepszoną i darmową wersją GNU oryginalnej powłoki Bourne'a, sh. Jeśli masz wcześniejsze doświadczenie z bash (często domyślne w instalacjach GNU / Linux), sprawia to, że obsługa wiersza poleceń OS X jest znajoma, w przeciwnym razie rozważ zmianę powłoki na tcsh lub zsh, ponieważ niektórzy uważają je za bardziej przyjazne dla użytkownika.
Jeśli dokonałeś aktualizacji lub używasz OS X w wersji 10.2.x, 10.1.x lub 10.0.x, domyślną powłoką użytkownika jest tcsh, ulepszona wersja csh („c-shell”). Wczesne implementacje były trochę błędne, a składnia programowania nieco dziwna, więc rozwinęła się kiepski rap.
Nadal istnieją pewne fundamentalne różnice między mac i linuxem, które Gordon Davisson tak trafnie wymienia, na przykład nie
useradd
na Macu iifconfig
działa inaczej.Poniższa tabela jest przydatna do poznania różnych powłok uniksowych.
Przydatne mogą być również te przewodniki:
http://homepage.mac.com/rgriff/files/TerminalBasics.pdf
http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html
Na koniec używam Linuksa (Ubuntu 11) i Mac OSX, więc używam basha i najbardziej lubię dostosowywanie
.bash_profile
pliku .bashrc (źródło z OSX) z aliasami, kilka przykładów poniżej. Teraz umieściłem wszystkie moje aliasy w oddzielnym pliku .bash_aliases i dołączam go do:if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi
w pliku .bashrc lub .bash_profile.
Zauważ, że jest to przykład różnicy między systemem Mac a
--color=auto
linux, ponieważ na komputerze Mac nie możesz mieć rozszerzenia . Za pierwszym razem, gdy to zrobiłem (nie wiedząc), przedefiniowałemls
to jako nieważne, co było trochę niepokojące, dopóki nie usunąłem--auto-color
!Przydatne może być również https://unix.stackexchange.com/q/127799/10043
# ~/.bash_aliases # ls variants #alias l='ls -CF' alias la='ls -A' alias l='ls -alFtr' alias lsd='ls -d .*' # Various alias h='history | tail' alias hg='history | grep' alias mv='mv -i' alias zap='rm -i' # One letter quickies: alias p='pwd' alias x='exit' alias {ack,ak}='ack-grep' # Directories alias s='cd ..' alias play='cd ~/play/' # Rails alias src='script/rails console' alias srs='script/rails server' alias raked='rake db:drop db:create db:migrate db:seed' alias rvm-restart='source '\''/home/durrantm/.rvm/scripts/rvm'\''' alias rrg='rake routes | grep ' alias rspecd='rspec --drb ' # # DropBox - syncd WORKBASE="~/Dropbox/97_2012/work" alias work="cd $WORKBASE" alias code="cd $WORKBASE/ror/code" # # DropNot - NOT syncd ! WORKBASE_GIT="~/Dropnot" alias {dropnot,not}="cd $WORKBASE_GIT" alias {webs,ww}="cd $WORKBASE_GIT/webs" alias {setups,docs}="cd $WORKBASE_GIT/setups_and_docs" alias {linker,lnk}="cd $WORKBASE_GIT/webs/rails_v3/linker" # # git alias {gsta,gst}='git status' # Warning: gst conflicts with gnu-smalltalk (when used). alias {gbra,gb}='git branch' alias {gco,go}='git checkout' alias {gcob,gob}='git checkout -b ' alias {gadd,ga}='git add ' alias {gcom,gc}='git commit' alias {gpul,gl}='git pull ' alias {gpus,gh}='git push ' alias glom='git pull origin master' alias ghom='git push origin master' alias gg='git grep ' # # vim alias v='vim' # # tmux alias {ton,tn}='tmux set -g mode-mouse on' alias {tof,tf}='tmux set -g mode-mouse off' # # dmc alias {dmc,dm}='cd ~/Dropnot/webs/rails_v3/dmc/' alias wf='cd ~/Dropnot/webs/rails_v3/dmc/dmWorkflow' alias ws='cd ~/Dropnot/webs/rails_v3/dmc/dmStaffing'
źródło
zsh
domyślne uzupełnianie klas Java.ls
zarówno w Linuksie (--color=all
), jak i OSX (-G
) z następującymils --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Odpowiedź @Michaela Durranta dobrze obejmuje samą powłokę, ale środowisko powłoki zawiera również różne polecenia, których używasz w powłoce, a te będą podobne - ale nie identyczne - między OS X i Linux. Ogólnie rzecz biorąc, oba będą miały te same podstawowe polecenia i funkcje (szczególnie te zdefiniowane w standardzie Posix), ale wiele rozszerzeń będzie innych.
Na przykład systemy linux zazwyczaj mają
useradd
polecenie tworzenia nowych użytkowników, ale OS X nie. W systemie OS X generalnie używasz GUI do tworzenia użytkowników; jeśli chcesz je utworzyć z wiersza poleceń, użyjdscl
(czego linux nie ma) do edycji bazy danych użytkowników (patrz tutaj ). (Aktualizacja: począwszy od macOS High Sierra v10.13, możesz użyćsysadminctl -addUser
zamiast tego).Ponadto niektóre wspólne polecenia będą miały inne funkcje i opcje. Na przykład linuksy generalnie zawierają GNU
sed
, które używa-r
opcji wywoływania rozszerzonych wyrażeń regularnych; w systemie OS X użyjesz-E
opcji, aby uzyskać ten sam efekt. Podobnie w Linuksie możesz użyćls --color=auto
do uzyskania kolorowego wyjścia; w systemie macOS najbliższym odpowiednikiem jestls -G
.EDYCJA: Inną różnicą jest to, że wiele poleceń linuksa pozwala na określenie opcji po ich argumentach (np.
ls file1 file2 -l
), Podczas gdy większość poleceń OS X wymaga, aby opcje były ustawione na pierwszym miejscu (ls -l file1 file2
).Wreszcie, ponieważ sam system operacyjny jest inny, niektóre polecenia zachowują się inaczej w różnych systemach operacyjnych. Na przykład w systemie Linux prawdopodobnie użyłbyś
ifconfig
do zmiany konfiguracji sieci. W OS Xifconfig
zadziała (prawdopodobnie z nieco inną składnią), ale Twoje zmiany prawdopodobnie zostaną losowo nadpisane przez demona konfiguracji systemu; Zamiast tego powinieneś edytować preferencje sieciowe za pomocąnetworksetup
, a następnie pozwolić demonowi konfiguracji zastosować je do stanu sieci na żywo.źródło