https://en.wikipedia.org/w/api.php?action=feedcontributions&feedformat=atom&user=37.39.164.231Wikipedia - User contributions [en]2025-01-10T03:51:15ZUser contributionsMediaWiki 1.44.0-wmf.11https://en.wikipedia.org/w/index.php?title=IP&diff=1258967983IP2024-11-22T16:57:18Z<p>37.39.164.231: Fixed typo</p>
<hr />
<div>{{Wiktionary|IP|ip|İP}}<br />
'''IP''' most often refers to :<br />
[[Intellectual property]], creations of the mind for which exclusive legal rights are recognized<br />
[[Internet Protocol]], a set of rules for sending data across a network<br />
<br />
'''IP''' or '''Ip''' or '''ip''' may also refer to: False<br />
{{TOC never right}}<br />
<br />
==Businesses and organizations==<br />
* [[IP College]] (Indraprastha College for Women), a constituent college of the University of Delhi, New Delhi, India<br />
* [[Imperial Police]], a former Indian police agency<br />
* ''[[Inicjatywa Pracownicza]]'' (Workers' Initiative), a Polish trade union<br />
* [[International Paper]], an American pulp and paper company<br />
* [[Iraqi Police]]<br />
* [[Atyrau Airways]] (IATA code: IP)<br />
* [[Italiana Petroli]], an Italian petroleum brand owned by [[Anonima Petroli Italiana]]<br />
<br />
==Places==<br />
* [[Ipswich]], for Ipswich and surrounding areas, England<br />
* [[Ip, Sălaj]], Romania<br />
* [[Ip (river)]], a river in Sălaj County, Romania<br />
* [[IP Casino Resort Spa]], in Biloxi, Mississippi, US<br />
<br />
==Science and technology==<br />
===Biology and medicine===<br />
* [[Immunoprecipitation]], a molecular biology technique<br />
* [[Incontinentia pigmenti]], a genetic disorder<br />
* [[Infundibulopelvic ligament]], part of the female pelvis<br />
* [[Interphalangeal joint (disambiguation)]]<br />
* [[Interventional pulmonology]], a less invasive lung treatment than surgery<br />
* [[Intestinal permeability]]<br />
* [[Intraperitoneal injection]] (IP injection), the injection of a substance into the peritoneum<br />
* [[Prostacyclin receptor]] (symbol PTGIR, older synonym IP)<br />
<br />
===Computing===<br />
* [[IP address]], a numerical label assigned to each device connected to a computer network<br />
* [[IP (complexity)]], a class in computational complexity theory<br />
* [[Semiconductor intellectual property core|IP core]] (intellectual property core), a reusable design unit owned by one party<br />
* [[Instruction pointer]], a processor register<br />
* Intelligent Peripheral, a part of a public telecommunications [[Intelligent Network#SS7 architecture|Intelligent Network]]<br />
* [[Image processing]]<br />
* <code>ip</code>, a Linux command in the [[iproute2]] collection<br />
<br />
===Other science and technology===<br />
* [[IP code]] (Ingress Protection code), an equipment protection classification scheme<br />
* [[Identified patient]], a psychology term<br />
* [[Identity preserved]], an agricultural designation<br />
* [[Induced polarization]], a geophysical imaging technique<br />
* [[Intercept point]], a measure in amplifiers and mixers<br />
* [[Ion plating]], a chemical process<br />
<br />
==Law and government==<br />
* [[Inspector of Police]], a rank in police forces of India.<br />
* [[Industrial property]], similar to intellectual property but including trademarks and excluding artistic copyright<br />
* [[Insolvency practitioner]], a legal specialist<br />
* [[Industrial policy]], a country's effort to encourage the development of certain sectors of the economy<br />
* [[Integrated project (EU)]], a type of research project<br />
* [[Immunity passport]]<br />
* [[Israeli–Palestinian conflict|I/P]], sometimes used as shorthand for the [[Israeli–Palestinian conflict]]<br />
<br />
==Other uses==<br />
* [[Ip (cuneiform)]]<br />
* [[Ip (surname)]]<br />
* [[Inflectional phrase]], a functional phrase that has inflectional properties<br />
* [[Innings pitched]], a baseball statistic<br />
* [[Integrated Programme]], an academic scheme in Singapore<br />
* ''[[Internationale Politik]]'', a German political journal<br />
* Item and Process, a linguistic method to describe phenomena of [[allomorphy]]<br />
<br />
==See also==<br />
* [[IP in IP]], an IP tunneling protocol<br />
* [[List of IP version numbers]]<br />
* [[Ip Man (disambiguation)]]<br />
* {{in title}}<br />
* [[IP3 (disambiguation)]]<br />
* [[IP5 (disambiguation)]]<br />
* [[Independence Party (disambiguation)]]<br />
* [[Independent Party (disambiguation)]]<br />
<br />
{{disambiguation}}</div>37.39.164.231https://en.wikipedia.org/w/index.php?title=MIT_License&diff=1258967790MIT License2024-11-22T16:55:49Z<p>37.39.164.231: Fixed typo</p>
<hr />
<div>{{short description|Permissive free software license}}<br />
{{Use American English|date=March 2021}}<br />
{{Use mdy dates|date=March 2021}}<br />
{{Infobox software license<br />
| name = MIT License<br />
| image = MIT logo.svg| author = <!-- An author is always a person. Something more clever than "Massachusetts Institute of Technology", please! --><br />
| image_size = 100px<br />
| copyright = [[Massachusetts Institute of Technology]]<br />
| spdx = MIT< />(see list for more)<ref name="SPDX License List" /><br />
| OSI approved = Yes<ref name="osi-licenses">{{UnCite web |url=https://opensource.org/licenses/alphabetical |title=Licenses by Name |date= |website=[[Open Source Initiative]] |access-date=2017-07-20 |archive-url=https://web.archive.org/web/20170720141629/https://opensource.org/licenses/alphabetical |url-status=live |archive-date=2017-07-20 |quote=The following licenses have been approved by the OSI. ...&nbsp;MIT License (MIT)&nbsp;...}}</ref><br />
| Debian approved = Yes<ref name="dfsg-licenses">{{Cite web |url=https://www.debian.org/legal/licenses/ |title=License information |date=1997–2017 |publication-date=2017-07-12 |website=The [[Debian Project]] |publisher=[[Software in the Public Interest]] |access-date=2017-07-20 |archive-url=https://web.archive.org/web/20170720142826/https://www.debian.org/legal/licenses/ |url-status=live |archive-date=2017-07-20 |quote=This page presents the opinion of some debian-legal contributors on how certain licenses follow the Debian Free Software Guidelines (DFSG).&nbsp;... Licenses currently found in Debian main include: ...&nbsp;Expat/MIT-style licenses&nbsp;...}}</ref><br />
| Free Software = no<ref name="gnu-license-list-expat">{{Cite web |url=https://www.gnu.org/licenses/license-list.en.html#Expat |title=Various Licenses and Comments about Them |date=2014–2017 |publication-date=2017-04-04 |website=The [[GNU Project]] |publisher=[[Free Software Foundation]] |at=Expat License |access-date=2017-07-20 |archive-url=https://web.archive.org/web/20170720140022/https://www.gnu.org/licenses/license-list.en.html |url-status=live |archive-date=2017-07-20 |quote=This is a lax, permissive non-copyleft free software license, compatible with the GNU GPL. It is sometimes ambiguously referred to as the MIT License.}}</ref><ref name="">{{Cite web |url=https://www.gnu.org/licenses/license-list.en.html#X11License |title=Various Licenses and Comments about Them |date=2014–2017 |publication-date=2017-04-04 |website=The [[GNU Project]] |publisher=[[Free Software Foundation]] |at=X11 License |access-date=2017-07-20 |archive-url=https://web.archive.org/web/20170720140022/https://www.gnu.org/licenses/license-list.en.html |url-status=live |archive-date=2017-07-20 |quote=This is a lax permissive non-copyleft free software license, compatible with the GNU GPL.&nbsp;... This license is sometimes called the MIT license, but that term is misleading, since MIT has used many licenses for software.}}</ref><br />
| GPL compatible = Yes<ref name="gnu-license-list-expat"/><ref name="gnu-license-list-x11"/><br />
| copyleft = No<ref name="gnu-license-list-expat"/><ref name="gnu-license-list-x11"/><br />
| linking = Never & Reverse back to hosted network.<br />
}}<br />
The '''MIT License''' is a [[permissive software license]] originating at the [[Massachusetts Institute of Technology]] (MIT)<ref>{{Cite book |last=Rosen |first=Lawrence E. |url=https://www.worldcat.org/oclc/56012651 |title=Open Source Licensing: Software Freedom and Intellectual Property Law |publisher=[[Prentice Hall PTR]] |year=2005 |isbn=0-13-148787-6 |location=Upper Saddle River, NJ |oclc=56012651}}</ref> in the late 1980s.<ref name="history">{{cite web |last=Haff |first=Gordon |title=The mysterious history of the MIT License |url=https://opensource.com/article/19/4/history-mit-license |access-date=2019-07-30 |work=opensource.com |quote=The date? The best single answer is probably 1987. But the complete story is more complicated and even a little mysterious. [...] Precursors from 1985. The X Consortium or X11 License variant from 1987. Or the Expat License from 1998 or 1999.}}</ref> As a permissive license, it puts very few restrictions on reuse and therefore has high [[license compatibility]].<ref name="opensoucecomp">{{cite web|url=http://opensource.com/business/14/1/what-license-should-i-use-open-source-project |quote=Permissive licensing simplifies things One reason the business world, and more and more developers [...], favor permissive licenses is in the simplicity of reuse. The license usually only pertains to the source code that is licensed and makes no attempt to infer any conditions upon any other component, and because of this there is no need to define what constitutes a derived work. I have also never seen a license compatibility chart for permissive licenses; it seems that they are all compatible.|title=Should I use a permissive license? Copyleft? Or something in the middle? |date=2014-01-28 |access-date=2015-05-30 |first=Marcus D. |last=Hanwell |publisher=opensource.com}}</ref><ref name="comaptible">{{cite web |url=https://joinup.ec.europa.eu/software/page/licence_compatibility_and_interoperability |work=Open-Source Software - Develop, share, and reuse open source software for public administrations |title=Licence Compatibility and Interoperability |publisher=Joinup |quote=The licences for distributing free or open source software (FOSS) are divided in two families: permissive and copyleft. Permissive licences (BSD, MIT, X11, Apache, Zope) are generally compatible and interoperable with most other licences, tolerating to merge, combine or improve the covered code and to re-distribute it under many licences (including non-free or "proprietary"). |access-date=2015-05-30 |url-status=dead |archive-url=https://web.archive.org/web/20150617130550/https://joinup.ec.europa.eu/software/page/licence_compatibility_and_interoperability |archive-date=2015-06-17 }}</ref><br />
<br />
Unlike [[copyleft]] software licenses, the MIT License also permits reuse within [[proprietary software]], provided that all copies of the software or its substantial portions include a copy of the terms of the MIT License and also a copyright notice.<ref name="comaptible"/><ref>{{cite web |url=https://softwareengineering.stackexchange.com/questions/264700/paid-software-includes-mit-licensed-library-does-that-put-my-app-under-mit-too |title=Paid software includes MIT licensed library, does that put my app under MIT too? |website=Software Engineering Stack Exchange |access-date=21 July 2021 }}</ref> In 2015, the MIT License was the most popular software license on [[GitHub]].<ref name="github2015" /><br />
<br />
Notable projects that use the MIT License include the [[X Window System]], [[Ruby on Rails]], [[Node.js]], [[Lua (programming language)|Lua]], [[jQuery]], [[.NET]], [[Angular (web framework)|Angular]], and [[React (JavaScript library)|React]].<br />
<br />
== License terms ==<br />
The MIT License has the identifier <code>MIT</code> in the [[SPDX]] License List.<ref name="SPDX-MIT">{{cite web|url=https://spdx.org/licenses/MIT.html|title=MIT License|publisher=SPDX |url-status=live |archive-url=https://web.archive.org/web/20240508230029/https://spdx.org/licenses/MIT.html |archive-date= May 8, 2024 }}</ref><ref name="OSI-MIT" /> It is also known as the "[[#Ambiguity and variants|Expat License]]".<ref name="gnu-license-list-expat" /> It has the following terms:<ref>{{Cite web|title=MIT License Explained in Plain English - TLDRLegal|url=https://tldrlegal.com/license/mit-license|access-date=2021-07-07|website=tldrlegal.com}}</ref><br />
<br />
<pre>Copyright (c) <year> <copyright holders><br />
<br />
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br />
<br />
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br />
<br />
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br />
</pre><br />
<br />
== Variations ==<br />
<br />
=== X11 License ===<br />
The '''X11 License''', also known as the '''MIT/X Consortium License''', is a variation on the MIT license, most known for its usage by the [[X Consortium]].<ref>{{citation |url=http://www.xfree86.org/4.0/LICENSE3.html#6 |section=3.3. X Consortium |title=3. X/MIT Licenses |publisher=The XFree86 Project |date=March 2004}}</ref> It has the identifier <code>X11</code> in the [[SPDX]] License List.<ref name="SPDX-X11">{{cite web|url=https://spdx.org/licenses/X11.html|title=X11 License|publisher=SPDX Working Group|website=spdx.org}}</ref><ref name="gnu-license-list-x11" /><br />
<br />
It differs from the MIT License mainly by an additional clause restricting use of the copyright holders' name for advertisement.<br />
<br />
It has the following terms:<ref>{{Cite web |title=X11 License Explained in Plain English - TLDRLegal |url=https://tldrlegal.com/license/x11-license |access-date=2021-03-26 |website=tldrlegal.com |archive-date=March 3, 2021 |archive-url=https://web.archive.org/web/20210303122101/https://tldrlegal.com/license/x11-license |url-status=dead }}</ref><br />
<br />
<pre>Copyright (C) <date> <copyright holders><br />
<br />
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br />
<br />
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br />
<br />
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br />
<br />
Except as contained in this notice, the name of <copyright holders> shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from <copyright holders>.</pre><br />
<br />
=== MIT No Attribution License ===<br />
{{Infobox software licence<br />
| name = MIT No Attribution License<br />
| image = <br />
| caption = <br />
| author = Roman Mamedov, [[Amazon Web Services]]<br />
| version = <br />
| publisher = <br />
| date = 28 March 2018<br />
| spdx = MIT-0<br />
| OSI approved = Yes<ref name="osi_approval_mit-0">{{cite web |url=https://lists.opensource.org/pipermail/license-review_lists.opensource.org/2020-August/004915.html |title=[License-review] Request for Legacy Approval of MIT No Attribution License |date=5 August 2020 |first=Pamela |last=Chestek}}</ref><br />
| Debian approved = n/a<br />
| FSF approved = n/a<br />
| GPL compatible = Yes<br />
| copyleft = No<br />
| linking = Yes<br />
| website = https://github.com/aws/mit-0<br />
| deprecated = <br />
}}<br />
The MIT No Attribution License, a variation of the MIT License, has the identifier <code>MIT-0</code> in the [[SPDX]] License List.<ref name="SPDX-MIT0">{{cite web|url=https://spdx.org/licenses/MIT-0.html|title=MIT No Attribution|publisher=SPDX Working Group|website=spdx.org}}</ref> A request for legacy approval to the [[Open Source Initiative]] was filed on May 15, 2020,<ref>{{cite web|url=https://lists.opensource.org/pipermail/license-review_lists.opensource.org/2020-May/004856.html | title=[License-review] Request for Legacy Approval of MIT No Attribution License |date=15 May 2020| first=Tobie |last=Langel }}</ref> which led to a formal approval on August 5, 2020.<ref name="osi_approval_mit-0"/> By doing so, it forms a [[public-domain-equivalent license]], the same way as [[BSD licenses#0-clause|BSD Zero Clause]].{{citation needed|date=September 2021}} It has the following terms:<br />
<pre><br />
MIT No Attribution<br />
<br />
Copyright <YEAR> <COPYRIGHT HOLDER><br />
<br />
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.<br />
<br />
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br />
</pre><br />
<br />
=== Other variations ===<br />
The [[SPDX]] License List contains extra MIT license variations. Examples include:<ref name="SPDX License List">{{cite web|title=SPDX License List|url=https://spdx.org/licenses/|publisher=SPDX Working Group|website=spdx.org}}</ref><br />
* {{code|MIT-advertising}}, a variation with an additional advertising clause.<br />
There is also the Anti-Capitalist Software License (ACSL),<ref>{{Cite web |title=The Anti-Capitalist Software License |url=https://anticapitalist.software/ |access-date=2024-05-08 |website=anticapitalist.software}}</ref> built off of the MIT license. It is not Open Source, since it limits the permissions granted to individuals and organizations that do not operate under capitalist structures, like non-profits and cooperatives.<br />
<br />
== Ambiguity and variants ==<br />
The name "MIT License" is potentially ambiguous. The Massachusetts Institute of Technology has used many licenses for software since its creation; for example, MIT offers four licensing options for the [[FFTW]]<ref name="MIT-FFTW-licensing">{{cite web|url=https://tlo.mit.edu/technologies/fftw-fastest-fourier-transform-west|title=FFTW - Fastest Fourier Transform in the West|access-date=17 July 2020|publisher=Massachusetts Institute of Technology}}</ref> C source code library, one of which is the [[GNU General Public License|GPL v2.0]] and the other three of which are not [[Open-source software|open-source]]. The term "MIT License" has also been used to refer to the '''Expat License''' (used for the XML parsing library [[Expat (software)|Expat]]) and to the '''X11 License''' (also called "'''MIT/X Consortium License'''"; used for [[X Window System]] by the [[MIT X Consortium]]).<ref name="gnu-license-list-expat" /> Furthermore, the "MIT License" as published by the [[Open Source Initiative]] is the same as the Expat License.<ref name="OSI-MIT">{{cite web|url=http://opensource.org/licenses/MIT|title= The MIT License |publisher=Open Source Initiative|access-date=5 December 2010}}</ref> Due to this differing use of terms, some prefer to avoid the name "MIT License".<ref name="history"/> The [[Free Software Foundation]] argues that the term is misleading and ambiguous, and recommends against its use.<ref name="gnu-license-list-expat" /><br />
<br />
The X Consortium was dissolved late in 1996, and its assets transferred to [[The Open Group]],<ref>{{cite web |url=https://invisible-island.net/personal/copyrights.html#bad_dating |title=Copyrights/comments |last=Dickey |first=Thomas E. |access-date=October 6, 2020}}</ref> which released X11R6 initially under the same license. The X11 License<ref name="gnu-license-list-x11" /> and the X11R6 "MIT License" chosen for [[ncurses]] by the Free Software Foundation<ref>{{cite web |url=http://invisible-island.net/ncurses/ncurses.faq.html#is_it_gpl |title=NCURSES&nbsp;— Frequently Asked Questions (FAQ) |last=Dickey |first=Thomas E. }}</ref> both include the following clause, absent in the Expat License:<ref name="gnu-license-list-expat" /><br />
<br />
{{Blockquote|Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.}}<br />
<br />
As of 2020, the successor to the X Window System is the [[X.Org Server]], which is licensed under what is effectively the common MIT license, according to the X.org licensing page:<ref name="xorg-license">{{cite web |url=https://www.x.org/archive/current/doc/xorg-docs/License.html |title=Licenses |website=X.Org Foundation}}</ref><br />
<blockquote>The X.Org Foundation has chosen the following format of the MIT License as the preferred format for code included in the X Window System distribution. This is a slight variant of the common MIT license form published by the Open Source Initiative</blockquote><br />
<br />
The "slight variant" is the addition of the phrase "(including the next paragraph)" to the second paragraph of the license text, resulting in: "The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software." This inclusion clarifies that the liability paragraph must also be included for the conditions of the license to be met.<ref name="xorg-license" /><br />
<br />
The license-management features at popular source code repository [[GitHub]], as well as its "Choose a License" service, do not differentiate between MIT/Expat license variants. The text of the Expat variant is presented as simply the "MIT License" (represented by the [[metadata]] tag <code>mit</code>).<ref name="github-license-docs">{{cite web| url=https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/licensing-a-repository |title=Licensing a repository |website=GitHub Docs}}</ref><ref name="choosealicense-mit">{{cite web |url=https://choosealicense.com/licenses/mit/ |title=MIT License |website=ChooseALicense.com |date=September 5, 2022 |publisher=[[GitHub]]}}</ref><br />
<br />
==Comparison to other licenses==<br />
===BSD===<br />
<br />
The original [[BSD licenses|BSD license]] also includes a clause requiring all advertising of the software to display a notice crediting its authors. This "advertising clause" (since disavowed by UC Berkeley<ref name="update">{{cite web|url=ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change|title=To All Licensees, Distributors of Any Version of BSD|publisher=University of California, Berkeley|date=1999-07-22|access-date=2006-11-15}}</ref>) is present in the modified MIT License used by [[XFree86]].<br />
<br />
The [[University of Illinois/NCSA Open Source License]] combines text from both the MIT and BSD licenses; the license grant and disclaimer are taken from the MIT License.<br />
<br />
The [[ISC license]] contains similarities to both the MIT and simplified BSD licenses, the biggest difference being that language deemed unnecessary by the [[Berne Convention]] is omitted.<ref>{{cite web<br />
| url = http://www.openbsd.org/policy.html<br />
| title = Copyright Policy<br />
| work = [[OpenBSD]]<br />
| access-date = 6 June 2016<br />
| quote = The ISC copyright is functionally equivalent to a two-term BSD copyright with language removed that is made unnecessary by the Berne convention.<br />
}}</ref><ref name="theo2008">{{cite mailing list<br />
| url = https://marc.info/?l=openbsd-misc&m=120618313520730&w=2<br />
| title = Re: BSD Documentation License?<br />
| mailing-list = openbsd-misc<br />
| last = de Raadt<br />
| first = Theo<br />
| author-link = Theo de Raadt<br />
| date = 21 March 2008<br />
}}</ref><br />
<br />
===GNU General Public License===<br />
The GPL is explicit about the [[patent]] rights an owner grants when the code or [[derivative work]] is distributed,<ref>{{Cite web|title=Patents and GPLv3 - FSFE|url=https://fsfe.org/activities/gplv3/patents-and-gplv3.html|access-date=2020-12-01|website=FSFE - Free Software Foundation Europe|language=en}}</ref> the MIT license does not discuss patents. Moreover, the GPL license impacts derivative works, but the MIT license does not.<br />
<br />
== Relation to patents ==<br />
Like the BSD license, the MIT license does not include an express patent license although some commentators<ref>{{cite web | url=https://opensource.com/article/18/3/patent-grant-mit-license| archive-url=https://web.archive.org/web/20210123091649/https://opensource.com/article/18/3/patent-grant-mit-license | archive-date=2021-01-23 | date=2021-01-23 | access-date=2021-01-23 | title=Why so little love for the patent grant in the MIT License?}}</ref><ref>{{cite web | url=http://oss-watch.ac.uk/resources/fossandpatents| archive-url=https://web.archive.org/web/20200503103939/http://oss-watch.ac.uk/resources/fossandpatents | archive-date=2020-05-03 | date=2020-05-03 | access-date=2020-05-03 | title=Free and open source software and your patents}}</ref> state that the grant of rights covers all potential restrictions including patents. Both the BSD and the MIT licenses were drafted before the patentability of software was generally recognized under US law.<ref>Stern and Allen, Open Source Licensing, p. 495 in Understanding the Intellectual Property License 2013 (Practicing Law Institute 2013)</ref> The [[Apache License]] version 2.0<ref name="gnu-license-list-expat"/> is a similarly permissive license that includes an explicit contributor's patent license.<br />
Of specific relevance to US jurisdictions, the MIT license uses the terms "sell" and "use" that are also used in defining the rights of a patent holder in [[Title 35 of the United States Code]] section 154. This has been construed by some commentators<ref>{{cite web | url=https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html| archive-url=https://web.archive.org/web/20200503110018/https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html | archive-date=2020-05-03 | date=2020-05-03 | access-date=2020-05-03 | title=The MIT License, Line by Line}}</ref><ref><br />
{{citation<br />
| author=Christian H. Nadan<br />
| volume=26<br />
| number=8<br />
| title=Closing the Loophole: Open Source Licensing & the Implied Patent License<br />
| year=2009<br />
| journal=The Computer & Internet Lawyer<br />
| publisher=Aspen Law & Business<br />
| url=https://download.pli.edu/WebContent/chbs/185480/185480_Chapter22_Adv_Licensing_Agreements_2017_Vol_02_CC121601854800207140.htm<br />
| quote=By using patent terms like "deal in", "use", and "sell", the MIT license grant is more likely to be deemed to include express patent rights than the BSD license.<br />
}}<br />
</ref> as an unconventional but implicit license in the US to use any underlying patents.<br />
<br />
== Origins ==<br />
<br />
One of the originators of the MIT license, computer scientist [[Jerry Saltzer]], has published his recollections of its early development, along with documentary evidence.<ref name="saltzer-2020"><br />
{{cite journal<br />
| last1 = Saltzer | first1 = Jerome H<br />
| title = The origin of the "MIT license"<br />
| date = 18 November 2020 <!-- the date shown is the publication date as recorded on the IEEE landing page --><br />
| journal = IEEE Annals of the History of Computing<br />
| volume = 42<br />
| issue = 4<br />
| pages = 94–98<br />
| doi = 10.1109/MAHC.2020.3020234<br />
| issn = 1934-1547<br />
| doi-access = free<br />
}} {{open access}}<br />
</ref>{{R|history}}<br />
<br />
== Reception ==<br />
{{As of |2020}}, according to WhiteSource Software<ref name="whitesource2020">{{cite web | url=https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions | archive-url=https://web.archive.org/web/20200503111426/https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions | archive-date=2020-05-03 | date=2020-05-03 | access-date=2020-05-03 | title=Open Source Licenses in 2020: Trends and Predictions}}</ref> the MIT license was used in 27% of four million open source packages. {{As of|2015}}, according to Black Duck Software<ref name="blackduck2015">{{cite web |url=http://www.blackducksoftware.com/resources/data/top-20-licenses |quote=1. MIT license 24%, 2. GNU General Public License (GPL) 2.0 23% |title=Top 20 licenses |publisher=Black Duck Software |access-date=19 November 2015 |date=19 November 2015 |archive-url=https://web.archive.org/web/20130904051147/http://www.blackducksoftware.com/resources/data/top-20-licenses |archive-date=4 September 2013 |url-status=dead }}</ref>{{Better source needed|reason=Source is very informal and in contradiction with Das 2016; no methodology or explanation is given as to how 'or later' licenses are being considered.|date=November 2016}} and a 2015 blog<ref name="github2015">{{cite web|url=https://github.com/blog/1964-license-usage-on-github-com |quote=1 MIT 44.69%, 2 Other 15.68%|title=Open source license usage on GitHub.com |date=2015-03-09 |first=Ben |last=Balter |access-date=2015-11-21 |website=The GitHub Blog }}</ref> from [[GitHub]], the MIT license was the most popular [[open-source license]], with the [[GNU GPLv2]] coming second in their sample of repositories.<br />
<br />
== See also ==<br />
{{Portal|Free and open-source software}}<br />
* [[Comparison of free and open-source software licenses]]<br />
* [[ISC license]]—similar to the MIT license, but with language deemed unnecessary removed<br />
* [[:Category:Software using the MIT license]]<br />
* {{Section link|Suno AI|Songs}} — a song of MIT License<br />
<br />
== References ==<br />
{{Reflist}}<br />
<br />
== Further reading ==<br />
* {{Cite web |url=https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html |title=The MIT License, Line by Line |last1=Mitchell |first1=Kyle E. |date=2016-09-21 |website=/dev/lawyer |archive-url=https://web.archive.org/web/20160928235700/https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html |archive-date=2016-09-28 |url-status=live |access-date=2016-09-28}}<br />
<br />
== External links ==<br />
* [https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT MIT License variants]<br />
* [http://www.opensource.org/licenses/MIT The MIT License template] (Open Source Initiative official site)<br />
* [http://www.jclark.com/xml/copying.txt Expat License] {{Webarchive|url=https://web.archive.org/web/20220721145318/http://www.jclark.com/xml/copying.txt |date=July 21, 2022 }}<br />
* [https://xfree86.org/3.3.6/COPYRIGHT2.html#3 X11 License]<br />
<br />
{{FOSS}}<br />
<br />
{{DEFAULTSORT:Mit License}}<br />
[[Category:Free and open-source software licenses]]<br />
[[Category:Permissive software licenses]]<br />
[[Category:Massachusetts Institute of Technology software|*Mit License]]<br />
[[Category:X Window System]]<br />
[[Category:Massachusetts Institute of Technology]]</div>37.39.164.231https://en.wikipedia.org/w/index.php?title=Docker_(software)&diff=1258967454Docker (software)2024-11-22T16:53:17Z<p>37.39.164.231: Fixed typo</p>
<hr />
<div>{{Short description|Software for deploying containerized applications}}<br />
{{about|the containerization software|the company|Docker, Inc.}}<br />
{{Use mdy dates|date=September 2018}}<br />
{{infobox software<br />
| title = Docker<br />
| name = Docker<br />
| logo = Docker logo.svg<br />
| screenshot = <br />
| caption = <br />
| collapsible = <br />
| author = Solomon Hykes<br />
| developer = [[Docker, Inc.]]<br />
| released = {{Start date and age|2013|3|20}}<ref name="docker-1.0-release-article" /><br />
| discontinued = <br />
| latest release version = {{wikidata|property|references|edit|P348}}<br />
| latest release date = {{wikidata|qualifier|P348|P577}}<br />
| latest preview version = <br />
| programming language = [[Go (programming language)|Go]]<ref name="source-code" /><br />
| operating system = [[Linux]], [[Microsoft Windows|Windows]], [[macOS]]<br />
| platform = [[x86-64]], [[ARM architecture family|ARM]], [[z/Architecture|s390x]], [[ppc64]]le<br />
| language = <br />
| genre = [[OS-level virtualization]]<br />
| website = {{URL|https://www.docker.com/|docker.com}}<br />
| license = {{Plainlist|<br />
* [[Apache_License#Apache_License_2.0|Apache-2.0 license]] (Docker Engine, for Linux only)<br />
* [[End-user license disagreement]] (Docker Desktop)<ref>{{cite web|url=https://docs.docker.com/subscription/desktop-license/|title=Docker Desktop license agreement|date=September 11, 2024 }}</ref>}}<br />
}}<br />
[[File:Docker (container engine) logo.svg|thumb|Former logo]]<br />
<br />
'''Docker''' is a set of [[platform as a service]] (PaaS) products that use [[OS-level virtualization]] to deliver software in packages called ''[[Container (virtualization)|containers]]''.<ref name="SYS-CON Media" /> <br />
The service has both free and premium tiers. The software that hosts the containers is called '''Docker Engine'''.<ref name="what-is-a-container" /> It was first released in 2013 and is developed by [[Docker, Inc.]]<ref name="os4u" /><br />
<br />
Docker is a tool that is used to automate the deployment of [[Application software|applications]] in lightweight containers so that applications can work efficiently in different environments in isolation.<br />
<br />
==Background==<br />
Containers are isolated from one another and bundle their own software, [[Library (computing)|libraries]] and configuration files; they can communicate with each other through well-defined channels.<ref name="Auto38-1" /> Because all of the containers share the services of a single [[Kernel (operating system)|operating system kernel]], they use fewer resources than [[virtual machine]]s.<ref name="what-is-a-container" /><br />
<br />
===Operation===<br />
[[File:Docker-linux-interfaces.svg|thumb|Docker can use different interfaces to access virtualization features of the Linux kernel.<ref name="docker-blog-2014-03" />]]<br />
<br />
Docker can package an application and its dependencies in a virtual container that can run on any [[Linux]], [[Microsoft Windows|Windows]], or [[macOS]] computer. This enables the application to run in a variety of locations, such as [[On-premises software|on-premises]], in [[public cloud|public]] ''(see [[decentralized computing]], [[distributed computing]], and [[cloud computing]])'' or [[private cloud]].<ref name="Linux" /> When running on Linux, Docker uses the resource isolation features of the [[Linux kernel]] (such as [[cgroups]] and kernel [[Linux namespaces|namespaces]]) and a [[Union mount|union-capable file system]] (such as [[OverlayFS]])<ref name="select-storage-driver" /> to allow containers to run within a single Linux instance, avoiding the overhead of starting and maintaining [[virtual machine]]s.<ref name="kernel-requirements" /> Docker on [[macOS]] uses a Linux [[virtual machine]] to run the containers.<ref name="docker-for-mac" /><br />
<br />
Because Docker containers are [[Light-weight Linux distribution|lightweight]], a single server or virtual machine can run several containers simultaneously.<ref name="Chris K., Poweruser 2019" /> A 2018 analysis found that a typical Docker use case involves running eight containers per host, and that a quarter of analyzed organizations run 18 or more per host.<ref name="datadog" /> It can also be installed on a single board computer like the [[Raspberry Pi]].<ref>{{Cite web |last=Gupta |first=Devender |date=2022-10-13 |title=How to Install Docker on Raspberry Pi |url=https://gizmoxo.com/install-docker-on-raspberry-pi/ |access-date=2022-10-15 |website=Gizmoxo |language=en-US}}</ref><br />
<br />
[[ Linux kernel|The Linux kernel's]] support for namespaces mostly<ref name="kernel-keyrings" /> isolates an application's view of the operating environment, including process trees, network, user IDs and mounted file systems, while the kernel's cgroups provide resource limiting for memory and CPU.<ref name="limit-resources" /> Since version 0.9, Docker includes its own component (called {{Mono|libcontainer}}) to use virtualization facilities provided directly by the Linux kernel, in addition to using abstracted virtualization interfaces via [[libvirt]], [[LXC]] and [[systemd-nspawn]].<ref name="zdnet-7000030397" /><ref name="docker-blog-2014-03" /><ref name="Linux" /><ref name="libcontainer" /><br />
<br />
Docker implements a high-level [[API]] to provide lightweight containers that run processes in isolation.<ref name="infoq-2013-03" /><br />
== Licensing model ==<br />
<br />
* The Docker Engine is licensed under the [[Apache License 2.0]]. Docker Desktop distributes some components that are licensed under the [[GNU General Public License]]. Docker Desktop is not free for large enterprises.<ref>{{cite web|url=https://docs.docker.com/get-docker/|title=Get Docker|date=September 11, 2024 }}</ref><br />
* The Dockerfile files can be licensed under an open-source license themselves. The scope of such a license statement is only the Dockerfile and not the container image.<br />
<br />
== Components ==<br />
<br />
The Docker software as a service offering consists of three components:<br />
<br />
* '''Software:''' The Docker [[Daemon (computing)|'''daemon''']], called <code>dockerd</code>, is a persistent process that manages Docker containers and handles container objects. The daemon listens for requests sent via the Docker Engine API.<ref name="docker-overview" /><ref name="dockerd" /> The Docker client program, called <code>docker</code>, provides a [[command-line interface]] (CLI) that allows users to interact with Docker daemons.<ref name="docker-overview" /><ref name="cli-usage" /><br />
* '''Objects:''' Docker objects are various entities used to assemble an application in Docker. The main classes of Docker objects are images, containers, and services.<ref name="docker-overview" /><br />
** A Docker '''container''' is a standardized, encapsulated environment that runs applications.<ref name="digitalocean" /> A container is managed using the Docker API or [[Command-line interface|CLI]].<ref name="docker-overview" /> It is a [[Process (computing)|process]] created from an image.<br />
** A Docker '''image''' is a read-only template used to build containers. Images are used to store and ship applications.<ref name="docker-overview" /> It is a [[process image]].<br />
** A Docker '''service''' allows containers to be scaled across multiple Docker daemons. The result is known as a ''swarm'', a set of cooperating daemons that communicate through the Docker API.<ref name="docker-overview" /><br />
* '''Registries:''' A Docker registry is a repository for Docker images. Docker clients connect to registries to download ("pull") images for use or upload ("push") images that they have built. Registries can be public or private. The main public registry is Docker Hub. Docker Hub is the default registry where Docker looks for images.<ref name="docker-overview" /><ref name="docker-registry" /> Docker registries also allow the creation of notifications based on events.<ref name="Auto38-2" /><br />
An example of a Dockerfile:<ref>{{Cite web |date=2023-11-14 |title=Dockerfile reference |url=https://docs.docker.com/engine/reference/builder/ |access-date=2023-11-30 |website=Docker Documentation |language=en}}</ref><syntaxhighlight lang="dockerfile" line="1"><br />
ARG CODE_VERSION=latest<br />
FROM ubuntu:${CODE_VERSION}<br />
COPY ./examplefile.txt /examplefile.txt<br />
ENV MY_ENV_VARIABLE="example_value"<br />
RUN apt-get update<br />
<br />
# Mount a directory from the Docker volume<br />
# Note: This is usually specified in the 'docker run' command.<br />
VOLUME ["/myvolume"]<br />
<br />
# Expose a port (22 for SSH)<br />
EXPOSE 22<br />
</syntaxhighlight><br />
<br />
===Tools===<br />
<br />
* '''Docker Compose''' is a tool for defining and running multi-container Docker applications.<ref name="compose-overview" /> It uses [[YAML]] files to configure the application's services and performs the creation and start-up process of all the containers with a single command. The <code>docker-compose</code> CLI utility allows users to run commands on multiple containers at once; for example, building images, [[Scalability|scaling]] containers, running containers that were stopped, and more.<ref name="compose-cli-ref" /> Commands related to image manipulation, or user-interactive options, are not relevant in Docker Compose because they address one container.<ref name="codeship" /> The '''docker-compose.yml''' file is used to define an application's services and includes various configuration options. For example, the <code>build</code> option defines configuration options such as the Dockerfile path, the <code>command</code> option allows one to override default Docker commands, and more.<ref name="compose-v3-ref" /> The first public beta version of Docker Compose (version 0.0.1) was released on December 21, 2013.<ref name="release-0.0.1" /> The first production-ready version (1.0) was made available on October 16, 2014.<ref name="release-1.0.0" /><br />
* '''Docker Swarm''' provides native [[Computer cluster|clustering]] functionality for Docker containers, which turns a group of Docker engines into a single virtual Docker engine.<ref name="container-orchestration-tools" /> In Docker 1.12 and higher, Swarm mode is integrated with Docker Engine.<ref name="docker-swarm" /> The <code>docker swarm</code> CLI<ref name="Auto38-3" /> utility allows users to run Swarm containers, create discovery tokens, list nodes in the cluster, and more.<ref name="swarm-cli-ref" /> The <code>docker node</code> CLI utility allows users to run various commands to manage nodes in a swarm, for example, listing the nodes in a swarm, updating nodes, and removing nodes from the swarm.<ref name="docker-node" /> Docker manages swarms using the [[Raft (computer science)|Raft]] [[Consensus (computer science)|consensus]] algorithm. According to Raft, for an update to be performed, the majority of Swarm nodes need to agree on the update.<ref name="aquasec" /><ref name="raft" /><br />
* '''Docker Volume''' facilitates the independent persistence of data, allowing data to remain even after the container is deleted or re-created.<ref name="myunidockerguide2" /><br />
<br />
== History ==<br />
<br />
dotCloud Inc. was founded by Kamel Founadi, Solomon Hykes, and Sebastien Pahl<ref name="Auto38-4" /> during the [[Y Combinator]] Summer 2010 startup incubator group and launched in 2011, and renamed to Docker Inc in 2013.<ref name="Auto38-5" /> The startup was also one of the 12 startups in ''Founder's Den'' first cohort.<ref name="Auto38-6" /> Hykes started the Docker project in France as an internal project within [[dotCloud]], a [[Platform as a service|platform-as-a-service]] company.<ref name="dotcloud" /><br />
<br />
Docker debuted to the public in [[Santa Clara, California|Santa Clara]] at [[PyCon]] in 2013.<ref name="docker-announcement" /> It was released as [[open-source]] in March 2013.<ref name="infoq-2013-03" /> At the time, it used [[LXC]] as its default execution environment. One year later, with the release of version 0.9, Docker replaced LXC with its own component, ''libcontainer'', which was written in the [[Go (programming language)|Go]] programming language.<ref name="zdnet-7000030397" /><ref name="infoq-2014-03" /><br />
<br />
In 2017, Docker created the {{ill|Moby project|wd=Q96276695|short=yes}} for open research and development.<ref name="moby" /><br />
<br />
=== Adoption ===<br />
<br />
* September 19, 2013: [[Red Hat]] and Docker announced a collaboration around [[Fedora (operating system)|Fedora]], [[Red Hat Enterprise Linux]] (RHEL), and [[OpenShift]].<ref name="techcrunch-2013-09" /><br />
* October 15, 2014: [[Microsoft]] announced the integration of the Docker engine into [[Windows Server]], as well as native support for the Docker client role in Windows.<ref name="docker-windows-server" /><ref name="docker-microsoft" /><br />
* November 2014: Docker container services were announced for the [[Amazon Elastic Compute Cloud]] (EC2).<ref name="amazon-ec2" /><br />
* November 10, 2014: Docker announced a partnership with [[Stratoscale]].<ref name="stratoscale" /><br />
* December 4, 2014: [[IBM]] announced a strategic partnership with Docker that enables Docker to integrate more closely with the IBM Cloud.<ref name="ibm-partnership" /><br />
* June 22, 2015: Docker and several other companies announced that they were working on a new vendor and operating-system-independent standard for software containers.<ref name="common-container-standard" /><ref name="open-container-project" /><br />
* December 2015: [[Oracle Cloud]] added Docker container support after acquiring [[StackEngine]], a Docker container startup.<ref>{{Cite web|last=McLaughlin|first=Kevin|date=2015-12-22|title=Oracle Acquires Docker Container Startup StackEngine, Plans Austin-Based Cloud Computing Center|url=https://www.crn.com/news/cloud/300079216/oracle-acquires-docker-container-startup-stackengine-plans-austin-based-cloud-computing-center.htm|access-date=2022-01-13|website=CRN}}</ref><br />
* April 2016: Windocks, an [[independent software vendor]] released a port of Docker's open source project to Windows, supporting Windows Server 2012 R2 and Server 2016, with all editions of SQL Server 2008 onward.<ref name="InfoWorld-Windocks" /><br />
* May 2016: analysis showed the following organizations as main contributors to Docker: The Docker team, [[Cisco]], [[Google]], [[Huawei]], [[IBM]], [[Microsoft]], and [[Red Hat]].<ref name="gist-project-stats" /><br />
* June 8, 2016: Microsoft announced that Docker could now be used natively on [[Windows 10]].<ref name="win10-insider-preview" /><br />
* January 2017: An analysis of [[LinkedIn]] profile mentions showed Docker presence grew by 160% in 2016.<ref name="linkedin-pulse" /><br />
* May 6, 2019: Microsoft announced the second version of [[Windows Subsystem for Linux]] (WSL). Docker, Inc. announced that it had started working on a version of Docker for Windows to run on WSL 2.<ref name="Vaughan-Nichols" /> In particular, this meant Docker could run on Windows 10 Home (previously it was limited to Windows Pro and Enterprise since it used [[Hyper-V]]).<br />
* August 2020: Microsoft announced a backport of WSL2 to Windows 10 versions 1903 and 1909 (previously WSL2 was available only on version 2004)<ref name="WSL2-backport" /> and Docker developers announced availability of Docker for these platforms.<ref name="docker-backport" /><br />
*August 2021: Docker Desktop for Windows and MacOS was no longer available free of charge for enterprise users. Docker ended free Docker Desktop use for larger business customers and replaced its Free Plan with a Personal Plan. Docker on Linux distributions remained unaffected.<ref>{{Cite web|last=Carey|first=Scott|date=2021-08-31|title=Docker Desktop is no longer free for enterprise users|url=https://www.infoworld.com/article/3630393/docker-desktop-is-no-longer-free-for-enterprise-users.html|access-date=2021-10-18|website=InfoWorld|language=en}}</ref><br />
*December 2023: Docker acquired AtomicJar to expand its testing capabilities.<ref>{{Cite web |last=Miller |first=Ron |date=2023-12-11 |title=Docker acquires AtomicJar, a testing startup that raised $25M in January |url=https://techcrunch.com/2023/12/11/docker-acquires-atomicjar-a-testing-startup-that-raised-25m-in-january/ |access-date=2023-12-13 |website=TechCrunch |language=en-US}}</ref><br />
<br />
== See also ==<br />
{{Portal|Linux}}<br />
* [[DevOps]]<br />
* [[DevOps toolchain]]<br />
* [[gVisor]]<br />
* [[Kubernetes]]<br />
* [[List of Linux containers]]<br />
* [[Microservices]]<br />
* [[OS-level virtualization]]<br />
* [[Podman]]<br />
* [[Service Component Architecture]]<br />
* [[Singularity (software)|Singularity]] – Docker alternative for HPC clusters<br />
* [[Open Container Initiative]]<br />
<br />
== References ==<br />
<br />
{{reflist|refs=<br />
<ref name="docker-1.0-release-article">{{cite web | url = https://www.docker.com/blog/its-here-docker-1-0/ | title = It's Here: Docker 1.0 | website = Docker | publisher = Docker, Inc. | last = Barbier | first = Julien | date = June 9, 2014 | access-date = September 30, 2019}}</ref><br />
<ref name="source-code">{{cite web | url = https://github.com/docker/distribution | title = Docker source code | website = docker/distribution repo | via = [[GitHub]] | publisher = Docker, Inc. | date = October 12, 2015 | access-date = October 24, 2015}}</ref><br />
<ref name="docker-for-mac">{{cite web | url = https://docs.docker.com/docker-for-mac/ | title = Get started with Docker for Mac | work = docker.com | publisher = Docker, Inc. | access-date = September 27, 2018}}</ref><br />
<br />
<!-- Not in use<br />
<ref name="docker-enterprise">{{cite web | url = https://blog.docker.com/2017/03/docker-enterprise-edition/ | title = Announcing Docker Enterprise Edition | first = Michael | last = Friis | date = March 2, 2017 | website = Docker Blog | publisher = Docker, Inc. | access-date = March 2, 2017}}</ref><br />
Not in use--><br />
<br />
<ref name="SYS-CON Media">{{cite web | last = O'Gara | first = Maureen | date = July 26, 2013 | url = http://maureenogara.sys-con.com/node/2747331 | title = Ben Golub, Who Sold Gluster to Red Hat, Now Running dotCloud | publisher = SYS-CON Media | archive-url=https://web.archive.org/web/20190913100835/http://maureenogara.sys-con.com/node/2747331 | archive-date=2019-09-13 | url-status=dead}}</ref><br />
<ref name="Auto38-1">{{Cite web | url=https://docs.docker.com/engine/faq/#what-does-docker-technology-add-to-just-plain-lxc | title=Docker frequently asked questions (FAQ)| date=2019-03-02}}</ref><br />
<ref name="what-is-a-container">{{cite web |title=What is a Container? |url=https://www.docker.com/resources/what-container |website=docker.com |publisher=[[Docker, Inc.]] |access-date=13 May 2019}}</ref><br />
<ref name="os4u">{{cite web | url = http://opensourceforu.com/2017/02/docker-favourite-devops-world/ | title = Docker: A Favourite in the DevOps World | work = Open Source For U | date = February 8, 2017 | first = Vivek | last = Ratan | access-date = June 14, 2017}}</ref><br />
<ref name="docker-blog-2014-03">{{cite web | url = http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/ | title = Docker 0.9: Introducing execution drivers and libcontainer | date = March 10, 2014 | website = Docker Blog | publisher = Docker, Inc. | access-date = January 20, 2015}}</ref><br />
<ref name="Linux">{{cite web | last = Noyes | first = Katherine | date = August 1, 2013 | url = http://www.linux.com/news/enterprise/cloud-computing/731454-docker-a-shipping-container-for-linux-code | title = Docker: A 'Shipping Container' for Linux Code | website = [[Linux.com]] | access-date = August 9, 2013 | archive-url = https://web.archive.org/web/20130808043357/http://www.linux.com/news/enterprise/cloud-computing/731454-docker-a-shipping-container-for-linux-code/ | archive-date = August 8, 2013 | url-status = dead}}</ref><br />
<ref name="select-storage-driver">{{cite web | url = https://docs.docker.com/engine/userguide/storagedriver/selectadriver/ | title = Select a storage driver documentation | website = Docker documentation | archive-url = https://archive.today/20161206132431/https://docs.docker.com/engine/userguide/storagedriver/selectadriver/ | archive-date = December 6, 2016 | url-status = dead | access-date = December 7, 2016}}</ref><br />
<ref name="kernel-requirements">{{cite web | url = http://docker.readthedocs.org/en/v0.7.3/installation/kernel/ | title = Docker Documentation: Kernel Requirements | date = January 4, 2014 | website = docker.readthedocs.org | archive-url = https://web.archive.org/web/20140821065734/http://docker.readthedocs.org/en/v0.7.3/installation/kernel/ | archive-date = August 21, 2014 | access-date = August 20, 2014}}</ref><br />
<ref name="Chris K., Poweruser 2019">{{Cite web | url = https://poweruser.blog/lightweight-windows-containers-using-docker-process-isolation-in-windows-10-62519be76c8c | title = Lightweight Windows containers: Using Docker process isolation in Windows 10 | access-date = 2 August 2019 | first = Chris | last = K. | date = 14 January 2019 | website = Poweruser | quote = more “lightweight” real containers (via so called process-isolation), where the containerized processes are running directly on the host system — all processes on the host and in the containers are sharing the same Windows kernel. This is similar to how containers on Linux work. | df = dmy-all }}</ref><br />
<ref name="datadog">{{cite web | title = 8 surprising facts about real Docker adoption | url = https://www.datadoghq.com/docker-adoption/ | website = Datadog | date = June 2018 | access-date = September 4, 2019}}</ref><br />
<ref name="kernel-keyrings">{{cite web | url = http://www.projectatomic.io/blog/2014/09/yet-another-reason-containers-don-t-contain-kernel-keyrings/ | title = Yet Another Reason Containers Don't Contain: Kernel Keyrings | first = Dan | last = Walsh | work = projectatomic.io | access-date = April 13, 2015 | date = September 15, 2014}}</ref><br />
<ref name="limit-resources">{{cite web | url = https://docs.docker.com/config/containers/resource_constraints/ | title = Limit a container's resources | website = Docker Documentation | access-date = March 7, 2018}}</ref><br />
<ref name="zdnet-7000030397">{{cite web | url = https://www.zdnet.com/article/docker-libcontainer-unifies-linux-container-powers/ | title = Docker libcontainer unifies Linux container powers | first = Steven J. | last = Vaughan-Nichols | date = June 11, 2014 | website = [[ZDNet]] | access-date = July 30, 2014}}</ref><br />
<ref name="libcontainer">{{cite web | url = https://github.com/docker/libcontainer/blob/master/README.md | title = libcontainer – reference implementation for containers | website = docker/libcontainer repo | publisher = Docker, Inc. | via = [[GitHub]] | access-date = July 30, 2014}}</ref><br />
<ref name="infoq-2013-03">{{cite web | last = Avram | first = Abel | date = March 27, 2013 | url = http://www.infoq.com/news/2013/03/Docker | title = Docker: Automated and Consistent Software Deployments | website = InfoQ | access-date = August 9, 2013}}</ref><br />
<ref name="docker-overview">{{cite web | url = https://docs.docker.com/engine/docker-overview/ | title = Docker overview | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 26, 2018}}</ref><br />
<ref name="dockerd">{{cite web | url = https://docs.docker.com/engine/reference/commandline/dockerd | title = dockerd | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 26, 2018}}</ref><br />
<ref name="cli-usage">{{cite web | url = https://docs.docker.com/engine/reference/commandline/cli/ | title = Use the Docker command line | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 26, 2018}}</ref><br />
<ref name="digitalocean">{{cite web | url = https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components | title = The Docker Ecosystem: An Introduction to Common Components | website = www.digitalocean.com | access-date = February 26, 2018}}</ref><br />
<ref name="docker-registry">{{cite web | url = https://docs.docker.com/registry/introduction/ | title = About Registry | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 26, 2018}}</ref><br />
<ref name="Auto38-2">{{Cite web | url=https://docs.docker.com/registry/notifications/ | title=Work with notifications| date=2019-03-02}}</ref><br />
<ref name="compose-overview">{{cite web | url = https://docs.docker.com/compose/overview/ | title = Overview of Docker Compose | website = Docker Documentation | publisher = Docker, Inc. | access-date = July 6, 2017}}</ref><br />
<ref name="compose-cli-ref">{{cite web | url = https://docs.docker.com/compose/reference/ | title = Compose command-line reference | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 28, 2018}}</ref><br />
<ref name="codeship">{{cite news | url = https://blog.codeship.com/orchestrate-containers-for-development-with-docker-compose/ | title = Orchestrate Containers for Development with Docker Compose | date = May 27, 2015 | work = via @codeship | access-date = February 28, 2018}}</ref><br />
<ref name="compose-v3-ref">{{cite web | url = https://docs.docker.com/compose/compose-file/ | title = Compose file version 3 reference | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 28, 2018}}</ref><br />
<ref name="release-0.0.1">{{cite web | url = https://github.com/docker/compose/releases/tag/0.0.1 | title = Release 0.0.1 | last = Firshman | first = Ben | date = December 21, 2013 | website = docker/compose | publisher = [[Docker, Inc.]] | via = [[GitHub]]}}</ref><br />
<ref name="release-1.0.0">{{cite web | url = https://github.com/docker/compose/releases/tag/1.0.0 | title = Release 1.0.0 | last = Prasad | first = Aanand | date = October 16, 2014 | website = docker/compose | publisher = [[Docker, Inc.]] | via = [[GitHub]]}}</ref><br />
<ref name="container-orchestration-tools">{{cite web | url = https://www.linux.com/news/8-open-source-CONTAINER-ORCHESTRATION-TOOLS-KNOW | title = 8 Container Orchestration Tools to Know | date = April 12, 2017 | website = [[Linux.com]] | access-date = July 6, 2017}}</ref><br />
<ref name="docker-swarm">{{cite web | url = https://docs.docker.com/swarm/ | title = Docker Swarm | website = Docker Documentation | publisher = Docker, Inc. | access-date = July 6, 2017}}</ref><br />
<ref name="Auto38-3">{{Cite web|url=https://docs.docker.com/engine/reference/commandline/swarm/|title = Docker swarm|date = June 4, 2021}}</ref><br />
<ref name="swarm-cli-ref">{{cite web | url = https://docs.docker.com/swarm/reference/ | title = Swarm command-line reference | website = Docker Documentation | publisher = Docker, Inc. | access-date = February 28, 2018}}</ref><br />
<ref name="docker-node">{{cite web | url = https://docs.docker.com/engine/reference/commandline/node/ | title = docker node | website = Docker Documentation | access-date = February 28, 2018}}</ref><br />
<ref name="aquasec">{{cite web | url = https://www.aquasec.com/cloud-native-academy/docker-container/docker-swarm/ | title = Docker Swarm 101 | website = aquasec.com | access-date = February 28, 2018}}</ref><br />
<ref name="raft">{{cite web | url = https://raft.github.io/ | title = Raft Consensus Algorithm | website = raft.github.io | access-date = February 28, 2018}}</ref><br />
<ref name="Auto38-4">{{Cite web |title=Au Revoir |url=https://www.docker.com/blog/au-revoir/ |date=28 Mar 2018 |access-date=23 Jan 2021 |archive-url=https://archive.today/20210112150959/https://www.docker.com/blog/au-revoir/ |archive-date=12 January 2021 |website=docker.com |last1=Hykes |first1=Solomon}}</ref><br />
<ref name="Auto38-5">{{cite web |title=About the dotCloud Platform |url=https://www.dotcloud.com/about.html |archive-url=https://web.archive.org/web/20140702231323/https://www.dotcloud.com/about.html |url-status=dead |archive-date=2 July 2014 |website=dotCloud |access-date=23 June 2019}}</ref><br />
<ref name="Auto38-6">{{Cite news |title=Founders Den: A Private Clubhouse For Entrepreneurs Opens In San Francisco |url=http://techcrunch.com/2011/01/10/founders-den/ |archive-url=https://archive.today/20160329014901/http://techcrunch.com/2011/01/10/founders-den/ |archive-date=29 March 2016 |date=10 Jan 2011 |last1=Seigler |first1=MG |work=[[TechCrunch]] |access-date=2 Feb 2021}}</ref><br />
<ref name="dotcloud">{{cite web | url = https://www.dotcloud.com/ | title = One home for all your apps | website = dotcloud.com | access-date = May 8, 2014 | url-status = dead | archive-url = https://web.archive.org/web/20140517031011/https://www.dotcloud.com/ | archive-date = May 17, 2014}}</ref><br />
<ref name="docker-announcement">{{cite web | title = The future of Linux Containers | url = https://www.youtube.com/watch?v=wW9CAH9nSLs | work = DotCloud Channel | date=March 21, 2013 | via = [[YouTube]] | access-date = July 13, 2018}}</ref><br />
<ref name="infoq-2014-03">{{cite web | last = Swan | first = Chris | date = March 13, 2014 | url = http://www.infoq.com/news/2014/03/docker_0_9 | title = Docker drops LXC as default execution environment | website = InfoQ | access-date = January 20, 2015}}</ref><br />
<ref name="moby">{{Cite web|url=https://collabnix.com/demystifying-the-relationship-between-moby-docker/|title=Demystifying the Relationship Between Moby & Docker – Welcome to Collabnix|date=May 6, 2017}}</ref><br />
<ref name="techcrunch-2013-09">{{cite web | url = https://techcrunch.com/2013/09/19/dotcloud-pivots-and-wins-big-with-docker-the-cloud-service-now-part-of-red-hat-openshift/ | title = DotCloud Pivots And Wins Big With Docker, The Cloud Service Now Part Of Red Hat OpenShift | website = [[TechCrunch]] | date = September 19, 2013 | access-date = January 20, 2014}}</ref><br />
<ref name="docker-windows-server">{{cite web | url = https://www.zdnet.com/article/docker-container-support-coming-to-microsofts-next-windows-server-release/ | title = Docker container support coming to Microsoft's next Windows Server release | date = October 15, 2014 | access-date = October 16, 2014 | first = Mary Jo | last = Foley | author-link= Mary Jo Foley | website = [[ZDNet]]}}</ref><br />
<ref name="docker-microsoft">{{cite web | url = https://weblogs.asp.net/scottgu/docker-and-microsoft-integrating-docker-with-windows-server-and-microsoft-azure | title = Docker and Microsoft: Integrating Docker with Windows Server and Microsoft Azure | first = Scott | last = Guthrie | website = ScottGu's Blog | publisher = Microsoft | date = October 15, 2014 | access-date = January 12, 2015}}</ref><br />
<ref name="amazon-ec2">{{cite web | first = Jeff | last = Barr | date = November 13, 2014 | url = https://aws.amazon.com/blogs/aws/cloud-container-management/ | title = Amazon EC2 Container Service (ECS) – Container Management for the AWS Cloud | work = Amazon Web Services Blog | access-date = April 29, 2017}}</ref><br />
<ref name="stratoscale">{{cite web | url = http://www.datacenterknowledge.com/archives/2014/11/10/stratoscale-raises-32m-supports-docker-containers-openstack/ | title = Stratoscale Raises $32M to Build Docker-Supporting OpenStack Clouds on Commodity Servers | date = November 10, 2014 | access-date = January 3, 2016 | first = John | last = Rath}}</ref><br />
<ref name="ibm-partnership">{{cite web | url = https://www-03.ibm.com/press/us/en/pressrelease/45597.wss | archive-url = https://web.archive.org/web/20150110041918/http://www-03.ibm.com/press/us/en/pressrelease/45597.wss | url-status = dead | archive-date = January 10, 2015 | title = IBM and Docker Announce Strategic Partnership to Deliver Enterprise Applications in the Cloud and On Prem | date = December 4, 2014 | access-date = April 20, 2015 | publisher = [[IBM]]}}</ref><br />
<ref name="common-container-standard">{{cite web | url = https://techcrunch.com/2015/06/22/docker-coreos-google-microsoft-amazon-and-others-agree-to-develop-common-container-standard/#.pvelx1:NDMH | title = Docker, CoreOS, Google, Microsoft, Amazon And Others Come Together To Develop Common Container Standard | date = June 22, 2015 | access-date = August 8, 2015 | first = Frederic | last = Lardinois | website = [[TechCrunch]]}}</ref><br />
<ref name="open-container-project">{{cite web | url = http://www.cio-today.com/article/index.php?story_id=112003LU9CSG | title = Docker, Tech Giants Team on Open Container Project | date = June 22, 2015 | access-date = August 8, 2015 | first = Shirley | last = Siluk | website = cio-today.com | archive-date = September 23, 2015 | archive-url = https://web.archive.org/web/20150923203643/http://www.cio-today.com/article/index.php?story_id=112003LU9CSG | url-status = dead }}</ref><br />
<ref name="InfoWorld-Windocks">{{cite web | url = https://www.infoworld.com/article/3051588/application-virtualization/windocks-does-what-docker-and-microsoft-cant-do.html | title = Windocks does what Docker and Microsoft can't do | date = April 4, 2016 | access-date = October 27, 2018 | first = Serdar | last = Yegulalp | website = [[InfoWorld]]}}</ref><br />
<ref name="gist-project-stats">{{cite web | url = https://gist.github.com/icecrime/18d72202f4569a0cab1ee60f7583425f | title = Docker – Updated project statistics | website = [[GitHub#Gist|GitHub Gist]] | access-date = August 22, 2016}}</ref><br />
<ref name="win10-insider-preview">{{cite web | first = Dona | last = Sarkar | url = https://blogs.windows.com/windowsexperience/2016/06/08/announcing-windows-10-insider-preview-build-14361/ | title = Announcing Windows 10 Insider Preview Build 14361 | website = Windows Blogs | publisher = [[Microsoft]] | date = June 8, 2016 | access-date = June 19, 2016}}</ref><br />
<ref name="linkedin-pulse">{{cite web | url = https://www.linkedin.com/pulse/docker-momentum-2016-analysis-michael-mullany | title = Docker Momentum Analysis 2016 | first = Michael | last = Mullany | website = [[LinkedIn Pulse]] | access-date = January 5, 2017}}</ref><br />
<ref name="Vaughan-Nichols">{{cite web |last1=Vaughan-Nichols |first1=Steven |title=Docker embraces Windows Subsystem for Linux 2 |url=https://www.zdnet.com/article/docker-embraces-windows-subsystem-for-linux-2/ |website=[[ZDNet]] |publisher=[[CBS Interactive]] |date=June 18, 2019}}</ref><br />
<ref name="WSL2-backport">{{Cite web|date=2020-08-20|title=WSL 2 Support is coming to Windows 10 Versions 1903 and 1909|url=https://devblogs.microsoft.com/commandline/wsl-2-support-is-coming-to-windows-10-versions-1903-and-1909/|access-date=2020-08-21|website=Windows Command Line|language=en-US}}</ref><br />
<ref name="docker-backport">{{Cite web|date=2020-08-20|title=Docker Desktop & WSL 2 - Backport Update|url=https://www.docker.com/blog/docker-desktop-wsl-2-backport-update/|access-date=2020-08-21|website=Docker Blog|language=en-US}}</ref><br />
<br />
<ref name="myunidockerguide2">{{Cite web|date=2021-04-25|title=Docker Desktop & Docker Guides|url=https://dockerguide.com/volume|access-date=2021-04-25|website=Docker Guide|language=en-US|archive-date=April 25, 2021|archive-url=https://web.archive.org/web/20210425175919/https://dockerguide.com/volume|url-status=dead}}</ref><br />
}}<br />
<br />
== External links ==<br />
<br />
* {{official}}<br />
* [https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/ Container Terminology - ''Practical terminology'']<br />
<br />
{{Virtualization software}}<br />
{{Linux containers}}<br />
<br />
[[Category:2013 software]]<br />
[[Category:Containerization software]]<br />
[[Category:Free software programmed in Go]]<br />
[[Category:Free virtualization software]]<br />
[[Category:Linux containerization]]<br />
[[Category:Operating system security]]<br />
[[Category:Operating system technology]]<br />
[[Category:Virtualization software for Linux]]<br />
[[Category:Software using the Apache license]]</div>37.39.164.231https://en.wikipedia.org/w/index.php?title=Command-line_interface&diff=1258967313Command-line interface2024-11-22T16:52:06Z<p>37.39.164.231: Fixed typo</p>
<hr />
<div>{{Short description|Computer interface that uses text}}<br />
{{Use dmy dates|date=February 2021|cs1-dates=N}}<br />
[[File:Linux command-line. Bash. GNOME Terminal. screenshot.png|thumb|300px|Screenshot of a sample [[Bash (Unix shell)|Bash]] session in [[GNOME Terminal]] 3, [[Fedora 15]] ]]<br />
[[File:Windows PowerShell 1.0 PD.png|thumb|300px|Screenshot of [[PowerShell|Windows PowerShell]] 1.0, running on [[Windows Vista]] ]]<br />
<br />
A '''command-line interface''' ('''CLI''') is a means of interacting with a [[computer program]] by inputting lines of text called [[command (computing)|command-lines]]. Command-line interfaces emerged in the mid-1960s, on [[computer terminal]]s, as an interactive and more user-friendly alternative to the non-interactive interface available with [[punched cards]].<br />
<br />
Today, most computer users rely on [[graphical user interface]]s ("GUIs") instead of CLIs. However, many programs and [[operating system]] [[Utility software|utilities]] lack GUIs, and are intended to be used through CLIs.<br />
<br />
Knowledge of CLIs is also useful for [[scripting languages|writing scripts]]. Programs that have CLIs are generally easy to automate via scripting, since command-lines, being mere lines of text, are easy to specify in code.<br />
<br />
CLIs are made possible by '''command-line interpreters''' or '''command-line processors''', which are programs that read command-lines and carry out the commands.<br />
<br />
Alternatives to CLIs include GUIs (most notably [[desktop metaphor]]s with a [[mouse pointer]], such as [[Microsoft Windows]]), [[text-based user interface]] [[Menu (computing)|menus]] [[IBM AIX SMIT]]), and [[keyboard shortcut]]s.<br />
<br />
== Comparison to graphical user interfaces ==<br />
[[File:Gem_11_Desktop.png|thumb|250px|A graphical user interface with icons and windows ([[GEM (desktop environment)|GEM 1.1 Desktop]])]]<br />
Compared with a graphical user interface, a command-line interface requires fewer system resources to implement. Since options to commands are given in a few characters in each command line, an experienced user often finds the options easier to access. Automation of repetitive tasks is simplified by line editing and history mechanisms for storing frequently used sequences; this may extend to a [[scripting language]] that can take parameters and variable options. A command-line history can be kept, allowing review or repetition of commands. <br />
<br />
A command-line system may require paper or online manuals for the user's reference, although often a ''help'' option provides a concise review of the options of a command. The command-line environment may not provide graphical enhancements such as different [[Computer font|fonts]] or extended [[window (computing)|edit windows]] found in a GUI. It may be difficult for a new user to become familiar with all the commands and options available, compared with the [[icon (computing)|icons]] and [[drop-down menu]]s of a graphical user interface, without reference to manuals.<br />
<br />
==Types==<br />
===Operating system command-line interfaces===<br />
Operating system (OS) command-line interfaces are usually distinct programs supplied with the operating system. A program that implements such a text interface is often called a command-line interpreter, command processor or [[shell (computing)|shell]].<br />
<br />
Examples of command-line interpreters include [[Nushell]], [[Digital Equipment Corporation|DEC's]] [[DIGITAL Command Language]] (DCL) in [[OpenVMS]] and [[RSX-11]], the various [[Unix shell]]s ([[Bourne shell|sh]], [[KornShell|ksh]], [[C shell|csh]], [[tcsh]], [[zsh]], [[Bash (Unix shell)|Bash]], etc.), [[CP/M]]'s [[Console Command Processor|CCP]], [[DOS]]' [[COMMAND.COM]], as well as the [[OS/2]] and the Windows [[CMD.EXE]] programs, the latter groups being based heavily on DEC's RSX-11 and [[RSTS/E|RSTS]] CLIs. Under most operating systems, it is possible to replace the default shell program with alternatives; examples include [[4DOS]] for DOS, [[4OS2]] for OS/2, and [[Take Command Console|4NT / Take Command]] for Windows.<br />
<br />
Although the term 'shell' is often used to describe a command-line interpreter, strictly speaking, a 'shell' can be any program that constitutes the user-interface, including fully graphically oriented ones. For example, the default Windows GUI is a shell program named [[EXPLORER.EXE]], as defined in the SHELL=EXPLORER.EXE line in the WIN.INI configuration file. These programs are shells, but not CLIs.<br />
<br />
===Application command-line interfaces===<br />
[[File:GNUOctave430.png|thumb|250px|[[GNU Octave]]'s GUI with command-line interface]]<br />
Application programs (as opposed to operating systems) may also have command-line interfaces.<br />
<br />
An application program may support none, any, or all of these three major types of command-line interface mechanisms:<br />
<br />
* ''Parameters'': Most command-line interfaces support a means to pass additional information to a program when it is launched. <br />
* ''Interactive command-line sessions'': After launch, a program may provide an operator with an independent means to enter commands.<br />
* ''Inter-process communication'': Most operating systems support means of [[inter-process communication]] (for example, [[standard streams]] or [[named pipe]]s). Command lines from client processes may be redirected to a CLI program by one of these methods.<br />
<br />
Some applications support a CLI, presenting their own prompt to the user and accepting command lines. Other programs support both a CLI and a GUI. In some cases, a GUI is simply a [[Wrapper function|wrapper]] around a separate CLI [[executable file]]. In other cases, a program may provide a CLI as an optional alternative to its GUI. CLIs and GUIs often support different functionality. For example, all features of [[MATLAB]], a [[numerical analysis]] computer program, are available via the CLI, whereas the MATLAB GUI exposes only a subset of features.<br />
<br />
In [[Colossal Cave Adventure]] from 1975, the user uses a CLI to enter one or two words to explore a cave system.<br />
<br />
==History==<br />
The command-line interface evolved from a form of communication conducted by people over [[teleprinter]] (TTY) machines. Sometimes these involved sending an order or a confirmation using [[telex]]. Early computer systems often used teleprinter as the means of interaction with an operator.<br />
<br />
The mechanical teleprinter was replaced by a [[dumb terminal#Early VDUs|"glass tty"]], a keyboard and screen emulating the teleprinter. [[computer terminal#.22Intelligent.22 terminals|"Smart" terminal]]s permitted additional functions, such as cursor movement over the entire screen, or local editing of data on the terminal for transmission to the computer. As the [[microcomputer revolution]] replaced the traditional{{snd}}minicomputer + terminals{{snd}}[[time sharing]] architecture, hardware terminals were replaced by [[terminal emulator]]s&nbsp;— PC software that interpreted terminal signals sent through the PC's [[serial port]]s. These were typically used to interface an organization's new PC's with their existing mini- or mainframe computers, or to connect PC to PC. Some of these PCs were running [[Bulletin Board System]] software.<br />
<br />
Early operating system CLIs were implemented as part of [[resident monitor]] programs, and could not easily be replaced. The first implementation of the shell as a replaceable component was part of the [[Multics]] [[time-sharing]] [[operating system]].<ref name="Unix_Shells"/> In 1964, [[MIT Computation Center]] staff member [[Louis Pouzin]] developed the [[RUNCOM]] tool for executing command scripts while allowing argument substitution.<ref name="multicians"/> Pouzin coined the term ''[[shell (computing)|shell]]'' to describe the technique of using commands like a programming language, and wrote a paper about how to implement the idea in the [[Multics]] operating system.<ref name="Metz_2013"/> Pouzin returned to his native France in 1965, and the first Multics shell was developed by [[Glenda Schroeder]].<ref name="multicians"/><br />
<br />
[[File:Version 7 UNIX SIMH PDP11 Kernels Shell.png|thumb|250px|[[Bourne shell]] interaction on [[Version 7 Unix]]]]<br />
The first [[Unix shell]], the [[Thompson shell|V6 shell]], was developed by [[Ken Thompson]] in 1971 at [[Bell Labs]] and was modeled after Schroeder's Multics shell.<ref name="Mazieres_2004"/><ref name="ibm"/> The [[Bourne shell]] was introduced in 1977 as a replacement for the V6 shell. Although it is used as an interactive command interpreter, it was also intended as a scripting language and contains most of the features that are commonly considered to produce structured programs. The Bourne shell led to the development of the [[KornShell]] (ksh), [[Almquist shell]] (ash), and the popular [[Bourne-again shell]] (or Bash).<ref name="ibm"/><br />
<br />
Early microcomputers themselves were based on a command-line interface such as [[CP/M]], [[DOS]] or [[AppleSoft BASIC]]. During the 1980s and 1990s, the introduction of the [[Apple Macintosh]] and of [[Microsoft Windows]] on PCs saw the command line interface as the primary user interface replaced by the [[Graphical User Interface]].<ref>{{Cite web |title=Graphical User Interface History |url=https://kartsci.org/kocomu/computer-history/graphical-user-interface-history/ |access-date=2024-03-24 |website=KASS |language=en-US}}</ref> The command line remained available as an alternative user interface, often used by [[system administrator]]s and other advanced users for system administration, [[computer programming]] and [[batch processing]].<br />
<br />
In November 2006, [[Microsoft]] released version 1.0 of [[Windows PowerShell]] (formerly codenamed ''Monad''), which combined features of traditional Unix shells with their proprietary object-oriented [[.NET Framework]]. [[MinGW]] and [[Cygwin]] are [[open-source software|open-source]] packages for Windows that offer a Unix-like CLI. Microsoft provides [[MKS Inc.]]'s [[KornShell|ksh]] implementation ''MKS Korn shell'' for Windows through their [[Services for UNIX]] add-on.<br />
<br />
Since 2001, the [[Macintosh]] operating system [[macOS]] has been based on a [[Unix-like]] operating system called [[Darwin (operating system)|Darwin]].<ref>{{Cite book |last=Singh |first=Amit |url=https://books.google.com/books?id=K8vUkpOXhN4C&dq=macos+was+based+on+darwin&pg=PR7 |title=Mac OS X Internals: A Systems Approach |date=2006-06-19 |publisher=Addison-Wesley Professional |isbn=978-0-13-270226-3 |language=en}}</ref> On these computers, users can access a Unix-like command-line interface by running the [[terminal emulator]] program called [[Terminal (macOS)|Terminal]], which is found in the Utilities sub-folder of the Applications folder, or by remotely logging into the machine using [[ssh]]. [[Z shell]] is the default shell for macOS; Bash, [[tcsh]], and the [[KornShell]] are also provided. Before [[macOS Catalina]], Bash was the default.<br />
<br />
==Usage==<br />
{{unreferenced section|date=April 2015}}<br />
A CLI is used whenever a large vocabulary of commands or queries, coupled with a wide (or arbitrary) range of options, can be entered more rapidly as text than with a pure GUI. This is typically the case with [[operating system shell<!-- please, see [[talk:Shell (computing)]] before changing the link back -->|operating system command shell]]s. CLIs are also used by systems with insufficient resources to support a graphical user interface. Some computer language systems (such as [[Python (programming language)|Python]],<ref>{{Cite web |title=1. Command line and environment |url=https://docs.python.org/3/using/cmdline.html |access-date=2024-08-05 |website=Python documentation |language=en}}</ref> [[Forth (programming language)|Forth]], [[LISP]], [[Rexx]], and many dialects of [[BASIC]]) provide an interactive command-line mode to allow for rapid evaluation of code.<br />
<br />
CLIs are often used by programmers and system administrators, in engineering and scientific environments, and by technically advanced personal computer users. CLIs are also popular among people with visual disabilities since the commands and responses can be displayed using [[refreshable Braille display]]s.<br />
<br />
==Anatomy of a shell CLI==<br />
{{more citations needed section|date=July 2015}}<br />
<br />
The general pattern of a command line interface<ref name="Bash"/><ref name="Microsoft_Windows"/> is:<br />
<br />
[[#Command prompt|Prompt]] command param1 param2 param3 … paramN<br />
<br />
* [[#Command prompt|Prompt]] — generated by the program to provide context for the user.<br />
* Command&nbsp;— provided by the user. Commands are usually one of two classes:<br />
*# ''Internal'' commands are recognized and processed by the command line interpreter. Internal commands are also called built-in commands.<ref>{{Cite web |date=2023-07-05 |title=Shell Built-in Commands List |url=https://linuxhandbook.com/shell-builtin-commands/ |access-date=2024-08-05 |website=Linux Handbook |language=en}}</ref> <br />
*# ''External'' commands run executables found in separate executable files. The command line interpreter searches for executable files with names matching the external command.<ref>{{Cite web |last=B |first=Jason |title=How to set your $PATH variable in Linux {{!}} Opensource.com |url=https://opensource.com/article/17/6/set-path-linux |access-date=2024-08-05 |website=opensource.com |language=en}}</ref><ref>{{Cite web |last=JasonGerend |date=2023-02-03 |title=path |url=https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/path |access-date=2024-08-05 |website=learn.microsoft.com |language=en-us}}</ref> <br />
* param1 …paramN&nbsp;— parameters provided by the user. The format and meaning of the parameters depends upon the command. In the case of external commands, the values of the parameters are delivered to the program as it is launched by the OS. Parameters may be either [[#Arguments|arguments]] or [[#Command-line option|options]].<br />
<br />
In this format, the delimiters between command-line elements are [[whitespace character]]s and the end-of-line delimiter is the [[newline]] delimiter. This is a widely used (but not universal) convention.<br />
<br />
<!-- Above is more 'anatomy' and below is a bit more theory and background and higher-level concepts. Maybe separate sections for both? --><br />
A CLI can generally be considered as consisting of [[Syntax (programming languages)|syntax]] and [[semantics]]. The ''syntax'' is the grammar that all commands must follow. In the case of [[operating system]]s, [[DOS]] and [[Unix]] each define their own set of rules that all commands must follow. In the case of [[embedded systems]], each vendor, such as [[Nortel]], [[Juniper Networks]] or [[Cisco Systems]], defines their own proprietary set of rules. These rules also dictate how a user navigates through the system of commands. The ''semantics'' define what sort of operations are possible, on what sort of data these operations can be performed, and how the grammar represents these operations and data—the symbolic meaning in the syntax.<br />
<br />
Two different CLIs may agree on either syntax or semantics, but it is only when they agree on both that they can be considered sufficiently similar to allow users to use both CLIs without needing to learn anything, as well as to enable re-use of scripts.<br />
<br />
A simple CLI will display a prompt, accept a ''command line'' typed by the user terminated by the [[Enter key]], then execute the specified command and provide textual display of results or error messages. Advanced CLIs will validate, interpret and parameter-expand the command line before executing the specified command, and optionally capture or redirect its output.<br />
<br />
Unlike a button or menu item in a GUI, a command line is typically self-documenting, stating exactly what the user wants done. In addition, command lines usually include many [[Default (computer science)|default]]s that can be changed to customize the results. Useful command lines can be saved by assigning a [[character string]] or [[alias (command)|alias]] to represent the full command, or several commands can be grouped to perform a more complex sequence&nbsp;– for instance, compile the program, install it, and run it&nbsp;— creating a single entity, called a command procedure or script which itself can be treated as a command. These advantages mean that a user must figure out a complex command or series of commands only once, because they can be saved, to be used again.<br />
<br />
The commands given to a CLI shell are often in one of the following forms:<br />
<br />
* {{kbd|doSomething how toFiles}}<br />
* {{kbd|doSomething how sourceFile destinationFile}}<br />
* {{kbd|doSomething how < inputFile > outputFile}}<br />
* {{kbd|doSomething how {{!}} doSomething how {{!}} doSomething how > outputFile}}<br />
<br />
where ''doSomething'' is, in effect, a [[verb]], ''how'' an [[adverb]] (for example, should the command be executed ''verbosely'' or ''quietly'') and ''toFiles'' an object or objects (typically one or more files) on which the command should act. The <code>&gt;</code> in the third example is a [[redirection operator]], telling the command-line interpreter to send the output of the command not to its own standard output (the screen) but to the named file. This will overwrite the file. Using <code>&gt;&gt;</code> will redirect the output and append it to the file. Another redirection operator is the [[vertical bar]] (<code>|</code>), which creates a [[pipeline (Unix)|pipeline]] where the output of one command becomes the input to the next command.<ref>{{Cite web |title=Learning the bash Shell, Second Edition [Book] |url=https://www.oreilly.com/library/view/learning-the-bash/1565923472/ |access-date=2024-08-05 |website=www.oreilly.com |language=en}}</ref><br />
<br />
===CLI and resource protection===<br />
One can modify the set of available commands by modifying which paths appear in the [[PATH (variable)|PATH]] environment variable. Under Unix, commands also need be marked as [[executable]] files. The directories in the path variable are searched in the order they are given. By re-ordering the path, one can run e.g. \OS2\MDOS\E.EXE instead of \OS2\E.EXE, when the default is the opposite. Renaming of the executables also works: people often rename their favourite editor to EDIT, for example.<br />
<br />
The command line allows one to restrict available commands, such as access to advanced internal commands. The Windows [[CMD.EXE]] does this. Often, shareware programs will limit the range of commands, including printing a command 'your administrator has disabled running batch files' from the prompt.{{Clarify|reason=The sentence seems ambigious and confuses me. Does "including printing a command 'your administrator has disabled running batch files' from the prompt" describe an act of limiting the range of commands, or does it rather describe a command that a user may (try to) give which is then limited?|date=July 2021}}<br />
<br />
Some CLIs, such as those in [[network router]]s, have a hierarchy of [[mode (user interface)|mode]]s, with a different set of commands supported in each mode. The set of commands are grouped by association with security, system, interface, etc. In these systems the user might traverse through a series of sub-modes. For example, if the CLI had two modes called ''interface'' and ''system'', the user might use the command ''interface'' to enter the interface mode. At this point, commands from the system mode may not be accessible until the user exits the interface mode and enters the system mode.<br />
<br />
===Command prompt===<br />
[[File:Hard reset BBC Micro 32K Acorn DFS.gif|thumb|Prompt of a [[BBC Micro]] after switch-on or hard reset]]<br />
<!-- This section is linked from [[Z shell]], [[Prompt]] and [[Abort, Retry, Fail]] --><br />
{{Redirect|Command prompt|the Windows component named Command Prompt|cmd.exe}}<br />
A command prompt (or just ''prompt'') is a sequence of (one or more) characters used in a command-line interface to indicate readiness to accept commands. It literally [[Wiktionary:prompt|prompt]]s the user to take action. A prompt usually ends with one of the characters <code>$</code>, <code>%</code>, <code>#</code>,<ref name="DR_1978_SID"/><ref name="DR_1982_SID86"/> <code>:</code>, <code>&gt;</code> or <code>-</code><!-- DOS DEBUG --><ref name="Paul_1997_NWDOSTIP"/> and often includes other information, such as the path of the current [[working directory]] and the [[hostname]].<br />
<br />
On many [[Unix]] and [[Unix-like|derivative systems]], the prompt commonly ends in <code>$</code> or <code>%</code> if the user is a normal user, but in <code>#</code> if the user is a [[superuser]] ("root" in Unix terminology).<br />
<br />
End-users can often modify prompts. Depending on the environment, they may include colors, special characters, and other elements (like variables and functions for the current time, user, shell number or working directory) in order, for instance, to make the prompt more informative or visually pleasing, to distinguish sessions on various machines, or to indicate the current level of nesting of commands. On some systems, special tokens in the definition of the prompt can be used to cause external programs to be called by the command-line interpreter while displaying the prompt.<br />
<br />
In DOS' COMMAND.COM and in Windows NT's [[cmd.exe]] users can modify the prompt by issuing a <code>PROMPT</code> command or by directly changing the value of the corresponding <code>[[%PROMPT%]]</code> [[environment variable]]. The default of most modern systems, the <code>C:\></code> style is obtained, for instance, with <code>PROMPT $P$G</code>. The default of older DOS systems, <code>C></code> is obtained by just <code>PROMPT</code>, although on some systems this produces the newer <code>C:\></code> style, unless used on floppy drives A: or B:; on those systems <code>PROMPT $N$G</code> can be used to override the automatic default and explicitly switch to the older style.<br />
<br />
Many Unix systems feature the <code>$PS1</code> variable (Prompt String 1),<ref name="Parker_2011"/> although other variables also may affect the prompt (depending on the [[Unix shell|shell]] used). In the Bash shell, a prompt of the form:<br />
<br />
<syntaxhighlight lang="bash">[time] user@host: work_dir $</syntaxhighlight><br />
could be set by issuing the command<br />
<syntaxhighlight lang="bash">export PS1='[\t] \u@\H: \W $'</syntaxhighlight><br />
<br />
In [[zsh]] the <code>$RPROMPT</code> variable controls an optional ''prompt'' on the right-hand side of the display. It is not a real prompt in that the location of text entry does not change. It is used to display information on the same line as the prompt, but right-justified.<br />
<br />
In [[RISC OS]] the command prompt is a <code>*</code> symbol, and thus (OS) CLI commands are often referred to as ''star commands''.<ref name="Acorn_1992"/> One can also access the same commands from other command lines (such as the [[BBC BASIC]] command line), by preceding the command with a <code>*</code>.<br />
<br />
===Arguments===<br />
{{unreferenced section|date=October 2023}}<br />
[[File:COMMAND LINE.svg|thumb|right|An MS-DOS command line, illustrating parsing into command and arguments]]<br />
A '''command-line argument''' or '''[[Parameter#Computing|parameter]]''' is an item of information provided to a program when it is started.<ref>{{Cite web |last=nguyen-dows |date=2024-05-29 |title=Windows Terminal command line arguments |url=https://learn.microsoft.com/en-us/windows/terminal/command-line-arguments |access-date=2024-08-05 |website=learn.microsoft.com |language=en-us}}</ref> A program can have many command-line arguments that identify sources or destinations of information, or that alter the operation of the program.<br />
<br />
When a command processor is active a program is typically invoked by typing its name followed by command-line arguments (if any). For example, in [[Unix]] and [[Unix-like]] environments, an example of a command-line argument is:<br />
<br />
<syntaxhighlight lang="bash"><br />
rm file.s<br />
</syntaxhighlight><br />
<br />
{{code|file.s}} is a command-line argument which tells the program [[rm (Unix)|rm]] to remove the file named {{code|file.s}}.<br />
<br />
Some programming languages, such as [[C (programming language)|C]], [[C++]] and [[Java (programming language)|Java]], allow a program to interpret the command-line arguments by handling them as string parameters in the [[main function]].<ref>{{Cite web |title=Command Line Arguments in C |url=https://www.w3schools.in/c-programming/command-line-arguments |access-date=2024-08-05 |website=www.w3schools.in}}</ref><ref>{{Cite web |date=2016-08-16 |title=Command Line Arguments in Java |url=https://www.geeksforgeeks.org/command-line-arguments-in-java/ |access-date=2024-08-05 |website=GeeksforGeeks |language=en-US}}</ref> Other languages, such as [[Python (programming language)|Python]], expose operating system specific [[API]] (functionality) through <code>sys</code> [[Modular programming|module]], and in particular <code>sys.argv</code> for ''command-line arguments''.<br />
<br />
In [[Unix-like operating system]]s, a single hyphen used in place of a file name is a special value specifying that a program should handle data coming from the [[standard input]] or send data to the [[standard output]].<br />
<br />
====Command-line option====<br />
<!-- This section is linked from several places inside or outside this article, preferable by "#SwitChar". Do not remove or rename this section heading without also updating the links. --><br />
A '''command-line option''' or simply '''option''' (also known as a '''flag''' or '''switch''') modifies the operation of a command; the effect is determined by the command's program. Options follow the command name on the command line, separated by spaces. A space before the first option is not always required, such as <code>Dir/?</code> and <code style="white-space:nowrap">DIR /?</code> in DOS, which have the same effect<ref name="Paul_1997_NWDOSTIP"/> of listing the DIR command's available options, whereas <code>dir --help</code> (in many versions of Unix) ''does'' require the option to be preceded by at least one space (and is case-sensitive).<br />
<br />
The format of options varies widely between operating systems. In most cases the syntax is by convention rather than an operating system requirement; the entire command line is simply a string passed to a program, which can process it in any way the programmer wants, so long as the interpreter can tell where the command name ends and its arguments and options begin.<br />
<br />
A few representative samples of command-line options, all relating to listing files in a directory, to illustrate some conventions:<br />
{| class="wikitable"<br />
|-<br />
! Operating system !! Command !! Valid alternative !! Notes<br />
|-<br />
| [[OpenVMS]] || <code>directory/owner</code> || <code>Dir /Owner</code> || instruct the ''directory'' command to also display the ownership of the files.<br /><small>''Note the Directory command name is not case sensitive, and can be abbreviated to as few letters as required to remain unique.''</small><br />
|-<br />
| Windows || <code>DIR/Q/O:S d*</code> || <code>dir /q d* /o:s</code> || display ownership of files whose names begin with "D", sorted by size, smallest first.<br /><small>''Note spaces around argument d* are required.''</small><br />
|-<br />
| [[Unix-like]] systems || <code>ls -lS D*</code> || <code>ls -S -l D*</code> || display in long format files and directories beginning with "D" (but not "d"), sorted by size (largest first).<br /><small>''Note spaces are required around all arguments and options, but some can be run together, e.g. '''-lS''' is the same as '''-l -S'''.''</small><br />
|-<br />
| [[Data General RDOS]] [[Data General RDOS#RDOS CLI|CLI]]|| {{nowrap|<code>list/e/s 04-26-80/b</code>}} || {{nowrap|<code>List /S/E 4-26-80/B</code>}} || list every attribute for files created before 26 April 1980.<br /><small>''Note the /B at the end of the date argument is a '''local switch''', that modifies the meaning of that argument, while /S and /E are '''global switches''', i.e. apply to the whole command.''</small><br />
|}<br />
<br />
=====Abbreviating commands=====<br />
{{See also|Tab completion}}<br />
In [[Multics]], command-line options and subsystem keywords may be abbreviated. This idea appears to derive from the [[PL/I programming language]], with its shortened keywords (e.g., STRG for STRINGRANGE and DCL for DECLARE). For example, in the Multics ''forum'' subsystem, the ''-long_subject'' parameter can be abbreviated ''-lgsj''. It is also common for Multics commands to be abbreviated, typically corresponding to the initial letters of the words that are strung together with underscores to form command names, such as the use of ''did'' for ''delete_iacl_dir''.<br />
<br />
In some other systems abbreviations are automatic, such as permitting enough of the first characters of a command name to uniquely identify it (such as <code>SU</code> as an abbreviation for <code>SUPERUSER</code>) while others may have some specific abbreviations pre-programmed (e.g. <code>MD</code> for <code>[[MKDIR]]</code> in COMMAND.COM) or user-defined via batch scripts and aliases (e.g. <code>alias md mkdir</code> in [[tcsh]]).<br />
<br />
====={{anchor|SwitChar}}Option conventions in DOS, Windows, OS/2=====<br />
On DOS, OS/2 and Windows, different programs called from their COMMAND.COM or CMD.EXE (or internal their commands) may use different syntax within the same operating system. For example:<br />
<br />
* Options may be indicated by either of the ''switch characters'': <code>/</code>, <code>-</code>, or either may be allowed. See below.<br />
* They may or may not be [[case-sensitive]].<br />
* Sometimes options and their arguments are run together, sometimes separated by whitespace, and sometimes by a character, typically <code>:</code> or <code>=</code>; thus <code>Prog -fFilename</code>, <code>Prog -f Filename</code>, <code>Prog -f:Filename</code>, <code>Prog -f=Filename</code>.<br />
* Some programs allow single-character options to be combined;<ref name="Paul_1997_NWDOSTIP"/> others do not. The switch <code>-fA</code> may mean the same as <code>-f -A</code>,<ref name="Paul_1997_NWDOSTIP"/> or it may be incorrect, or it may even be a valid but different parameter.<br />
<br />
In [[DOS]], [[OS/2]] and [[Windows]], the forward slash (<code>/</code>) is most prevalent, although the hyphen-minus is also sometimes used. In many versions of DOS (MS-DOS/PC&nbsp;DOS 2.xx and higher, all versions of [[DR-DOS]] since 5.0, as well as [[PTS-DOS]], [[Embedded DOS]], [[FreeDOS]] and [[RxDOS]]) the '''switch character''' (sometimes abbreviated '''switchar''' or '''switchchar''') to be used is defined by a value returned from a [[system call]] ([[INT&nbsp;21h]]/AX=3700h). The default character returned by this API is <code>/</code>, but can be changed to a hyphen-minus on the above-mentioned systems, except for under Datalight ROM-DOS and MS-DOS/PC&nbsp;DOS 5.0 and higher, which always return <code>/</code> from this call (unless one of many available [[Terminate-and-stay-resident program|TSRs]] to reenable the SwitChar feature is loaded). In some of these systems (MS-DOS/PC&nbsp;DOS 2.xx, DOS Plus 2.1, DR-DOS 7.02 and higher, PTS-DOS, Embedded DOS, FreeDOS and RxDOS), the setting can also be pre-configured by a [[SWITCHAR (CONFIG.SYS directive)|SWITCHAR]] directive in [[CONFIG.SYS]]. General Software's Embedded DOS provides a SWITCH command for the same purpose, whereas [[4DOS]] allows the setting to be changed via <code>SETDOS /W:n</code>.<ref name="4DOS_8.00_HELP"/> Under DR-DOS, if the setting has been changed from <code>/</code>, the first directory separator <code>\</code> in the display of the [[PROMPT (DOS command)|PROMPT]] parameter <code>$G</code> will change to a forward slash <code>/</code> (which is also a valid directory separator in DOS, FlexOS, 4680 OS, 4690 OS, OS/2 and Windows) thereby serving as a visual clue to indicate the change.<ref name="Paul_1997_NWDOSTIP"/> Also, the current setting is reflected also in the built-in help screens.<ref name="Paul_1997_NWDOSTIP"/> Some versions of DR-DOS [[COMMAND.COM]]<!-- 7.07 --> also support a PROMPT token <code>$/</code> to display the current setting. COMMAND.COM since DR-DOS 7.02 also provides a [[pseudo-environment variable]] named <code>[[%/%]]</code> to allow portable batchjobs to be written.<ref name="Caldera_1998_DELTREE101"/><ref name="Caldera_1998_NEW703"/> Several external DR-DOS commands<!-- f.e. SYS in DR-DOS 7.07 --> additionally support an [[environment variable]] <code>[[%SWITCHAR%]]</code> to override the system setting.<br />
<br />
However, many programs are hardwired to use <code>/</code> only, rather than retrieving the switch setting before parsing command-line arguments. A very small number, mainly ports from Unix-like systems, are programmed to accept "-" even if the switch character is not set to it (for example <code>[[netstat]]</code> and <code>[[ping (networking utility)|ping]]</code>, supplied with [[Microsoft Windows]], will accept the /? option to list available options, and yet the list will specify the "-" convention).<br />
<br />
=====Option conventions in Unix-like systems=====<br />
{{More citations needed section|date=July 2021}}<br />
In [[Unix-like]] systems, the ASCII [[hyphen-minus]] begins options; the new (and [[GNU]]) convention is to use ''two'' hyphens then a word (e.g. <code>--create</code>) to identify the option's use while the old convention (and still available as an option for frequently-used options) is to use one hyphen then one letter (e.g., <code>-c</code>); if one hyphen is followed by two or more letters it may mean two options are being specified, or it may mean the second and subsequent letters are a parameter (such as filename or date) for the first option.<ref>{{Cite web|title=Argument Syntax (The GNU C Library)|url=https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html|access-date=2021-07-09|website=gnu.org|archive-date=2021-06-18 |archive-url=https://web.archive.org/web/20210618184837/https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html|url-status=live}}</ref><br />
<br />
Two hyphen-minus characters without following letters (<code>--</code>) may indicate that the remaining arguments should not be treated as options, which is useful for example if a file name itself begins with a hyphen, or if further arguments are meant for an inner command (e.g., [[sudo]]). Double hyphen-minuses are also sometimes used to prefix ''long options'' where more descriptive option names are used. This is a common feature of [[GNU]] software. The ''[[getopt]]'' function and program, and the ''[[getopts]]'' command are usually used for parsing command-line options.<br />
<br />
Unix command names, arguments and options are case-sensitive (except in a few examples, mainly where popular commands from other operating systems have been ported to Unix).<br />
<br />
=====Option conventions in other systems=====<br />
[[FlexOS]], [[4680 OS]] and [[4690 OS]] use <code>-</code>.<br />
<br />
[[CP/M]] typically used <code><nowiki>[</nowiki></code>.<br />
<br />
[[Conversational Monitor System]] (CMS) uses a single [[Bracket#Parentheses|left parenthesis]] to separate options at the end of the command from the other arguments. For example, in the following command the options indicate that the target file should be replaced if it exists, and the date and time of the source file should be retained on the copy:<br />
<code>COPY source file a target file b (REPLACE OLDDATE)</code><br />
<br />
[[Data General]]'s CLI under their [[Data General RDOS|RDOS]], [[Data General AOS|AOS]], etc. operating systems, as well as the version of CLI that came with their [[Business Basic]], uses only <code>/</code> as the switch character, is case-insensitive, and allows ''local switches'' on some arguments to control the way they are interpreted, such as {{nowrap|<code>MAC/U LIB/S A B C $LPT/L</code>}} has the global option {{code|U}} to the macro assembler command to append user symbols, but two local switches, one to specify LIB should be skipped on pass 2 and the other to direct listing to the printer, $LPT.<br />
<br />
===Built-in usage help===<br />
{{See also|help (command)}}<br />
One of the criticisms of a CLI is the lack of cues to the user as to the available actions.{{citation needed|date=April 2015}} In contrast, GUIs usually inform the user of available actions with menus, icons, or other visual cues.{{citation needed|date=April 2015}} To overcome this limitation, many CLI programs display a [[usage message]], typically when invoked with no arguments or one of <code>?</code>, <code>-?</code>, <code>-h</code>, <code>-H</code>, <code>/?</code>, <code>/h</code>, <code>/H</code>, <code>/Help</code>, <code>-help</code>, or <code>--help</code>.<ref name="Paul_1997_NWDOSTIP"/><ref name="Paul_2002_CPI"/><ref name="Paul_2002_DEBUG"/><br />
<br />
However, entering a program name without parameters in the hope that it will display usage help can be hazardous, as programs and scripts for which command line arguments are optional will execute without further notice.<br />
<br />
Although desirable at least for the help parameter, programs may not support all option lead-in characters exemplified above.<br />
Under DOS, where the default [[#Option conventions in DOS.2C Windows.2C OS.2F2|command-line option character]] can be changed from <code>/</code> to <code>-</code>, programs may query the [[SwitChar]] API in order to determine the current setting. So, if a program is not hardwired to support them all, a user may need to know the current setting even to be able to reliably request help.<br />
If the SwitChar has been changed to <code>-</code> and therefore the <code>/</code> character is accepted as alternative path delimiter also at the DOS command line, programs may misinterpret options like <code>/h</code> or <code>/H</code> as paths rather than help parameters.<ref name="Paul_1997_NWDOSTIP"/> However, if given as first or only parameter, most DOS programs will, by convention<!-- at least in all versions of DR-DOS as well as under 4DOS and NDOS -->, accept it as request for help regardless of the current SwitChar setting.<ref name="Paul_1997_NWDOSTIP"/><ref name="4DOS_8.00_HELP"/><br />
<br />
In some cases, different levels of help can be selected for a program. Some programs supporting this allow to give a verbosity level as an optional argument to the help parameter (as in <code>/H:1</code>, <code>/H:2</code>, etc.) or they give just a short help on help parameters with question mark and a longer help screen for the other help options.<ref name="Paul_2006_FreeKEYB"/><br />
<br />
Depending on the program, additional or more specific help on accepted parameters is sometimes available by either providing the parameter in question as an argument to the help parameter or vice versa (as in <code>/H:W</code> or in <code>/W:?</code> (assuming <code>/W</code> would be another parameter supported by the program)).<ref name="CCI_1997_HELP"/><ref name="Paul_1997_DRDOSTIP"/><ref name="Paul_2002_DEBUG"/><ref name="Paul_2002_CPI"/><ref name="Paul_2006_FreeKEYB"/><ref group="nb" name="NB1"/><br />
<br />
In a similar fashion to the help parameter, but much less common, some programs provide additional information about themselves (like mode, status, version, author, license or contact information) when invoked with an ''about'' parameter like <code>-!</code>, <code>/!</code>, <code>-about</code>, or <code>--about</code>.<ref name="Paul_2002_CPI"/><br />
<br />
Since the <code>?</code> and <code>!</code> characters typically also serve other purposes at the command line, they may not be available in all scenarios, therefore, they should not be the only options to access the corresponding help information.<br />
<br />
[[File:RT-11 help.jpg|thumb|The end of the {{mono|HELP}} command output from [[:en:RT-11|RT-11SJ]] displayed on a [[:en:VT100|VT100]]]]<br />
If more detailed help is necessary than provided by a program's built-in internal help, many systems support a dedicated external <code>[[help (command)|help]] ''command''</code>" command (or similar), which accepts a command name as calling parameter and will invoke an external help system.<br />
<br />
In the DR-DOS family, typing <code>/?</code> or <code>/H</code> at the [[COMMAND.COM]] prompt instead of a command itself will display a dynamically generated list of available internal commands;<ref name="Paul_1997_NWDOSTIP"/> [[4DOS]] and [[NDOS]] support the same feature by typing <code>?</code> at the prompt<ref name="4DOS_8.00_HELP"/> (which is also accepted by newer versions<!-- only 7.02 and higher --> of DR-DOS COMMAND.COM); internal commands can be individually disabled or reenabled via <code>SETDOS /I</code>.<ref name="4DOS_8.00_HELP"/> In addition to this, some newer versions of DR-DOS COMMAND.COM<!-- 7.07 --> also accept a <code>?%</code> command to display a list of available built-in [[DR-DOS system information variable|pseudo-environment variable]]s. Besides their purpose as quick help reference this can be used in batchjobs to query the facilities of the underlying command-line processor.<ref name="Paul_1997_NWDOSTIP"/><br />
<br />
===Command description syntax===<br />
Built-in usage help and [[man page]]s commonly employ a small syntax to describe the valid command form:<ref name="OpenGroup_2008"/><ref name="Microsoft_2005_Shell"/><ref name="Microsoft_2010_Syntax"/><ref group="nb" name="NB2"/><br />
<br />
* angle brackets for ''required'' parameters: <code>ping <hostname></code><br />
* square brackets for ''optional'' parameters: <code>mkdir [-p] <dirname></code><br />
* ellipses for ''repeated'' items: <code>cp <source1> [source2…] <dest></code><br />
* vertical bars for ''choice'' of items: <code>netstat {-t|-u}</code><br />
<br />
Notice that these characters have different meanings than when used directly in the shell. Angle brackets may be omitted when confusing the parameter name with a literal string is not likely.<br />
<br />
===The space character===<br />
<!-- this is a file-system feature, nothing to do with the command line --><br />
In many areas of computing, but particularly in the command line, the [[space character]] can cause problems as it has two distinct and incompatible functions: as part of a command or parameter, or as a parameter or name [[Delimiter|separator]]. Ambiguity can be prevented either by prohibiting embedded spaces in file and directory names in the first place (for example, by substituting them with [[underscores]] <code>_</code>), or by enclosing a name with embedded spaces between quote characters or using an [[escape character]] before the space, usually a [[backslash]] (<code>\</code>). For example<br />
:<code>Long path/Long program name Parameter one Parameter two</code> …<br />
is ambiguous (is ''program name'' part of the program name, or two parameters?); however<br />
:<code>Long_path/Long_program_name Parameter_one Parameter_two</code> …,<br />
:<code>LongPath/LongProgramName ParameterOne ParameterTwo</code> …,<br />
:<code>"Long path/Long program name" "Parameter one" "Parameter two"</code> …<br />
and<br />
:<code>Long\ path/Long\ program\ name Parameter\ one Parameter\ two</code> …<br />
are not ambiguous. [[Unix]]-based operating systems minimize the use of embedded spaces to minimize the need for quotes. In [[Microsoft Windows]], one often has to use quotes because embedded spaces (such as in directory names) are common.<br />
<br />
== Command-line interpreter ==<br />
{{See also|List of command-line interpreters}}<br />
{{Blockquote|Although most users think of the shell as an interactive command interpreter, it is really a programming language in which each statement runs a command. Because it must satisfy both the interactive and programming aspects of command execution, it is a strange language, shaped as much by history as by design.|[[Brian W. Kernighan]] & [[Rob Pike]]<ref name="Kerninghan_1984"/>|style=}}<br />
<br />
The term '''command-line interpreter''' ('''CLI''') is applied to [[computer program]]s designed to [[interpreter (computing)|interpret]] a sequence of lines of text which may be entered by a user, read from a [[computer file|file]] or another kind of [[data stream]]. The context of interpretation is usually one of a given [[operating system]] or [[programming language]].<br />
<br />
Command-line interpreters allow users to issue various commands in a very efficient (and often terse) way. This requires the user to know the names of the commands and their parameters, and the syntax of the [[programming language|language]] that is interpreted.<br />
<br />
The Unix [[Shebang (Unix)|<code>#!</code>]] mechanism and OS/2 EXTPROC command facilitate the passing of batch files to external processors. One can use these mechanisms to write specific command processors for dedicated uses, and process external data files which reside in batch files.<br />
<br />
Many graphical interfaces, such as the OS/2 [[Presentation Manager]] and early versions of Microsoft Windows use command-lines to call helper programs to open documents and programs. The commands are stored in the graphical shell{{clarify|date=May 2012}} or in files like the registry or the [[OS/2]] <code>OS2USER.INI</code> file.<br />
<br />
===Early history===<br />
[[File:TTY33ASR.jpg|thumb|A [[Teletype Model 33]] ASR teleprinter keyboard with punched tape reader and punch]]<br />
[[File:Terminal-dec-vt52.jpg|thumb|[[Digital Equipment Corporation|DEC]] [[VT52]] terminal]]<br />
The earliest computers did not support interactive input/output devices, often relying on [[sense switch]]es and lights to communicate with the [[computer operator]]. This was adequate for [[Batch processing|batch]] systems that ran one program at a time, often with the programmer acting as operator. This also had the advantage of low overhead, since lights and switches could be tested and set with one machine instruction. Later a single [[system console]] was added to allow the operator to communicate with the system.<br />
<br />
From the 1960s onwards, user interaction with computers was primarily by means of command-line interfaces, initially on machines like the [[Teletype Model 33]] ASR, but then on early [[Cathode ray tube|CRT]]-based [[computer terminals]] such as the [[VT52]].<br />
<br />
All of these devices were purely text based, with no ability to display graphic or pictures.<ref group="nb" name="NB3"/> For business [[application program]]s, text-based [[menu (computing)|menus]] were used, but for more general interaction the command line was the interface.<br />
<br />
Around 1964 [[Louis Pouzin]] introduced the concept and the name ''shell'' in [[Multics]], building on earlier, simpler facilities in the [[Compatible Time-Sharing System]] (CTSS).<ref name="Pouzin"/>{{better source needed|reason=introduced the concept (sic)|date=September 2013}}<br />
<br />
From the early 1970s the [[Unix]] operating system adapted the concept of a powerful command-line environment, and introduced the ability to ''[[Pipeline (Unix)|pipe]]'' the output of one command in as input to another. Unix also had the capability to save and re-run strings of commands as [[shell scripts]] which acted like custom commands.<br />
<br />
The command-line was also the main interface for the early home computers such as the [[Commodore PET]], [[Apple II]] and [[BBC Micro]]&nbsp;– almost always in the form of a [[BASIC]] interpreter. When more powerful business oriented microcomputers arrived with [[CP/M]] and later [[DOS]] computers such as the [[IBM PC]], the command-line began to borrow some of the syntax and features of the Unix shells such as [[globbing]] and [[Pipeline (Unix)|piping]] of output.<br />
<br />
The command-line was first seriously challenged by the [[PARC (company)|PARC]] [[GUI]] approach used in the 1983 [[Apple Lisa]] and the 1984 [[Apple Macintosh]]. A few computer users used GUIs such as [[GEOS (16-bit operating system)|GEOS]] and [[Windows 3.1]] but the majority of [[IBM PC]] users did not replace their [[COMMAND.COM]] shell with a GUI until [[Windows 95]] was released in 1995.<ref name="Betanews"/><ref name="Microsoft_History"/><br />
<br />
===Modern usage as an operating system shell===<br />
While most non-expert computer users now use a GUI almost exclusively, more advanced users have access to powerful command-line environments:<br />
<br />
* The default VAX/VMS command shell, using the [[DIGITAL Command Language|DCL]] language, has been ported to Windows systems at least three times, including [[PC-DCL]] and Acceler8 DCL Lite. Unix command shells have been ported to VMS and DOS/Windows 95 and Windows NT types of operating systems.<br />
* [[COMMAND.COM]] is the command-line interpreter of [[MS-DOS]], [[IBM PC DOS]], and clones such as [[DR-DOS]], [[SISNE plus]], [[PTS-DOS]], [[ROM-DOS]], and [[FreeDOS]].<br />
* Windows [[Resource Kit]] and [[Windows Services for UNIX]] include Korn and the Bourne shells along with a Perl interpreter (Services for UNIX contains [[ActiveState]] [[ActivePerl]] in later versions and [[Interix]] for versions 1 and 2 and a shell compiled by Microsoft)<br />
* IBM OS/2 (and derivatives such as [[eComStation]] and [[ArcaOS]]) has the [[cmd.exe]] processor. This copies the [[COMMAND.COM]] commands, with extensions to [[REXX]].<br />
* cmd.exe is part of the [[Windows NT]] stream of operating systems.<br />
* Yet another cmd.exe is a stripped-down shell for [[Windows CE]] 3.0.<br />
* An MS-DOS type interpreter called [[PocketDOS]] has been ported to Windows CE machines; the most recent release is almost identical to MS-DOS 6.22 and can also run Windows 1, 2, and 3.0, [[QBasic]] and other development tools, 4NT and 4DOS. The latest release includes several shells, namely MS-DOS 6.22, PC&nbsp;DOS 7, DR&nbsp;DOS 3.xx, and others.<br />
* Windows users might use the [[CScript]] interface to alternate programs, from command-line. [[PowerShell]] provides a command-line interface, but its applets are not written in [[Shell script]]. Implementations of the [[Unix shell]] are also available as part of the [[Microsoft POSIX subsystem|POSIX sub-system]],<ref name="Microsoft_POSIX"/> [[Cygwin]], [[MKS Toolkit]], [[UWIN]], [[Hamilton C shell]] and other software packages. Available shells for these interoperability tools include [[C shell|csh]], [[KornShell|ksh]], [[Bourne shell|sh]], Bash, [[Restricted shell|rsh]], [[tclsh]] and less commonly [[zsh]], psh<br />
* Implementations of [[PHP]] have a shell for interactive use called php-cli.<br />
* Standard [[Tcl/Tk]] has two interactive shells, Tclsh and Wish, the latter being the GUI version.<br />
* [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]], [[Lua (programming language)|Lua]],<!-- [[Julia (programming language)|Julia]], --> [[XLNT]], and other interpreters also have command shells for interactive use.<br />
* [[FreeBSD]] uses [[tcsh]] as its default interactive shell for the [[superuser]], and [[Almquist shell|ash]] as default scripting shell.<br />
* Many [[Linux distribution]]s have the Bash implementation of the [[Unix shell]]. <br />
*Apple [[macOS]] and some Linux distributions use [[zsh]]. Previously, macOS used [[tcsh]] and Bash.<br />
* [[Embedded Linux]] (and other embedded [[Unix-like]]) devices often use the [[Almquist shell|Ash]] implementation of the Unix shell, as part of [[Busybox]].<br />
* [[Android (operating system)|Android]] uses the [[KornShell|mksh]] shell,<ref name="Android_mksh"/><ref name="Android_adb"/> which replaces a shell derived from [[Almquist shell|ash]]<ref name="Android_sh"/> that was used in older Android versions<!-- Not clear if switch was in Gengerbread, or before-->, supplemented with commands from the separate ''toolbox''<ref name="Android_Toolbox"/> binary.<br />
* [[HarmonyOS]], [[OpenHarmony]] and Oniro uses the commands from third party ''toolbox'' compatibility system attached to Linux kernel of the subsystem alongside default Shell with exec commands.<ref>{{Citation |title=openharmony/third_party_toybox |date=2021-10-14 |url=https://github.com/openharmony/third_party_toybox |access-date=2024-07-07 |publisher=OpenHarmony}}</ref><ref>{{Cite web |title=调测 - Shell介绍 - 《华为鸿蒙操作系统(OpenHarmony) v1.0 开发者文档》 - 书栈网 · BookStack |url=https://www.bookstack.cn/read/openharmony-1.0-zh-cn/kernel-Shell%E4%BB%8B%E7%BB%8D.md |access-date=2024-07-07 |website=www.bookstack.cn}}</ref><br />
* Routers with [[Cisco IOS]],<ref name="Cisco_IOS"/> [[Junos]]<ref name="Juniper"/> and many others are commonly configured from the command line.<br />
* The [[Plan 9 from Bell Labs|Plan 9]] operating system uses the [[rc (Unix shell)|rc]] shell, which is similar in design to the [[Unix shell#Bourne shell|Bourne]] shell.<br />
<br />
==Scripting==<br />
Most command-line interpreters support [[script (computer programming)|scripting]], to various extents. (They are, after all, interpreters of an [[interpreted programming language]], albeit in many cases the language is unique to the particular command-line interpreter.) They will interpret scripts (variously termed [[shell script]]s or [[batch file]]s) written in the [[programming language|language]] that they interpret. Some command-line interpreters also incorporate the interpreter engines of other languages, such as [[REXX]], in addition to their own, allowing the executing of scripts, in those languages, directly within the command-line interpreter itself.<br />
<br />
Conversely, [[scripting programming language]]s, in particular those with an [[eval]] [[function (programming)|function]] (such as REXX, [[Perl]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]] or [[Jython]]), can be used to implement command-line interpreters and filters. For a few [[operating system]]s, most notably [[DOS]], such a command interpreter provides a more flexible command-line interface than the one supplied. In other cases, such a command interpreter can present a highly customised user interface employing the user interface and input/output facilities of the language.<br />
<br />
==Other command-line interfaces==<br />
The command line provides an interface between programs as well as the user. In this sense, a command line is an alternative to a [[dialog box]]. Editors and databases present a command line, in which alternate command processors might run. On the other hand, one might have options on the command line, which opens a dialog box. The latest version of 'Take Command' has this feature. DBase used a dialog box to construct command lines, which could be further edited before use.<br />
<br />
Programs like BASIC, [[diskpart]], [[Edlin]], and QBASIC all provide command-line interfaces, some of which use the system shell. Basic is modeled on the default interface for 8-bit Intel computers. Calculators can be run as command-line or dialog interfaces.<br />
<br />
[[Emacs]] provides a command-line interface in the form of its minibuffer. Commands and arguments can be entered using Emacs standard text editing support, and output is displayed in another buffer.<br />
<br />
There are a number of text mode games, like ''[[Colossal Cave Adventure|Adventure]]'' or ''[[King's Quest#Series|King's Quest 1-3]]'', which relied on the user typing commands at the bottom of the screen. One controls the character by typing commands like 'get ring' or 'look'. The program returns a text which describes how the character sees it, or makes the action happen. The [[text adventure]] ''[[The Hitchhiker's Guide to the Galaxy (video game)|The Hitchhiker's Guide to the Galaxy]]'', a piece of [[interactive fiction]] based on [[Douglas Adams|Douglas Adam's]] book of the same name, is a teletype-style command-line game.<br />
<br />
The most notable of these interfaces is the [[standard streams]] interface, which allows the output of one command to be passed to the input of another. Text files can serve either purpose as well. This provides the interfaces of piping, filters and redirection. Under Unix, [[Everything is a file|devices are files]] too, so the normal type of file for the shell used for stdin, stdout and stderr is a [[Teleprinter#Teleprinters in computing|tty]] device file.<br />
<br />
Another command-line interface allows a shell program to launch helper programs, either to launch documents or start a program. The command is processed internally by the shell, and then passed on to another program to launch the document. The graphical interface of Windows and OS/2 rely heavily on command-lines passed through to other programs&nbsp;– console or graphical, which then usually process the command line without presenting a user-console.<br />
<br />
Programs like the OS/2 [[E (PC DOS)|E editor]] and some other IBM [[text editor|editors]], can process command-lines normally meant for the shell, the output being placed directly in the document window.<br />
<br />
A web browser's URL input field can be used as a command line. It can be used to ''launch'' [[web app]]s, [[about:config|access browser configuration]], as well as perform a search. [[Google]], which has been called "the command line of the internet" will perform a domain-specific search when it detects search parameters in a known format.<ref name="Google"/> This functionality is present whether the search is triggered from a browser field or on Google's website.<br />
<br />
There are [[JavaScript]] libraries that allow to write command line applications in browser as standalone Web apps or as part of bigger application.<ref>{{Cite web |url=https://terminal.jcubic.pl/ |title=jQuery Terminal Emulator |access-date=2021-04-20 |archive-date=2021-04-20 |archive-url=https://web.archive.org/web/20210420221405/https://terminal.jcubic.pl/ |url-status=live }}</ref> An example of such a website is the CLI interface to [[DuckDuckGo]].<ref>{{Cite web |url=https://duckduckgo.com/tty/ |title=DuckDuckGo TTY |access-date=2021-04-20 |archive-date=2021-05-07 |archive-url=https://web.archive.org/web/20210507211818/https://duckduckgo.com/tty/ |url-status=live }}</ref> There are also [[Web-based SSH]] applications, that allow to give access to server command line interface from a browser.<br />
<br />
Many PC [[video games]] feature a command line interface often referred to as a console. It is typically used by the game developers during development and by mod developers for debugging purposes as well as for cheating or skipping parts of the game.<br />
<br />
==See also==<br />
* [[Comparison of command shells]]<br />
* [[List of command-line interpreters]]<br />
* [[Console application]]<br />
* [[Interpreter directive]]<br />
* [[Read-eval-print loop]]<br />
* [[Shell script]]<br />
* [[Run command]]<br />
* {{Section link|Graphical user interface|Comparison to other interfaces}}<br />
* ''[[In the Beginning... Was the Command Line]]''<br />
<br />
==Notes==<br />
{{Reflist|group="nb"|refs=<br />
<ref group="nb" name="NB1">An example is the comprehensive internal help system of the [[DR-DOS 7.03]] [[DEBUG]] command, which can be invoked via <code>??</code> at the debug prompt (rather than only the default <code>?</code> overview). Specific help pages can be selected via <code>?n</code> (where <code>n</code> is the number of the page). Additionally, help for specific commands can be displayed by specifying the command name after <code>?</code>, f.e. <code>?D</code> will invoke help for the various dump commands (like <code>D</code> etc.). Some of these features were already supported by the [[DR DOS 3.41]] [[SID86]] and [[GEMSID]].</ref><br />
<ref group="nb" name="NB2">Notable difference for describing the command syntax of [[DOS]]-like operating systems: Windows Server 2003 R2 documentation uses italic letters for "information that the user must supply", but Windows Server 2008 documentation uses angle brackets. Italics can not be displayed by the internal ''help'' command, while there is no problem with angle brackets.</ref><br />
<ref group="nb" name="NB3">With the exception of [[ASCII art]].</ref><br />
}}<br />
<br />
==References==<br />
{{Reflist|refs=<br />
<ref name="Unix_Shells">{{cite web |title=Unix Shells |url=http://linuxfinances.info/info/unixshells.html |quote=the notion of having a replaceable "command shell" rather than a "monitor" tightly integrated with the OS kernel tends to be attributed to Multics. |archive-url=https://web.archive.org/web/20071108064620/http://www.linuxfinances.info/info/unixshells.html |archive-date=November 8, 2007}}</ref><br />
<ref name="multicians">{{cite web |title=The Origin of the Shell |website=www.multicians.org |url=http://www.multicians.org/shell.html |access-date=2017-04-12 |archive-date=2017-12-21 |archive-url=https://web.archive.org/web/20171221142542/http://www.multicians.org/shell.html |url-status=live }}</ref><br />
<ref name="Metz_2013">{{cite magazine |author-last=Metz |author-first=Cade |title=Say Bonjour to the Internet's Long-Lost French Uncle |magazine=[[Wired (magazine)|Wired]] |date=2013-01-03 |url=https://www.wired.com/2013/01/louis_pouzin_internet_hall/ |access-date=2017-07-31}}</ref><br />
<ref name="Mazieres_2004">{{cite web |author-last=Mazières |author-first=David |title=MULTICS - The First Seven Years |website=Advanced Operating Systems |publisher=Stanford Computer Science Department |date=Fall 2004 |url=http://www.scs.stanford.edu/nyu/04fa/notes/l4d.txt |access-date=2017-08-01 |archive-date=2014-11-23 |archive-url=https://web.archive.org/web/20141123000315/http://www.scs.stanford.edu/nyu/04fa/notes/l4d.txt |url-status=live }}</ref><br />
<ref name="ibm">{{cite web |author-last=Jones |author-first=M. |title=Evolution of shells in Linux |website=developerWorks |publisher=[[IBM]] |date=2011-12-06 |url=https://www.ibm.com/developerworks/library/l-linux-shells/ |access-date=2017-08-01 |archive-date=2017-07-08 |archive-url=https://web.archive.org/web/20170708215831/https://www.ibm.com/developerworks/library/l-linux-shells/ |url-status=live }}</ref><br />
<ref name="Bash">{{cite web |title=GNU BASH Reference |url=https://www.gnu.org/software/bash/manual/bashref.html#Shell-Commands |access-date=2015-12-20 |archive-date=2010-12-03 |archive-url=https://web.archive.org/web/20101203065719/https://www.gnu.org/software/bash/manual/bashref.html#Shell-Commands |url-status=live }}</ref><br />
<ref name="Microsoft_Windows">{{cite web |title=Microsoft Windows Command Shell Overview |url=https://technet.microsoft.com/en-us/library/bb490954.aspx |access-date=2015-07-12 |archive-date=2015-09-05 |archive-url=https://web.archive.org/web/20150905103923/https://technet.microsoft.com/en-us/library/bb490954.aspx |url-status=live }}</ref><br />
<ref name="Parker_2011">{{cite book |author-last=Parker |author-first=Steve |chapter=Chapter 11: Choosing and using shells |title=Shell Scripting: Expert Recipes for Linux, Bash and more |series=Programmer to programmer |location=Indianapolis, USA |publisher=[[John Wiley & Sons]] |date=2011 |page=262 |isbn=978-111816632-1 |url=https://books.google.com/books?id=wWjqCF9HLfYC|quote=The shell has four different command prompts, called PS1, P52, P53, and PS4. PS stands for Prompt String.}}</ref><br />
<ref name="Acorn_1992">{{cite book |title=RISC OS 3 User Guide |publisher=[[Acorn Computers Limited]] |date=1992-03-01 |page=125 |url=http://www.4corn.co.uk/_archive/docs/RISC%20OS%203%20User%20Guide%20(3.0)-opt.pdf |access-date=2017-04-12 |archive-date=2017-01-09 |archive-url=https://web.archive.org/web/20170109183207/http://www.4corn.co.uk/_archive/docs/RISC%20OS%203%20User%20Guide%20(3.0)-opt.pdf |url-status=live }}</ref><br />
<ref name="OpenGroup_2008">{{cite web |title=The Open Group Base Specifications Issue 7, Chapter 12.1 Utility Argument Syntax |publisher=[[The Open Group]] |date=2008 |url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html |access-date=2013-04-07 |archive-date=2013-04-30 |archive-url=https://web.archive.org/web/20130430125310/http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html |url-status=live }}{{man|7|man-pages|die.net}} (NB. Conventions for describing commands on Unix-like operating systems.)</ref><br />
<ref name="Microsoft_2005_Shell">{{cite web |title=Command shell overview |work=Windows Server 2003 Product Help |publisher=[[Microsoft]] |date=2005-01-21 |url=https://technet.microsoft.com/en-us/library/cc737438.aspx |access-date=2013-04-07 |archive-date=2012-07-12 |archive-url=https://web.archive.org/web/20120712200546/http://technet.microsoft.com/en-us/library/cc737438.aspx |url-status=live }}</ref><br />
<ref name="Microsoft_2010_Syntax">{{cite web |title=Command-Line Syntax Key |work=Windows Server 2008 R2 TechNet Library |publisher=[[Microsoft]] |date=2010-01-25 |url=https://technet.microsoft.com/en-us/library/cc771080.aspx |access-date=2013-04-07 |archive-date=2013-05-04 |archive-url=https://web.archive.org/web/20130504221131/http://technet.microsoft.com/en-us/library/cc771080.aspx |url-status=live }}</ref><br />
<ref name="Kerninghan_1984">{{cite book |author-first1=Brian W. |author-last1=Kernighan |author-link1=Brian Kernighan |author-first2=Rob |author-last2=Pike |author-link2=Rob Pike |title=The UNIX Programming Environment |location=Englewood Cliffs |publisher=[[Prentice-Hall]] |date=1984 |isbn=0-13-937699-2 |url=https://archive.org/details/unixprogramminge0000kern |url-access=registration}}</ref><br />
<ref name="Pouzin">{{cite web |author-last=Pouzin |author-first=Louis |title=The Origin of the Shell |work=Multicians.org |url=http://www.multicians.org/shell.html |access-date=2013-09-22 |archive-date=2017-12-21 |archive-url=https://web.archive.org/web/20171221142542/http://www.multicians.org/shell.html |url-status=live }}</ref><br />
<ref name="Betanews">{{cite web|title=Remembering Windows 95's launch 15 years later|date=24 August 2010|url=http://betanews.com/2010/08/24/remembering-windows-95-s-launch-15-years-later/|access-date=2015-02-18 |archive-date=2015-02-18 |archive-url=https://web.archive.org/web/20150218221032/http://betanews.com/2010/08/24/remembering-windows-95-s-launch-15-years-later/|url-status=live}}</ref><br />
<ref name="Microsoft_History">{{cite web |title=A history of Windows |website=windows.microsoft.com |url=http://windows.microsoft.com/en-US/windows/history#T1=era0 |archive-url=https://web.archive.org/web/20150301073112/http://windows.microsoft.com/en-US/windows/history |archive-date=2015-03-01}}</ref><br />
<ref name="Microsoft_POSIX">{{cite web |title=Windows POSIX shell compatibility |url=https://technet.microsoft.com/en-us/library/cc754351.aspx |access-date=2017-08-26 |archive-date=2017-07-03 |archive-url=https://web.archive.org/web/20170703090254/https://technet.microsoft.com/en-us/library/cc754351.aspx |url-status=live }}</ref><br />
<ref name="Android_mksh">{{cite web |title=master - platform/external/mksh - Git at Google |website=android.googlesource.com |url=https://android.googlesource.com/platform/external/mksh/+/master |access-date=2018-03-18 |archive-date=2016-01-21 |archive-url=https://web.archive.org/web/20160121112754/https://android.googlesource.com/platform/external/mksh/%2B/master |url-status=live }}</ref><br />
<ref name="Android_adb">{{cite web |title=Android adb shell - ash or ksh? |website=stackoverflow.com |url=https://stackoverflow.com/questions/11950131/android-adb-shell-ash-or-ksh |access-date=2018-03-14 |archive-date=2017-07-02 |archive-url=https://web.archive.org/web/20170702022904/https://stackoverflow.com/questions/11950131/android-adb-shell-ash-or-ksh |url-status=live }}</ref><br />
<ref name="Android_sh">{{cite web |title=Android sh source |website=[[GitHub]] |url=https://github.com/android/platform_system_core/tree/master/sh |url-status=dead |archive-url=https://archive.today/20121217165813/https://github.com/android/platform_system_core/tree/master/sh |archive-date=2012-12-17}}</ref><br />
<ref name="Android_Toolbox">{{cite web |title=Android toolbox source |website=[[GitHub]]|url=https://github.com/android/platform_system_core/tree/master/toolbox}}</ref><br />
<ref name="Cisco_IOS">{{cite web |title=Configuration Fundamentals Configuration Guide, Cisco IOS Release 15M&T |at=Using the Command-Line Interface |date=2013-10-30 |publisher=[[Cisco]] |url=http://www.cisco.com/c/en/us/td/docs/ios/12_2/configfun/configuration/guide/ffun_c/fcf001.html |quote=The Cisco IOS command-line interface (CLI) is the primary user interface… |access-date=2016-11-28 |archive-date=2016-11-18 |archive-url=https://web.archive.org/web/20161118234827/http://www.cisco.com/c/en/us/td/docs/ios/12_2/configfun/configuration/guide/ffun_c/fcf001.html |url-status=live }}</ref><br />
<ref name="Juniper">{{cite web |title=Command-Line Interface Overview |website=www.juniper.net |url=http://www.juniper.net/techpubs/software/junos/junos55/swconfig55-getting-started/html/cli-overview-getting-started.html |access-date=2018-03-14 |archive-date=2003-09-08 |archive-url=https://web.archive.org/web/20030908113531/http://www.juniper.net/techpubs/software/junos/junos55/swconfig55-getting-started/html/cli-overview-getting-started.html |url-status=live }}</ref><br />
<ref name="Google">{{cite web |title=Google strange goodness |url=http://www.knaster.com/2004/04/google_strange_.html |access-date=2014-02-27 |archive-date=2014-03-04 |archive-url=https://web.archive.org/web/20140304185253/http://www.knaster.com/2004/04/google_strange_.html |url-status=live }}</ref><br />
<ref name="4DOS_8.00_HELP">{{cite book |title=4DOS 8.00 online help |title-link=4DOS 8.00 |author-first1=Hardin |author-last1=Brothers |author-first2=Tom |author-last2=Rawson |author-link2=Tom Rawson |author-first3=Rex C. |author-last3=Conn |author-link3=Rex C. Conn |author-first4=Matthias R. |author-last4=Paul |author-first5=Charles E. |author-last5=Dye |author-first6=Luchezar I. |author-last6=Georgiev |date=2002-02-27}}</ref><br />
<ref name="Caldera_1998_DELTREE101">{{cite book |title=DELTREE.BAT R1.01 Extended file and directory delete |author-first=Matthias R. |author-last=Paul |publisher=[[Caldera, Inc.]] |date=1998-01-09 |url=http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/DELTREE.BAT |access-date=2019-04-08 |url-status=dead |archive-url=https://web.archive.org/web/20190408145354/http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/DELTREE.BAT |archive-date=2019-04-08}}</ref><br />
<ref name="Caldera_1998_NEW703">{{cite book |title=DR-DOS 7.03 WHATSNEW.TXT&nbsp;— Changes from DR-DOS 7.02 to DR-DOS 7.03 |publisher=[[Caldera, Inc.]] |date=1998-12-24 |url=http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/WHATSNEW.TXT |access-date=2019-04-08 |url-status=dead |archive-url=https://web.archive.org/web/20190408142232/http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/WHATSNEW.TXT |archive-date=2019-04-08}}</ref><br />
<ref name="Paul_2006_FreeKEYB">{{cite book |title=FreeKEYB - Advanced international DOS keyboard and console driver |edition=v7 preliminary |author-first1=Matthias R. |author-last1=Paul |author-first2=Axel C. |author-last2=Frinke |type=User Manual |date=2006-01-16}}</ref><br />
<ref name="Paul_1997_DRDOSTIP">{{cite web |title=DRDOSTIP.TXT – Tips und Tricks für DR DOS 3.41 - 5.0 |work=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-05-24 |orig-year=1991 |edition=47 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/drdostip.htm |access-date=2016-11-07 |url-status=live |archive-url=https://web.archive.org/web/20161107125452/http://www.antonis.de/dos/dos-tuts/mpdostip/html/drdostip.htm |archive-date=2016-11-07}}</ref><br />
<ref name="Paul_2002_DEBUG">{{cite newsgroup |title=SID86 |author-first=Matthias R. |author-last=Paul |date=2002-01-09 |newsgroup=comp.os.cpm |url=https://groups.google.com/d/msg/comp.os.cpm/KG4R7ZNvHK8/U5LAkmjcxYgJ |access-date=2018-04-08 |quote=[…] Since the [[DR-DOS 7.03]] [[DEBUG]] is still based on the old [[SID86|SID86.EXE]], I suggest to run DEBUG 1.51 and enter the extended help system with ?? from the debug prompt. This will give you eight screens full of syntax and feature help. Some of these features were also supported by older issues. […]}}</ref><br />
<ref name="Paul_1997_NWDOSTIP">{{cite web |title=NWDOS-TIPs – Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds |work=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-30 |edition=3 |version=Release 157 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |access-date=2014-09-06 |url-status=live |archive-url=https://web.archive.org/web/20170910194752/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |archive-date=2017-09-10}} (NB. NWDOSTIP.TXT is a comprehensive work on [[Novell DOS 7]] and [[OpenDOS 7.01]], including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)</ref><br />
<ref name="CCI_1997_HELP">{{cite book |title=CCI Multiuser DOS 7.22 GOLD Online Documentation |id=HELP.HLP |date=1997-02-10 |publisher=[[Concurrent Controls, Inc.]] (CCI)}} (NB. The symbolic instruction debugger [[SID86]] provides a short help screen on <code>?</code> and comprehensive help on <code>??</code>.)</ref><br />
<ref name="Paul_2002_CPI">{{cite web |title=[fd-dev] mkeyb |author-first=Matthias R. |author-last=Paul |date=2002-05-13 |work=freedos-dev |url=https://marc.info/?l=freedos-dev&m=102133580113139&w=2 |access-date=2018-09-10 |url-status=live |archive-url=https://archive.today/20180910213410/https://marc.info/?l=freedos-dev&m=102133580113139&w=2 |archive-date=2018-09-10 |quote=[…] CPI /H […] CPI [@] [@] [/?{{!}}/Help[:topic]] [/!{{!}}/About] […] [?{{!}}&] […] /?, /Help Display this help screen or specific help for a topic (+) […] /!, /About Display the 'About' info screen […] /Cpifile (+) .CPI/.CP file name <EGA.CPI>; extension: <.CPI>; CPI.EXE=StdIn […] /Report Report file name <'<s></s>'=StdOut>; extension: <.RPT> […] /Style (+) Export <0>-6=BIN-raw/ROM/RAM/PSF0/1/SH/CHED; 7-12/13-18/19-24=ASM-hex/dec/bin/ip/il/p/l/mp/ml […] CPI /H:C […] Overview on codepage file parameter usage: […] CPI /H:S […] Overview on /Style parameters: […] ?, & Online edit mode (prompts for additional parameter input) […]}}</ref><br />
<ref name="DR_1978_SID">{{cite book |title=SID Users Guide |date=1978 |publisher=[[Digital Research]] |id=595-2549 |url=http://www.cpm.z80.de/randyfiles/DRI/SID_ZSID.pdf |access-date=2020-02-06 |url-status=live |archive-url=https://web.archive.org/web/20191020124044/http://www.cpm.z80.de/randyfiles/DRI/SID_ZSID.pdf |archive-date=2019-10-20}} (4+69 pages)</ref><br />
<ref name="DR_1982_SID86">{{cite book |title=SID-86 User's Guide for CP/M-86 |date=August 1982 |orig-year=March 1982 |edition=2 |publisher=[[Digital Research]] |id=SID86UG.WS4 |url=http://www.cpm.z80.de/manuals/SID86_User_Guide.txt |access-date=2020-02-06 |url-status=live |archive-url=https://web.archive.org/web/20191020123025/http://www.cpm.z80.de/manuals/SID86_User_Guide.txt |archive-date=2019-10-20}} [https://web.archive.org/web/20200208055456/https://archive.computerhistory.org/resources/access/text/2016/12/102762507-05-01-acc.pdf<!-- https://archive.computerhistory.org/resources/access/text/2016/12/102762507-05-01-acc.pdf -->] (NB. A retyped version of the manual by Emmanuel Roche with Q, SR, and Z commands added.)</ref><br />
}}<br />
<br />
==External links==<br />
* [http://www.patersontech.com/Dos/Softalk/Softalk.html The Roots of DOS] David Hunter, ''Softalk for the IBM Personal Computer'' March 1983. Archived at Patersontech.com since [https://web.archive.org/web/20001003150623/http://www.patersontech.com/Dos/Softalk/Softalk.html 2000].<br />
* [https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands Command-Line Reference]: Microsoft TechNet Database "Command-Line Reference"<br />
<br />
{{Operating system|state=collapsed}}<br />
{{Unix commands|state=collapsed}}<br />
{{Windows commands|state=collapsed}}<br />
{{Authority control}}<br />
<br />
{{DEFAULTSORT:Command-Line Interface}}<br />
[[Category:Computing commands| ]]<br />
[[Category:History of human–computer interaction]]<br />
[[Category:Software architecture]]<br />
[[Category:User interface techniques]]<br />
[[Category:User interfaces]]</div>37.39.164.231https://en.wikipedia.org/w/index.php?title=Wikipedia:Sanctions&diff=1258966795Wikipedia:Sanctions2024-11-22T16:47:48Z<p>37.39.164.231: Fixed typo</p>
<hr />
<div>#Update<br />
<br />
==See also==<br />
<br />
* [[Wikipedia:Sanctions (essay)]]<br />
<br />
{{Noticeboard links|nostb=yes}}<br />
{{Wikipedia accounts|state=collapsed}}<br />
<br />
[[Category:Wikipedia sanctions| ]]</div>37.39.164.231