ずっと放置していたzshへのアップデートを実行
Macのターミナルを起動した時に、毎回出ていた「今のデフォルトのシェルはzshです!」という文言。ずっと無視をしていましたが、ついに重い腰をあげてアップデートを実施することにしました。
と言っても、コマンドを一行実行するだけで完了します。
chsh -s /bin/zsh
zshの詳細については、https://support.apple.com/ja-jp/HT208050 を参照してくださいと記載されていたので、確認しました。
zsh について、また、そのコマンドライン補完システムについて調べるには、ターミナルで「
man zsh
」と入力してください。
と記載されていたので、manコマンドでzshについて調べてみました。
※OSは、macOS Big Sur 11.2
manコマンドでzshについて調べてみた(man zsh)
manコマンドは、コマンドのマニュアルを表示するものです。以下の通り実行すると、zshのマニュアルを見ることができます。なお、日本語の訳は当サイト執筆者によるものなので、不自然な部分は多めに見て頂けるとありがたいです。
man zsh
概要
まずは、zshコマンドのマニュアルの概要から見ていきます。
ZSH(1) ZSH(1)
NAME
zsh - the Z shell
OVERVIEW
Because zsh contains many features, the zsh manual has been split into a number of sections:
zsh Zsh overview (this section)
zshroadmap Informal introduction to the manual
zshmisc Anything not fitting into the other sections
zshexpn Zsh command and parameter expansion
zshparam Zsh parameters
zshoptions Zsh options
zshbuiltins Zsh built-in functions
zshzle Zsh command line editing
zshcompwid Zsh completion widgets
zshcompsys Zsh completion system
zshcompctl Zsh completion control
zshmodules Zsh loadable modules
zshtcpsys Zsh built-in TCP functions
zshzftpsys Zsh built-in FTP client
zshcontrib Additional zsh functions and utilities
zshall Meta-man page containing all of the above
【訳】※ブログ執筆者
ZSH(1) ZSH(1)
名前
zsh - the Z shell
概要
zshには多くの機能が含まれているため、zshマニュアルはいくつかのセクションに分割されています:
zsh Zsh 概要 (このセクション)
zshroadmap マニュアルの略式紹介
zshmisc どのセクションにも適さないもの(その他)
zshexpn Zsh コマンド and パラメータ展開
zshparam Zsh パラメータ
zshoptions Zsh オプション
zshbuiltins Zsh 組み込み関数
zshzle Zsh コマンドライン編集
zshcompwid Zsh 補完ウィジット
zshcompsys Zsh 補完システム
zshcompctl Zsh 補完コントロール
zshmodules Zsh 読み込み可能なモジュール
zshtcpsys Zsh 組み込み TCP 機能
zshzftpsys Zsh 組み込み FTP クライアント
zshcontrib 追加の zsh 機能 と 用途
zshall 上記全てを含むMeta-manページ
今回実行した「man zsh」には、zshの概要のみ記載されているようです。詳細についてはセクションごとに分かれて記載されているので、詳細を知りたい場合は各セクションをmanコマンドで確認する必要があります。
説明
DESCRIPTION
Zsh is a UNIX command interpreter (shell) usable as an interactive login shell and as a shell script command processor. Of the standard shells,
zsh most closely resembles ksh but includes many enhancements. It does not provide compatibility with POSIX or other shells in its default oper-
ating mode: see the section Compatibility below.
Zsh has command line editing, builtin spelling correction, programmable command completion, shell functions (with autoloading), a history mecha-
nism, and a host of other features.
【訳】※ブログ執筆者
説明
Zshは、対話型ログインシェルおよびシェルスクリプトコマンド処理装置として使用できるUNIXコマンドインタープリター(シェル)です。
標準シェルのうち、zshはkshに最もよく似ていますが、多くの拡張機能が含まれています。
デフォルトの操作では、POSIXまたは他のシェルとの互換性は提供されません。
以下の互換性セクションを参照してください。
Zshには、コマンドライン編集、組み込みのスペル修正、プログラム可能なコマンド補完、シェル関数(自動読み込みあり)、
履歴メカニズム、およびその他の多くの機能があります。
zshは、kshに拡張機能を追加したようなものだと説明しています。
他のシェルとの互換性については別のセクションを参照するように記載されています。
執筆者
AUTHOR
Zsh was originally written by Paul Falstad <pf@zsh.org>. Zsh is now maintained by the members of the zsh-workers mailing list <zsh-work-
ers@zsh.org>. The development is currently coordinated by Peter Stephenson <pws@zsh.org>. The coordinator can be contacted at <coordina-
tor@zsh.org>, but matters relating to the code should generally go to the mailing list.
【訳】※ブログ執筆者
執筆者
Zshは当初PaulFalstadによって書かれました。<pf@zsh.org>. Zshは、zsh-workersメーリングリストのメンバーによって管理されています。 <zsh-work-
ers@zsh.org>. 開発は現在、Peter Stephensonによってまとめられています。 <pws@zsh.org>. コーディネータとは <coordina-
tor@zsh.org>で連絡を取れます, しかし コードに関連する事項は、通常、メーリングリストに掲載する必要があります。
ここではzshのコード執筆者に関する情報が記載されています。連絡することはあまり無いと思いますが、連絡したい時は<coordina-tor@zsh.org>に連絡すれば良いみたいです。
入手方法
VAILABILITY
Zsh is available from the following HTTP and anonymous FTP site.
ftp://ftp.zsh.org/pub/
https://www.zsh.org/pub/
)
The up-to-date source code is available via Git from Sourceforge. See https://sourceforge.net/projects/zsh/ for details. A summary of instruc-
tions for the archive can be found at http://zsh.sourceforge.net/.
【訳】※ブログ執筆者
入手方法
Zshは、次のHTTPおよび匿名FTPサイトから入手できます。
ftp://ftp.zsh.org/pub/
https://www.zsh.org/pub/
最新のソースコードは、SourceforgeのGitから入手できます。 詳細はhttps://sourceforge.net/projects/zsh/ を見てください。
アーカイブの手順の概要は、http://zsh.sourceforge.net/.で見ることができます。
Zshの入手方法について記載されています。https://www.zsh.org/pub/から入手できます。
最新のものは、https://sourceforge.net/projects/zsh/から入手できます。
メーリングリスト
あまり重要でないので割愛します。
よくある質問
THE ZSH FAQ
Zsh has a list of Frequently Asked Questions (FAQ), maintained by Peter Stephenson <pws@zsh.org>. It is regularly posted to the newsgroup
comp.unix.shell and the zsh-announce mailing list. The latest version can be found at any of the Zsh FTP sites, or at http://www.zsh.org/FAQ/.
The contact address for FAQ-related matters is <faqmaster@zsh.org>.
【訳】※ブログ執筆者
ZSHのよくある質問
ZshにはPeter Stephensonによって管理されているよくある質問のリストがあります。 <pws@zsh.org>.
質問リストはnewsgroup comp.unix.shell と the zsh-announce mailing list に定期的に投稿されています.
最新バージョンは、ZshFTPサイトのいずれか, もしくは http://www.zsh.org/FAQ/.で見つけることができます。
FAQ関連事項の連絡先は<faqmaster@zsh.org>です。
ここでは、zshについて質問があった時の対処方法が記載されています。
zshのよくある質問
http://www.zsh.org/FAQ/
Webページ
THE ZSH WEB PAGE
Zsh has a web page which is located at https://www.zsh.org/. This is maintained by Karsten Thygesen <karthy@zsh.org>, of SunSITE Denmark. The
contact address for web-related matters is <webmaster@zsh.org>.
【訳】※ブログ執筆者
WEBページ
Zsh には https://www.zsh.org/ というWebページがあります。 これはSunSITE Denmark の Karsten Thygesen <karthy@zsh.org>, によって管理されています。
Webページに関する連絡先は <webmaster@zsh.org> です。
zshのWebページ
https://www.zsh.org/
ユーザーガイド
THE ZSH USERGUIDE
A userguide is currently in preparation. It is intended to complement the manual, with explanations and hints on issues where the manual can be
cabbalistic, hierographic, or downright mystifying (for example, the word `hierographic' does not exist). It can be viewed in its current state
at http://zsh.sourceforge.net/Guide/. At the time of writing, chapters dealing with startup files and their contents and the new completion sys-
tem were essentially complete.
【訳】※ブログ執筆者
ZSH ユーザーガイド
ユーザーガイドは現在準備中です。
これはマニュアルを補足することを目的としており、問題に関する説明とヒントが含まれています。
現在の状態は http://zsh.sourceforge.net/Guide/ で見ることができます。
この文章を書いている時点では、スタートアップファイルとその内容、および新しい完了システムを扱う章は基本的に完了しています。
zshユーザーガイド
http://zsh.sourceforge.net/Guide/
呼び出し①※量が多いので分割
INVOCATION
The following flags are interpreted by the shell when invoked to determine where the shell will read commands from:
-c Take the first argument as a command to execute, rather than reading commands from a script or standard input. If any further arguments
are given, the first one is assigned to $0, rather than being used as a positional parameter.
-i Force shell to be interactive. It is still possible to specify a script to execute.
-s Force shell to read commands from the standard input. If the -s flag is not present and an argument is given, the first argument is taken
to be the pathname of a script to execute.
If there are any remaining arguments after option processing, and neither of the options -c or -s was supplied, the first argument is taken as the
file name of a script containing shell commands to be executed. If the option PATH_SCRIPT is set, and the file name does not contain a directory
path (i.e. there is no `/' in the name), first the current directory and then the command path given by the variable PATH are searched for the
script. If the option is not set or the file name contains a `/' it is used directly.
After the first one or two arguments have been appropriated as described above, the remaining arguments are assigned to the positional parameters.
For further options, which are common to invocation and the set builtin, see zshoptions(1).
【訳】※ブログ執筆者
呼び出し
次のフラグは、シェルがコマンドを読み取る場所を決定するために呼び出されたときに、シェルによって解釈されます。:
-c スクリプトまたは標準入力からコマンドを読み取るのではなく、実行するコマンドとして最初の引数を取ります。
さらに引数が指定されると、最初の引数は位置パラメーターとして使用されるのではなく、$ 0に割り当てられます。
-i シェルを強制的にインタラクティブにします。 実行するスクリプトを指定することは引き続き可能です。
-s シェルに標準入力からコマンドを読み取らせます。
-sフラグが存在せず、引数が指定されている場合、最初の引数は実行するスクリプトのパス名と見なされます。
オプション処理後に残りの引数があり、オプション-cまたは-sのいずれも指定されていない場合、最初の引数は、実行されるシェルコマンドを含むスクリプトのファイル名と見なされます。
オプションPATH_SCRIPTが設定されていて、ファイル名にディレクトリパスが含まれていない場合(つまり、名前に「/」が含まれていない場合)、
最初に現在のディレクトリ、次に変数PATHで指定されたコマンドパスでスクリプトが検索されます。
オプションが設定されていない場合、またはファイル名に「/」が含まれている場合は、直接使用されます。
上記のように最初の1つまたは2つの引数が割り当てられた後、残りの引数は位置パラメーターに割り当てられます。
呼び出しと組み込みのセットに共通するその他のオプションについては、zshoptions(1)を参照してください。
呼び出し②
The long option `--emulate' followed (in a separate word) by an emulation mode may be passed to the shell. The emulation modes are those
described for the emulate builtin, see zshbuiltins(1). The `--emulate' option must precede any other options (which might otherwise be overrid-
den), but following options are honoured, so may be used to modify the requested emulation mode. Note that certain extra steps are taken to
ensure a smooth emulation when this option is used compared with the emulate command within the shell: for example, variables that conflict with
POSIX usage such as path are not defined within the shell.
Options may be specified by name using the -o option. -o acts like a single-letter option, but takes a following string as the option name. For
example,
zsh -x -o shwordsplit scr
runs the script scr, setting the XTRACE option by the corresponding letter `-x' and the SH_WORD_SPLIT option by name. Options may be turned off
by name by using +o instead of -o. -o can be stacked up with preceding single-letter options, so for example `-xo shwordsplit' or `-xoshword-
split' is equivalent to `-x -o shwordsplit'.
Options may also be specified by name in GNU long option style, `--option-name'. When this is done, `-' characters in the option name are permit-
ted: they are translated into `_', and thus ignored. So, for example, `zsh --sh-word-split' invokes zsh with the SH_WORD_SPLIT option turned on.
Like other option syntaxes, options can be turned off by replacing the initial `-' with a `+'; thus `+-sh-word-split' is equivalent to
`--no-sh-word-split'. Unlike other option syntaxes, GNU-style long options cannot be stacked with any other options, so for example `-x-shword-
split' is an error, rather than being treated like `-x --shwordsplit'.
The special GNU-style option `--version' is handled; it sends to standard output the shell's version information, then exits successfully.
`--help' is also handled; it sends to standard output a list of options that can be used when invoking the shell, then exits successfully.
Option processing may be finished, allowing following arguments that start with `-' or `+' to be treated as normal arguments, in two ways.
Firstly, a lone `-' (or `+') as an argument by itself ends option processing. Secondly, a special option `--' (or `+-'), which may be specified
on its own (which is the standard POSIX usage) or may be stacked with preceding options (so `-x-' is equivalent to `-x --'). Options are not per-
mitted to be stacked after `--' (so `-x-f' is an error), but note the GNU-style option form discussed above, where `--shwordsplit' is permitted
and does not end option processing.
Except when the sh/ksh emulation single-letter options are in effect, the option `-b' (or `+b') ends option processing. `-b' is like `--', except
that further single-letter options can be stacked after the `-b' and will take effect as normal.
【訳】※ブログ執筆者
長いオプション `--emulate 'の後に(別の言葉で)エミュレーションモードが続く場合は、シェルに渡すことができます。
エミュレーションモードは、組み込みのエミュレートについて説明されているモードです。zshbuiltins(1)を参照してください。
`--emulate 'オプションは、他のオプションの前に置く必要があります(そうでなければオーバーライドされる可能性があります)が、次のオプションが尊重されるため、
要求されたエミュレーションモードを変更するために使用できます。
このオプションをシェル内のemulateコマンドと比較して使用すると、スムーズなエミュレーションを保証するために特定の追加手順が実行されることに注意してください。
たとえば、パスなどのPOSIXの使用法と競合する変数はシェル内で定義されません。
オプションは、-oオプションを使用して名前で指定できます。 -oは1文字のオプションのように機能しますが、オプション名として次の文字列を取ります。
例えば,
zsh -x -o shwordsplit scr
は、スクリプトscrを実行し、「-x」でXTRACEオプションを設定し、名前でSH_WORD_SPLITオプションを設定します。
-oの代わりに+ oを使用すると、名前でオプションをオフにできます。
-oは、先行する1文字のオプションと積み重ねることができるため、たとえば、
`-xo shwordsplit 'または` -xoshwordsplit'は `-x -o shwordsplit 'と同等です。
オプションは、GNUロングオプションスタイル `--option-name 'の名前で指定することもできます。
これが実行されると、オプション名の「-」文字が許可されます。
それらは `_ 'に変換されるため、無視されます。したがって、たとえば、 `zsh --sh-word-split 'は、SH_WORD_SPLITオプションをオンにしてzshを呼び出します。
他のオプション構文と同様に、オプションは最初の「-」を「+」に置き換えることでオフにできます。
したがって、 `+ -sh-word-split 'は` --no-sh-word-split'と同等です。
他のオプション構文とは異なり、GNUスタイルの長いオプションは他のオプションと積み重ねることができないため、
たとえば、 `-x-shwordsplit 'は、` -x --shwordsplit'のように扱われるのではなく、エラーになります。
特別なGNUスタイルのオプション `--version 'が処理されます。
シェルのバージョン情報を標準出力に送信してから、正常に終了します。
`--help 'も処理されます。
シェルを呼び出すときに使用できるオプションのリストを標準出力に送信し、正常に終了します。
オプション処理を終了して、「-」または「+」で始まる次の引数を2つの方法で通常の引数として扱うことができます。
まず、引数としての単独の `-'(または` +')は、それ自体でオプション処理を終了します。
次に、特別なオプション `-'(または` +-')は、それ自体で指定することも(POSIXの標準的な使用法です)、先行するオプションとスタックすることもできます(したがって、 `-x- 'は`と同等です。 -バツ - ')。
オプションを `-'の後にスタックすることは許可されていません(したがって、` -x-f'はエラーです)が、上記のGNUスタイルのオプション形式に注意してください。
sh / kshエミュレーションの1文字オプションが有効な場合を除いて、オプション `-b '(または` + b')はオプション処理を終了します。
`-b 'は`-'に似ていますが、 `-b 'の後にさらに1文字のオプションを積み重ねることができ、通常どおり有効になる点が異なります。
互換性
COMPATIBILITY
Zsh tries to emulate sh or ksh when it is invoked as sh or ksh respectively; more precisely, it looks at the first letter of the name by which it
was invoked, excluding any initial `r' (assumed to stand for `restricted'), and if that is `b', `s' or `k' it will emulate sh or ksh. Further-
more, if invoked as su (which happens on certain systems when the shell is executed by the su command), the shell will try to find an alternative
name from the SHELL environment variable and perform emulation based on that.
In sh and ksh compatibility modes the following parameters are not special and not initialized by the shell: ARGC, argv, cdpath, fignore, fpath,
HISTCHARS, mailpath, MANPATH, manpath, path, prompt, PROMPT, PROMPT2, PROMPT3, PROMPT4, psvar, status, watch.
The usual zsh startup/shutdown scripts are not executed. Login shells source /etc/profile followed by $HOME/.profile. If the ENV environment
variable is set on invocation, $ENV is sourced after the profile scripts. The value of ENV is subjected to parameter expansion, command substitu-
tion, and arithmetic expansion before being interpreted as a pathname. Note that the PRIVILEGED option also affects the execution of startup
files.
The following options are set if the shell is invoked as sh or ksh: NO_BAD_PATTERN, NO_BANG_HIST, NO_BG_NICE, NO_EQUALS, NO_FUNCTION_ARGZERO,
GLOB_SUBST, NO_GLOBAL_EXPORT, NO_HUP, INTERACTIVE_COMMENTS, KSH_ARRAYS, NO_MULTIOS, NO_NOMATCH, NO_NOTIFY, POSIX_BUILTINS, NO_PROMPT_PERCENT,
RM_STAR_SILENT, SH_FILE_EXPANSION, SH_GLOB, SH_OPTION_LETTERS, SH_WORD_SPLIT. Additionally the BSD_ECHO and IGNORE_BRACES options are set if zsh
is invoked as sh. Also, the KSH_OPTION_PRINT, LOCAL_OPTIONS, PROMPT_BANG, PROMPT_SUBST and SINGLE_LINE_ZLE options are set if zsh is invoked as
ksh.
【訳】※ブログ執筆者
互換性
Zshは、shまたはkshとして呼び出されると、それぞれshまたはkshをエミュレートしようとします。
より正確には、最初の「r」(「restricted」を表すと想定)を除いて、呼び出された名前の最初の文字を調べ、それが「b」、「s」、または「k」の場合はshまたはkshをエミュレートします。
さらに、suとして呼び出された場合(シェルがsuコマンドによって実行されたときに特定のシステムで発生します)、シェルはSHELL環境変数から代替名を見つけ、それに基づいてエミュレーションを実行しようとします。
shおよびksh互換モードでは、次のパラメーターは特別ではなく、シェルによって初期化されません:ARGC、argv、cdpath、fignore、fpath、HISTCHARS、mailpath、MANPATH、manpath、
path、prompt、PROMPT、PROMPT2、PROMPT3、PROMPT4、psvar 、ステータス、ウォッチ。
通常のzsh起動/シャットダウンスクリプトは実行されません。
ログインシェルソース/etc/profileの後に$ HOME /.profileが続きます。
ENV環境変数が呼び出し時に設定されている場合、$ENVはプロファイルスクリプトの後に供給されます。
ENVの値は、パス名として解釈される前に、パラメーター展開、コマンド置換、および算術展開の対象になります。
PRIVILEGEDオプションは、スタートアップファイルの実行にも影響することに注意してください
シェルがshまたはkshとして呼び出される場合、次のオプションが設定されます。 NO_BAD_PATTERN, NO_BANG_HIST, NO_BG_NICE, NO_EQUALS, NO_FUNCTION_ARGZERO,
GLOB_SUBST, NO_GLOBAL_EXPORT, NO_HUP, INTERACTIVE_COMMENTS, KSH_ARRAYS, NO_MULTIOS, NO_NOMATCH, NO_NOTIFY, POSIX_BUILTINS, NO_PROMPT_PERCENT,
RM_STAR_SILENT, SH_FILE_EXPANSION, SH_GLOB, SH_OPTION_LETTERS, SH_WORD_SPLIT.
さらに、zshがshとして呼び出された場合、BSD_ECHOおよびIGNORE_BRACESオプションが設定されます。
同様に、zshがksh呼び出された場合、KSH_OPTION_PRINT、LOCAL_OPTIONS、PROMPT_BANG、PROMPT_SUBST、およびSINGLE_LINE_ZLEオプションが設定されます。
Zshは、shやkshを呼び出して実行することも可能だと書かれています。
制限付きシェル
RESTRICTED SHELL
When the basename of the command used to invoke zsh starts with the letter `r' or the `-r' command line option is supplied at invocation, the
shell becomes restricted. Emulation mode is determined after stripping the letter `r' from the invocation name. The following are disabled in
restricted mode:
o changing directories with the cd builtin
o changing or unsetting the EGID, EUID, GID, HISTFILE, HISTSIZE, IFS, LD_AOUT_LIBRARY_PATH, LD_AOUT_PRELOAD, LD_LIBRARY_PATH, LD_PRELOAD,
MODULE_PATH, module_path, PATH, path, SHELL, UID and USERNAME parameters
o specifying command names containing /
o specifying command pathnames using hash
o redirecting output to files
o using the exec builtin command to replace the shell with another command
o using jobs -Z to overwrite the shell process' argument and environment space
o using the ARGV0 parameter to override argv[0] for external commands
o turning off restricted mode with set +r or unsetopt RESTRICTED
These restrictions are enforced after processing the startup files. The startup files should set up PATH to point to a directory of commands
which can be safely invoked in the restricted environment. They may also add further restrictions by disabling selected builtins.
Restricted mode can also be activated any time by setting the RESTRICTED option. This immediately enables all the restrictions described above
even if the shell still has not processed all startup files.
A shell Restricted Mode is an outdated way to restrict what users may do: modern systems have better, safer and more reliable ways to confine
user actions, such as chroot jails, containers and zones.
A restricted shell is very difficult to implement safely. The feature may be removed in a future version of zsh.
It is important to realise that the restrictions only apply to the shell, not to the commands it runs (except for some shell builtins). While a
restricted shell can only run the restricted list of commands accessible via the predefined `PATH' variable, it does not prevent those commands
from running any other command.
As an example, if `env' is among the list of allowed commands, then it allows the user to run any command as `env' is not a shell builtin command
and can run arbitrary executables.
So when implementing a restricted shell framework it is important to be fully aware of what actions each of the allowed commands or features
(which may be regarded as modules) can perform.
Many commands can have their behaviour affected by environment variables. Except for the few listed above, zsh does not restrict the setting of
environment variables.
If a `perl', `python', `bash', or other general purpose interpreted script it treated as a restricted command, the user can work around the
restriction by setting specially crafted `PERL5LIB', `PYTHONPATH', `BASHENV' (etc.) environment variables. On GNU systems, any command can be made
to run arbitrary code when performing character set conversion (including zsh itself) by setting a `GCONV_PATH' environment variable. Those are
only a few examples.
Bear in mind that, contrary to some other shells, `readonly' is not a security feature in zsh as it can be undone and so cannot be used to miti-
gate the above.
A restricted shell only works if the allowed commands are few and carefully written so as not to grant more access to users than intended. It is
also important to restrict what zsh module the user may load as some of them, such as `zsh/system', `zsh/mapfile' and `zsh/files', allow bypassing
most of the restrictions.
【訳】※ブログ執筆者
制限付きシェル
zshの呼び出しに使用されるコマンドのベース名が文字「r」で始まる場合、または呼び出し時に「-r」コマンドラインオプションが指定されている場合、シェルは制限されます。
エミュレーションモードは、呼び出し名から文字「r」を取り除いた後に決定されます。
以下は制限モードでは無効になっています:
o cdビルトインでディレクトリを変更する
o EGID、EUID、GID、HISTFILE、HISTSIZE、IFS、LD_AOUT_LIBRARY_PATH、
LD_AOUT_PRELOAD、LD_LIBRARY_PATH、LD_PRELOAD、MODULE_PATH、module_path、
PATH、path、SHELL、UID、およびUSERNAMEパラメーターの変更または設定解除
o /を含むコマンド名を指定する
o ハッシュを使用してコマンドパス名を指定する
o 出力をファイルにリダイレクトする
o exec組み込みコマンドを使用してシェルを別のコマンドに置き換える
o ジョブ-Zを使用して、シェルプロセスの引数と環境スペースを上書き
o ARGV0パラメーターを使用して、外部コマンドのargv [0]をオーバーライド
o set + rまたはunsetoptRESTRICTEDで制限モードをオフにする
これらの制限は、スタートアップファイルの処理後に適用されます。
スタートアップファイルは、制限された環境で安全に呼び出すことができるコマンドのディレクトリを指すようにPATHを設定する必要があります。
また、選択したビルトインを無効にすることで、さらに制限を加えることもできます。
制限付きモードは、RESTRICTEDオプションを設定することでいつでもアクティブにできます。
これにより、シェルがまだすべてのスタートアップファイルを処理していない場合でも、上記のすべての制限がすぐに有効になります。
シェル制限モードは、ユーザーが実行できることを制限する古い方法です。
最近のシステムには、chrootジェイル、コンテナー、ゾーンなどのユーザーアクションを制限するためのより優れた、より安全で信頼性の高い方法があります。
制限されたシェルを安全に実装することはとても難しいです。
この機能は、zshの将来のバージョンで削除される可能性があります。
制限はシェルにのみ適用され、実行するコマンドには適用されないことを理解することが重要です(一部のシェル組み込みを除く)。
制限付きシェルは、事前定義された「PATH」変数を介してアクセスできるコマンドの制限付きリストのみを実行できますが、それらのコマンドが他のコマンドを実行することを妨げることはありません。
例として、「env」が許可されたコマンドのリストに含まれている場合、「env」はシェル組み込みコマンドではなく、任意の実行可能ファイルを実行できるため、ユーザーは任意のコマンドを実行できます。
したがって、制限付きシェルフレームワークを実装する場合は、許可された各コマンドまたは機能(モジュールと見なされる場合があります)が実行できるアクションを十分に理解することが重要です
多くのコマンドは、環境変数の影響を受けて動作する可能性があります。
上記のいくつかを除いて、zshは環境変数の設定を制限しません。
`perl '、` python'、 `bash '、またはその他の汎用インタープリター型スクリプトが制限付きコマンドとして扱われた場合、ユーザーは、特別に細工された「PERL5LIB」、「PYTHONPATH」、「BASHENV」(など)環境変数を設定することにより、制限を回避できます。
GNUシステムでは、 `GCONV_PATH '環境変数を設定することにより、文字セット変換(zsh自体を含む)を実行するときに任意のコードを実行するように任意のコマンドを作成できます。
これらはほんの一例です。
他のいくつかのシェルとは異なり、「読み取り専用」は元に戻すことができ、上記を軽減するために使用できないため、zshのセキュリティ機能ではないことに注意してください。
制限付きシェルは、許可されたコマンドが少なく、意図したよりも多くのアクセスをユーザーに許可しないように注意深く記述されている場合にのみ機能します。
また、 `zsh / system '、` zsh / mapfile'、 `zsh / files 'など、ユーザーがロードできるzshモジュールを制限することも重要です。これにより、ほとんどの制限を回避できます。
制限付きシェルの設定をした時に実行できない事柄について書かれています。
起動/終了 ファイル
STARTUP/SHUTDOWN FILES
Commands are first read from /etc/zshenv; this cannot be overridden. Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the for-
mer affects all startup files, while the second only affects global startup files (those shown here with an path starting with a /). If one of
the options is unset at any point, any subsequent startup file(s) of the corresponding type will not be read. It is also possible for a file in
$ZDOTDIR to re-enable GLOBAL_RCS. Both RCS and GLOBAL_RCS are set by default.
Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile.
Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlo-
gin and $ZDOTDIR/.zlogin are read.
When a login shell exits, the files $ZDOTDIR/.zlogout and then /etc/zlogout are read. This happens with either an explicit exit via the exit or
logout commands, or an implicit exit by reading end-of-file from the terminal. However, if the shell terminates due to exec'ing another process,
the logout files are not read. These are also affected by the RCS and GLOBAL_RCS options. Note also that the RCS option affects the saving of
history files, i.e. if RCS is unset when the shell exits, no history file will be saved.
If ZDOTDIR is unset, HOME is used instead. Files listed above as being in /etc may be in another directory, depending on the installation.
As /etc/zshenv is run for all instances of zsh, it is important that it be kept as small as possible. In particular, it is a good idea to put
code that does not need to be run for every single shell behind a test of the form `if [[ -o rcs ]]; then ...' so that it will not be executed
when zsh is invoked with the `-f' option.
Any of these files may be pre-compiled with the zcompile builtin command (see zshbuiltins(1)). If a compiled file exists (named for the original
file plus the .zwc extension) and it is newer than the original file, the compiled file will be used instead.
【訳】※ブログ執筆者
起動/終了 ファイル
コマンドは最初に /etc/zshenv から読み込みます。; これは上書きできません。
その後の動作は、RCSおよびGLOBAL_RCSオプションによって変更されます;
前者のRCCはすべてのスタートアップファイルに影響し、後者のGLOBAL_RCSはグローバルスタートアップファイルにのみ影響します。
オプションの1つがいずれかの時点で設定解除されている場合、対応するタイプの後続のスタートアップファイルは読み取られません。
$ ZDOTDIR内のファイルでGLOBAL_RCSを再度有効にすることもできます。 RCSとGLOBAL_RCSの両方がデフォルトで設定されています。
次に、コマンドは$ZDOTDIR/.zshenvから読み込みます。
シェルがログインシェルの場合、コマンドは/etc/zprofileから読み取られ、次に$ZDOTDIR/.zprofileから読み取られます。
そして、シェルが対話型の場合、コマンドは/etc/zshrcから読み取られ、次に$ZDOTDIR/.zshrcから読み取られます。
最後に、シェルがログインシェルの場合、/etc/zloginと$ ZDOTDIR/.zloginが読み取られます。
ログインシェルが終了すると、ファイル$ ZDOTDIR / .zlogout、次に/ etc/zlogoutが読み取られます。
これは、exitコマンドまたはlogoutコマンドによる明示的な終了、または端末からファイルの終わりを読み取ることによる暗示的な終了のいずれかで発生します。
ただし、別のプロセスを実行したためにシェルが終了した場合、ログアウトファイルは読み取られません。
これらは、RCSおよびGLOBAL_RCSオプションの影響も受けます。
RCSオプションは、履歴ファイルの保存に影響することにも注意してください。
シェルの終了時にRCSが設定されていない場合、履歴ファイルは保存されません。
ZDOTDIRが設定されていない場合、代わりにHOMEが使用されます。
上記の/etcにあるファイルは、インストールによっては別のディレクトリにある場合があります。
/etc/zshenvはzshのすべてのインスタンスに対して実行されるため、可能な限り小さく保つことが重要です。
特に、 `if [[-o rcs]];の形式のテストの背後に、すべてのシェルに対して実行する必要のないコードを配置することをお勧めします。次に... 'を使用して、「-f」オプションを指定してzshを呼び出したときに実行されないようにします。
これらのファイルはいずれも、zcompile組み込みコマンドを使用してプリコンパイルできます。 (zshbuiltins(1)を見てください).
コンパイル済みファイルが存在し(元のファイルと.zwc拡張子にちなんで名付けられている)、元のファイルよりも新しい場合は、代わりにコンパイル済みファイルが使用されます。
/etc/zshenvは、最初に読み込まれるファイルです。全てのインスタンスで実行されるため、可能な限り小さいファイルにする必要があります。
ログインシェル起動時
ログインシェル起動時は以下の順番で読み込みます。
- /etc/zshenv
- $ZDOTDIR/.zshenv
- etc/zprofile
- $ZDOTDIR/.zprofile
- /etc/zshrc
- $ZDOTDIR/.zshrc
- /etc/zlogin
- $ZDOTDIR/.zlogin
対話型シェル起動時
対話型シェル起動時は以下の順番で読み込みます。
- /etc/zshenv
- $ ZDOTDIR /.zshenv
- /etc/zshrc
- $ZDOTDIR/.zshrc
ファイル
FILES
$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}* (default is /tmp/zsh*)
/etc/zshenv
/etc/zprofile
/etc/zshrc
/etc/zlogin
/etc/zlogout (installation-specific - /etc is the default)
zshについては、情報を整理して今後も更新していきます。
コメント