Difference between revisions of "Faq unix"

From Cncz
Jump to: navigation, search
 
(Changing permissions)
 
(27 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Zie [http://www.cncz.science.ru.nl/localdoc/cncz.faq de UNIX faq (oude plek)]
+
=C&CZ's Not Frequently Enough asked questions=
 +
==with answers!==
  
 +
Last modified: 2018-03-21
  
 +
For questions: <postmaster@science.ru.nl>
 
-----------------------------------------------------------------------
 
-----------------------------------------------------------------------
 +
Further reference: http://wiki.science.ru.nl/cncz/
  
C&CZ's Veelgestelde Vragenlijst.
+
== About this FAQ ==
met antwoorden!
 
  
 +
https://wiki.science.ru.nl/cncz/index.php?title=Faq_unix
  
versie 0.11
+
=== Contributors ===
laatste verandering : 05-009-2000
 
  
Correspondentie: <postmaster@sci.kun.nl>
+
{|
-----------------------------------------------------------------------
+
|-
Voor meer info, zie:
+
|Patrick Atoon
http://www.sci.kun.nl/cncz/documentation
+
|patricka@cs.kun.nl
 
+
|-
0. Over deze FAQ
+
|Kees Keijzers
----------------
+
|keesk@science.ru.nl
1  Hoe kom ik aan dit document?
+
|-
2  Er is bijgedragen door?
+
|Jos Alsters
 
+
|josal@science.ru.nl
1 UNIX shells
+
|-
-------------
+
|Peter van Campen
1  Wat is een shell?
+
|Peter.vanCampen@science.ru.nl
2  Voorbeelden van shells.
+
|-
3  Wat is Man?
+
|Simon Oosthoek
4  Hoe kunnen manuals geprint worden?
+
|S.Oosthoek@science.ru.nl
5  Hoe start en stop ik een shell?
+
|-
6  Typische UNIX cmdline interface voor alle shells.
+
|}
7  Wat is de 'environment' en wat is Standaard Input/Output?
 
8  Wat is Input/Output Redirection?
 
9  Hoe kan ik meer commando's op 1 regel geven?
 
10  Hoe kan ik een programma niet-interactief laten lopen?
 
11  Wat is filename expansion en wildcard?
 
12  Hoe kan ik een regel verlengen?
 
13  Wat zijn 'Here Documents'?
 
14  Wat is Command Substitution?
 
15  Hoe start een shell; welke input scripts worden gebruikt.
 
16  Variabelen.
 
17  Hoe vindt een shell een commando.
 
18  Wat is een shell script.
 
19  Features csh (boven sh).
 
20  Features bash (over csh).
 
21  Welke terminals worden ondersteund?
 
22  Hoe kan ik mijn prompt veranderen?
 
  
2 Email en News
+
== Linux shells ==
---------------
 
1  Internet? Wat is dat?
 
2  Wat betekent email?
 
3  Hoe werkt email?
 
4  Hoe zien emailadressen eruit?
 
5  Wat zijn domeinen?
 
6  (verwijderd, te oud)
 
7  Wat is een mailinglist?
 
8  Wat zijn nieuwsgroepen?
 
9  Welke zijn er zoal?
 
10  Hoe is de etiquette bij electronische post?
 
11  Zijn er speciale termen in nieuwsgroepen die ik moet weten?
 
12  Welke nieuwslezers zijn er zoal beschikbaar?
 
13  Hoe start je nn op, en waar vind ik hulp over nn?
 
14  Ik heb nn opgestart; wat zie ik nu op het sherm?
 
15  Help! Nog 655781 artikelen in 1781 nieuwsgroepen! Wat nu?
 
16  Wat is het idee achter nn?
 
17  Hoe sla ik oninteressante berichten over?
 
18  Hoe gooi ik overtollige nieuwsgroepen weg?
 
19  Hoe post ik een bericht?
 
20  Wat staat er allemaal in de header van een bericht?
 
21  Hoe kan ik artikelen automatisch laten kiezen?
 
22  Kan ik zelf een nieuwsgroep maken?
 
  
3 Etcetera
 
----------
 
1  Wat zijn er een boel 'vreemde' toetsen.
 
2  Hoe kan ik mijn bestanden ontoegankelijk maken voor anderen?
 
3  Help, ik ben een file op Unix kwijt! Kan ik die terug krijgen?
 
  
 +
=== What is a shell? ===
  
-----------------------------------------------------------------------
+
The shell is a program that interprets the user's commands and executes them on the Operating System.
0  Over deze FAQ
+
There are many kinds of shells, which have different interpreted languages in which to write commands.
=================
 
  
 +
A shell can be used interactively, a human user typing commands on a terminal prompt, or in a shellscript. The shellscript is also called a batch file. A shell script that asks for human input can only be run from an interactive shell.
  
0.1  Hoe kom ik aan dit document?
+
=== Examples of shells ===
----------------------------------
 
- Vanaf overal:
 
http://www.sci.kun.nl/cncz/documentation/localdoc/cncz.faq
 
- Voor Unix systemen in (o.a.) het sci.kun.nl domein:
 
het bestand: /usr/src/local/doc/cncz.faq
 
  
0.2  Er is bijgedragen door:
+
On the linux machines you can use the shells:
-----------------------------
 
  
Patrick Atoon      <patricka@cs.kun.nl>
+
* <code>/bin/sh  :</code> the default "Bourne" compatible shell, on Ubuntu, this is /bin/dash
Kees Keijzers      <keesk@sci.kun.nl>
+
* <code>/bin/dash:</code> a light-weight Bourne/POSIX compatible shell.
Jos Alsters        <josal@sci.kun.nl>
+
* <code>/bin/bash:</code> the Bourne Again Shell. A full fledged linux shell and the default.
Peter van Campen <Peter.vanCampen@sci.kun.nl>
+
* <code>/bin/zsh :</code> the last shell you'll ever need, very configurable
 +
* <code>/bin/tcsh:</code> a csh compatible shell. We strongly advise not to use this for scripts!
  
 +
Note that there are shells for microsoft windows, e.g. cmd.exe and powershell. Recently the bash shell is becoming available on windows as well.
  
-----------------------------------------------------------------------
+
=== What is a command? ===
1  UNIX Shells
 
===============
 
  
 +
A command is either a '''built-in''' command of the shell, or a file with executable instructions in it.
  
1.1 Wat is een shell?
+
The built in commands are executed by the shell, so they do not require the kernel to read another file and execute a different process. For this reason, some commands that are used often in scripts or on the commandline are not just available as an executable file, but also as internal command (e.g. ''echo'' and ''/bin/echo''). A lot of built-in commands have to be built in, e.g. ''set'' or ''cd'', because they act on the state of the shell itself.
---------------------
 
  
- een programma dat commando's van de gebruiker vertaalt naar
+
Most commands are executable files, these can be separated in two categories; scripts and binary executables. Scripts are interpreted by an interpreter, like bash, python, perl, etc. Binary executables are programs compiled to machine code and stored in a format that the kernel understands.
het Operating System (UNIX). (Een modernere versie van zo'n
 
user-interface is niet karakter- maar grafisch georienteerd: de
 
window systemen.) Er bestaan verschillende van deze shells die
 
ieder een andere set commando's begrijpen en kunnen vertalen. Elk
 
heeft zijn eigen voor- en nadelen.
 
- met de commando's die de shell kent, kan een programma gemaakt
 
worden: een shellscript (vergelijk een bat-file onder DOS).
 
  
 +
=== How does the shell find a command? ===
  
1.2 Voorbeelden van shells:
+
{|+ class="wikitable"
---------------------------
+
| Way to find the command
 +
| Examples
 +
|-
 +
| an absolute path-name, starting with '/'
 +
|
 +
<pre>
 +
prompt> /usr/bin/vim
 +
prompt> /usr/local/datasearch/bin/telgids
  
aanwezig op de C&CZ machines:
+
</pre>
- sh: de AT&T vader van alle shells, Bourne Shell, SUN supported.
+
|-
- csh: de Berkeley Moeder, Bill Joy, SUN supported.
+
| a relative path-name, containing at least one '/'
- bash: de GNU opvolger van sh/csh/..., Brian Fox, Public Domain.
+
|
- ksh: Korn Shell, de System V opvolger van sh, SUN supported.
+
<pre>
- /usr/lib/rsh: Restricted Shell, SUN supported.
+
prompt> bin/testprogramma
- tcsh: een csh opvolger, ontwikkeld vanuit de Berkeley csh source
+
prompt> ../petervc/bin/backup-photon
  door verschillende auteurs, Public Domain.
+
</pre>
 
+
|-
sh en csh zullen vervangen worden door ksh: Korn Shell.
+
| a name without '/' built-in the shell
 
+
|
NIET aanwezig op de C&CZ machines in een standaard zoekpad:
+
<pre>
- zsh: de shell met de meeste features/bugs/etc., oorspronkelijk
+
prompt> echo "something"
  door Paul Falstad <pf@ttisms.com>. Aanvullingen door vele
+
prompt> read X
  anderen, Public Domain.
+
</pre>
 
+
|-
Merk op dat met 'Public Domain' bedoeld wordt dat SUN de shell niet
+
| a name without '/' found in the '$PATH'
support en dat de source code beschikbaar is. Bijv. 'bash' valt
 
onder het copyright van de Free Software Foundation.
 
 
 
1.3 Wat is Man?
 
---------------
 
 
 
Van vrijwel alle commando's en begrippen zijn direct op het systeem
 
handleidingen (manuals) in de engelse taal beschikbaar. Deze kunnen
 
worden opgeroepen worden met het commando 'man'.  Zo is de
 
handleiding van het commando 'man' te vinden met:
 
 
 
'man commandonaam' bijv. 'man man'
 
 
 
 
 
Verder wordt een lijst met sleutel woorden (keywords) bijgehouden
 
die te doorsoeken is met de '-k' optie van 'man'. Alle beschikbare
 
handleidingen die gaan over mail zijn te vinden met het commando:
 
 
 
wn4> man -k mail
 
 
 
1.4 Hoe kunnen manuals geprint worden?
 
--------------------------------------
 
 
 
Soms is het handiger om de inhoud van man op papier te hebben. Printen
 
is eenvoudig door enkele eenvoudige environment variabelen te zetten;
 
 
 
Bijv. in de csh shell de manual van het commando 'nn' afdrukken op
 
de 'mondriaan' postscript printer:
 
 
 
wn4> setenv TROFF groff
 
wn4> setenv TCAT 'lpr -m -Pmondriaan'
 
wn4> man -t nn
 
 
 
Bijv. in de bash shell de manual van het commando 'man' afdrukken op
 
de locale postscript printer 'alwlpr':
 
 
 
wn4$ export TROFF=groff
 
wn4$ export TCAT='lpr -m -Palwlpr'
 
wn4$ man -t nn
 
 
 
 
 
1.5 Hoe start en stop ik een shell?
 
-----------------------------------
 
 
 
- de initiele shell (die bij inloggen actief is) wordt door de
 
systeembeheerder gegeven. (Bij C&CZ is dat csh: heeft genoeg maar
 
niet te veel mogeljkheden.) Welke shell je hebt, kun je achterhalen
 
met het de volgende commando:
 
 
 
wn4> finger loginnaam
 
 
 
- werkend in de initiele shell, kun je een andere shell starten
 
door de naam in te tikken: bash/sh/csh.
 
deze shell kan gestopt worden met commando:
 
exit, logout of ^D (= control D).
 
Omdat ^D ook een end of file teken is, werden in het verleden vaak
 
vergissingen gemaakt. Daarom is door C&CZ ^D afgezet voor logout.
 
- de initiele shell wordt gestopt bij logout.
 
 
 
 
 
1.6 Typische UNIX cmdline interface voor alle shells:
 
-----------------------------------------------------
 
 
 
Voor alle shells is de opbouw van de commandoregel in principe gelijk:
 
 
 
prompt: COMMANDO -optie-1 -optie-2 ... de rest ...
 
======= -------- -------- --------    -- ----
 
 
 
prompt: is datgene wat de shell op het scherm zet, wachtend op input.
 
dit is vrij te kiezen (configureerbaar) d.m.v.
 
csh: set prompt="...." in .login of .cshrc
 
bash: PS1="....." in .bashrc
 
Voorbeelden van prompts:
 
$
 
#
 
machinenaam> (b.v. wn4>)
 
loginnaam> (b.v. josal>)
 
commandonummer machinenaam> (b.v. 12 wn4>)
 
commandonummer homedirectory-pad> (b.v. 12 /home/cncz/josal>)
 
 
 
COMMANDO is het programma dat wordt uitgevoerd.
 
sommige shells hebben sommige cmd's ingebouwd: echo, kill,
 
time, test,
 
en sommige cmd's zijn alleen maar ingebouwd aanwezig: logout,
 
alias, history, exec, etc.
 
Niet-ingebouwde commando's moeten eerst van disk gehaald
 
worden en staan dus niet permanent in het geheugen. De
 
uitvoering daarvan kost dus meer tijd.
 
opties (soms -, --, + of niets!) en 'de rest' horen bij het specifieke
 
commando
 
 
 
Voorbeelden:
 
 
 
wn4> rm -i *.dvi
 
 
 
De prompt is 'wn4>', het commando is 'rm' met de optie '-i' en de
 
rest bestaat uit het argument '*.dvi'. Dit commando zal alle files
 
met een naam die eindigen op '.dvi', maar er eerst om vragen (dit
 
bepaalt de optie '-i', zie 'man rm')
 
 
 
15 wn4:/home/cncz/josal> lpr -m -Poceps paper.dvi test.dvi
 
 
 
De prompt is hier '15 wn4:/home/cncz/josal>', het commando is 'lpr',
 
er zijn twee opties, '-m' en '-Poceps' en de rest wordt gevormd door
 
twee filenamen 'paper.dvi' en 'test.dvi'. Het commando zal die twee
 
files afdrukken op de printer 'oceps' (aangegeven door de optie -P)
 
en na afloop een mail terugsturen met printerinformatie (de optie -m).
 
 
 
 
 
1.7 Wat is de 'environment' en wat is Standaard Input/Output?
 
-------------------------------------------------------------
 
 
 
Een commando/programma loopt in een 'standaard' opzet:
 
 
 
Environment ----------------------+
 
 
|
 
|
V
+
<pre>
+-----------+
+
prompt> ls
|          | ---> StdOut (scherm)
+
prompt> firefox
StdIn (toetsenbord) ---> | Programma |
+
</pre>
|          | ---> StdErr (scherm)
+
|-
+-----------+
+
|}
 
 
De omgeving (environment) moet goed gezet worden, voordat het
 
commando gegeven wordt. B.v.: de prompt kan eerst gezet worden.
 
Standaard komt input van toetsenbord gaan output en foutboodschappen
 
naar het scherm.
 
 
 
 
 
 
 
1.8 Wat is Input/Output Redirection?
 
------------------------------------
 
 
 
Dit is wijziging van bron/bestemming van standaard input/output.
 
Voorbeelden:
 
 
 
- CMD .... > filenaam                (Output Redirection)
 
Als de file al bestaat, wordt deze
 
overschreven.
 
Errors blijven wel naar scherm gaan
 
- CMD .... >> filenaam              (Output Redirection)
 
Als de file al bestaat, wordt de
 
nieuwe output er achteraan gezet.
 
- CMD .... < input-bestand          (Input redirection)
 
- CMD .... << EEN-OF-ANDERE-STRING  (Input redirection, Here Documents)
 
(zie ook Here Documents)
 
- CMD-1 ... | CMD-2 ... | CMD-3 ...  (Pipes)
 
Output van CMD-1 wordt input van
 
CMD-2, etc
 
 
 
 
 
1.9 Hoe kan ik meer commando's op 1 regel geven?
 
------------------------------------------------
 
 
 
Plaats ; tussen de commando's:
 
- CMD-1 .... ; CMD-2 ....
 
 
 
 
 
1.10 Hoe kan ik een programma niet-interactief laten lopen?
 
-----------------------------------------------------------
 
 
 
Door & achter commando, loopt het in de background:
 
 
 
- CMD .... &
 
 
 
 
 
1.11 Wat is filename expansion en wildcard?
 
-------------------------------------------
 
 
 
- CMD pu??    -> CMD punt of/en punk of/en push ... (Filename Expansion)
 
Elk ? moet 1 karakter worden
 
 
 
- CMD pu*    -> CMD pu of/en punk of/en push ...  (wildcard)
 
* mag elk aantal karakters worden
 
 
 
- CMD pu[0-9] -> CMD pu0 of/en pu1 of/en pu2 ...
 
 
 
- CMD pu'*'  -> CMD pu*            (Quoting)
 
De * is onderdeel van de naam en niet een wildcard
 
 
 
- CMD pu"*"  -> CMD pu*            (Quoting)
 
 
 
- CMD "pu*"  -> CMD pu*            (Quoting)
 
 
 
- CMD pu\*    -> CMD pu*           
 
\ : Neem volgende karakter letterlijk
 
 
 
- CMD *$A.tex    wild card en $A variabele invullen
 
 
 
- CMD '*$A'.tex  quoting: geen wild card en $A variabele niet invullen
 
 
 
- CMD ''*$A''.tex  geen wild card en $A variabele wel invullen
 
 
 
Er is een belangrijk verschil tussen UNIX en DOS bij de behandeling
 
van de wildcard (* en ?): in DOS wordt dit afgehandeld door het
 
programma/cmd dat gestart wordt. Elk programma/cmd moet deze truc dus
 
kennen. Bij UNIX wordt het afgehandeld door de shell. Voordeel is dat
 
de programma's/commando's er dus geen weet van hoeven te hebben.
 
Nadelen zijn er ook:
 
 
 
DOS: copy *.dvi *.dvx
 
resulteert in 1 op 1 copieen (copy werkt regel voor af):
 
copy file1.dvi file1.dvx
 
copy file2.dvi file2.dvx
 
UNIX: cp *.dvi *.dvx
 
resulteert in chaos want shell expandeert eerst:
 
cp file1.dvi file2.dvi ....... file1.dvx file2.dvx...........
 
 
 
 
 
1.12 Hoe kan ik een regel verlengen?
 
------------------------------------
 
 
 
Door aan einde regel \ te plaatsen. Volgende regel wordt aangesloten.
 
Voorbeeld:
 
wn4>  CMD pu\
 
nt
 
resulteert in
 
wn4>  CMD punt
 
 
 
 
 
1.13 Wat zijn 'Here Documents'?
 
-------------------------------
 
 
 
(Zie ook I/O redirection).
 
Een voorbeeld, aan de hand van het commando wc (word count).
 
wn4> wc
 
input1
 
input2
 
input3
 
input4
 
^D  (= end of file (eof))
 
4      4      28
 
wn4>
 
 
 
^D  betekent 'end of file' (eof), hiermee owrdt het eind van de
 
input doorgegeven aan het proramma 'wc'.
 
 
 
Dit werkt prima in interactieve mode. Als we een script willen
 
schrijven waarin wc gebruikt wordt, en dat niet on-line gedraaid
 
wordt, is het niet mogelijk om die input te geven. Er zijn dan 2
 
mogelijkheden: 
 
 
 
Gebruik maken van input redirection d.m.v. een file (bijv. abc) die
 
klaargezet wordt. Het script heet 'programma':
 
 
 
wn4> cat abc:
 
input1
 
input2
 
input3
 
input4
 
wn4> cat programma
 
echo "Dit is een test van input omleiding"
 
wc < abc
 
echo "Einde test"
 
wn4>
 
 
 
Of gebruik maken van zg. "Here Documents"
 
 
 
wn4> cat programma
 
echo "Dit is een test van Here Documents"
 
wc << Einde-Invoer
 
input1
 
input2
 
input3
 
input4
 
Einde-Invoer
 
wn4>
 
 
 
Het invoer voor het programma wc eindigt dus zodra de tekst
 
achter de '<<' gevonden wordt.
 
 
 
 
 
1.14 Wat is Command Substitution?
 
---------------------------------
 
 
 
- CMD-1 `CMD-2`
 
 
 
CMD-1 wordt uitgevoerd met als argumenten de output van CMD-2.
 
 
 
Voorbeeld, om het bestand 'Notulen' een andere naam te geven met een
 
extensie van de huidige datum en tijd:
 
 
 
wn4> date +%y%m%d-%H:%M
 
930730-12:44
 
wn4> mv Notulen Notulen.930730-12:44
 
 
 
Dat kan echter ook eenvoudiger zonder de output van het date
 
commando over te tikken:
 
 
 
wn4> mv Notulen Notulen.`date +%y%m%d-%H:%M`
 
 
 
Het commando 'date +%y%m%d-%H:%M' wordt uitgevoerd en het resultaat
 
wordt in het 'mv' commando gebruikt.
 
 
 
 
 
1.15 Hoe start een shell; welke input scripts worden gebruikt:
 
--------------------------------------------------------------
 
 
 
- sh: leest .profile bij inloggen, daarna de CMD's
 
- csh: leest .cshrc en .login bij inloggen, daarna de CMD's,
 
leest .logout bij uitloggen
 
- bash: leest ontzettend veel, o.a. .bashrc (Lees de handleiding ....)
 
 
 
a) Door C&CZ wordt als eerste regel in .cshrc gezet:
 
 
 
source /system.cshrc
 
 
 
Daardoor wordt de file /system.cshrc gelezen bij het starten van csh.
 
In deze file staan settings die voor iedereen geldig zijn. Deze regel
 
dus niet verwijderen.
 
 
 
b) Hetzelfde geldt voor de eerste regel in .profile van sh:
 
 
 
/system.profile
 
 
 
c) In de directorie /usr/skel staan voorbeelden van startup files.
 
Als je je eigen files verknoeid hebt, kun je hier `verse' halen.
 
Omdat het onmogelijk is deze files zo te maken dat ze voor
 
iedereen (met elk soort terminal b.v.) geschikt zijn, zijn ze een
 
compromis dat bruikbaar is.  Voor bash staat er (nog) niets.
 
 
 
 
 
1.16 Variabelen:
 
----------------
 
 
 
Worden aangeroepen met een $. Voorbeeld in csh:
 
 
 
wn4> set a=tien
 
wn4> echo $a
 
tien
 
wn4>
 
 
 
Er zijn twee 'soorten': 'locale' shell variabelen en 'environment'
 
variabelen.  Locale variabelen worden alleen binnen de shell
 
gebruikt.  De 'environment' variabelen worden doorgegeven aan alle
 
programma's die de shell opstart.  Meestal wordt afgesproken:
 
environment variabelen in hoofdletters, locale in kleine letters.
 
 
 
Voorbeelden in sh:
 
 
 
definitie locale variabele:
 
 
 
wn4> TERM=vt100
 
 
 
maak TERM een environment variabele: nu weten alle programma's
 
(b.v.  de editor vi) welke terminal ik heb.
 
 
 
wn4> export TERM
 
 
 
maak een environment variabele PRINTER met daarin de naam van
 
de gebruikte printer. Printer programma's als lpr, lpq en lpc
 
zien dit en behoeven dan niet meer de -P optie!
 
 
 
wn4> PRINTER=oceps; export PRINTER
 
 
 
lpr print nu automatisch naar de Oceps printer.
 
 
 
In bash gaat alles identiek, alleen kan het laatste voorbeeld
 
korter genoteerd worden:
 
 
 
wn4> export PRINTER=oceps
 
 
 
Csh heeft aparte commando's voor locale ('set') en environment
 
('setenv') variabelen!  Ook het toekennen van waarden gaat
 
verschillend, zet de locale variabele 'term' op 'vt100':
 
 
 
wn4> set term=vt100
 
 
 
Zet de environment variabele 'TERM' op 'vt100':
 
 
 
wn4> setenv TERM vt100
 
 
 
Het is nog ingewikkelder, sommige locale variabelen worden apart
 
behandeld (bijv.  term en path): wanneer de locale variabele
 
'term' op 'vt100' gezet wordt, zet csh de bijbehorende environment
 
variabele 'TERM' ook op 'vt100'..... (zie de handleiding van csh)
 
 
 
Enkele opmerkingen:
 
 
 
- Het commando 'printenv' geeft overzicht van environment variabelen. 
 
 
 
- voor alle shells geeft 'set' een overzicht van locale variabelen. 
 
 
 
- begrenzen van een naam van een variabele gaat d.m.v. accolades:
 
 
 
wn4> GELD=weinig
 
wn4> echo ${GELD}waarde
 
weinigwaarde
 
wn4>
 
 
 
- veel variabelen hebben een speciale betekenis voor de shell: HOME,
 
PATH, CDPATH, MAIL, PS1, prompt, status, history, filec, etc.
 
(Zie hiervoor de shell handleidingen).
 
 
 
- soms zijn variabelen handig/nodig voor andere programma's:
 
TERM, PRINTER, DISPLAY, MORE, EDITOR, term, etc.
 
(Zie hiervoor de handleidingenvan de diverse programma's).
 
 
 
- variabelen zijn te vullen vanuit 'het toetsenbord' (stdin):
 
 
 
Voorbeeld voor bash en sh:
 
 
 
wn4> echo -n "Tik wat in: " ; read variabele
 
dit is variabele
 
wn4> echo $regel
 
dit is variabele
 
 
 
Voorbeeld voor csh:
 
 
 
wn4> echo -n "Tik wat in: " ; set regel=$<
 
dit is variabele
 
wn4> echo $regel
 
dit is variabele
 
 
 
 
 
1.17 Hoe vindt een shell een commando:
 
--------------------------------------
 
 
 
De shell kan een commando vinden aan de hand van:
 
 
 
- een absolute naam, een naam die met een '/' begint:
 
 
 
wn4> /usr/ucb/vi
 
wn4> /usr/local/datasearch/bin/telgids
 
 
 
- een relatieve naam, een naam die niet begint met een '/', maar
 
wel een '/' bevat:
 
 
 
wn4> bin/testprogramma
 
wn4> ../petervc/bin/backup-photon
 
 
 
- een commando of programma naam. Om te weten wat er dan opgestart
 
moet worden, gebruikt de shell de waarde va de PATH (sh en bash)
 
of path (csh) environment variabele. Deze moet een lijst van
 
directories bevatten waarin de naam van het betreffende commando
 
opgezocht kan worden:
 
 
 
wn4> vi
 
wn4> telgids
 
wn4> testprogramma
 
 
 
De lijst wordt in volgorde afgewerkt en het eerst gevonden
 
programma wordt opgestart. Omdat er een Unix programma met de
 
naam 'test' bestaat, en wanneer je zelf een programma maakt met
 
ook de naam 'test', bepaalt de volgorde van de directories in de
 
path variabele welk programma gebruikt zal worden!
 
 
 
De huidige directory ('.') moet ook in het path staan wil een
 
commando in de huidige directorie gevonden worden (dit in
 
tegenstelling tot MSDOS bijv.)
 
 
 
Je kunt het path meestal het beste veranderen door het aan de voor-
 
of achterzijde uit te breiden met de gewenste directorie(s):
 
 
 
Voor sh/bash:
 
 
 
wn4> PATH=$PATH:$HOME/bin
 
 
 
Voor csh:
 
 
 
wn4> path=(/usr/local/X11R5/bin $path)
 
 
 
 
 
1.18 Wat is een shell script:
 
-----------------------------
 
 
 
- een script is een bestand met shell commando's, dat de shell leest en
 
uitvoert.
 
- als argument van de shell: bash bash-script
 
- of als gewoon commando: chmod +x new-cmd ; new-cmd
 
- eerste regel is belangrijk:
 
#!/bin/csh of #!/usr/local/gnu/bin/bash anders een sh script!
 
- $1, $2, $3 ... zijn de argumenten meegegeven aan het script.
 
 
 
 
 
1.19 Features csh (boven sh):
 
-----------------------------
 
 
 
- Job control:
 
^Z : stopt een programma.
 
bg : laat het huidige programma in de achtergrond doorlopen.
 
fg %nummer : zet het achtergrondprogramma met dit nummer in de voorgrond.
 
(fg: neem current programma daarvoor (met + in de joblist).
 
jobs : geeft een lijst van alle programma's in voor en achtergrond.
 
^Z : stoppen van de foregroundjob.
 
- History mechanisme:
 
set history=100 : onthoudt de laatste 100 cmd's
 
history 25 : geeft een lijst van de laatste 25 cmd's.
 
!! : voer het vorige cmd nog een keer uit.
 
maar: wn3> ls
 
wn3> latex pi!!.tex ---> latex pils.tex
 
!33 : voer cmd met nummer 33 nog een keer uit.
 
!lat : voer het laatste cmd uit dat met 'lat' begon.
 
dus als ! in een filenaam: in commando vervangen door \!
 
^twx^tex^ : voer het vorige cmd uit, maar vervang twx door tex
 
(In csh is er geen andere mogelijkheid voor
 
commandline editing, in bash wel.)
 
- Filename completion:
 
set filec : zet filename completion aan.
 
latex vers<ESC> : maak de naam vers volledig indien mogelijk.
 
latex vers^D : laat de mogelijkheden voor volledig maken zien.
 
voorbeeld: stel er zijn de 2 bestanden verslag.dotcursus.13.2.93.tex
 
verslag.dotcursus.19.3.93.tex
 
latex vers<ESC> geeft: latex verslag.dotcursus.1
 
daarna 3 of 9 intikken en weer <ESC> maakt het
 
commando af. Nadeel: je moet de namen van de bestanden
 
kennen (anders weet je niet of 3 of 9 te tikken).
 
latex vers^D geeft in eerste instantie het zelfde maar
 
geeft meteen de (in dit geval 2) vervolgmogelijkheden,
 
waarvan er weer 1 (tik 3 of 9) gekozen moet worden.
 
- 'User home directory completion':
 
~josal/.cshrc -> /home/cncz/josal/.cshrc
 
~jos^D        -> zoek de gebruiker wiens loginnaam met 'jos' 
 
      begint en maak, indien mogelijk de naam af.
 
      (dit duurt erg/te lang op de sci.kun.nl machines)
 
- Aliases:
 
alias dir ls -l : vervang het commando 'dir' steeds door 'ls -l', dus
 
  wn4> dir      --> wn4> ls -l
 
  wn4> dir *.tex --> wn4> ls -l *.tex
 
  wn4> echo dir  --> wn4> echo dir
 
alias cd 'cd \!* ; set prompt="\! $cwd> "'
 
- Heeft rekenmogelijkheden:
 
set a=10 ; @ a = 5 + $a ; echo $a
 
- Variabelen kunnen lijsten aan:
 
set lijst=(een twee drie vier vijf); echo $lijst[4];
 
shift lijst; echo $lijst[4]
 
 
 
 
 
1.20 Features bash (over csh):
 
------------------------------
 
 
 
- Command Line Editing a la Emacs/Jove of Vi.
 
- Alle 'leuke' dingen die sh wel heeft maar csh niet....
 
- Mogelijkheid tot functies (kan de SUN sh ook).
 
- (Veel) betere file/command completion.
 
- Commandsubstitution in een vorm van $(head $(ls *.tex))
 
- Ingebouwde hulp.
 
 
 
 
 
1.21 Welke terminals worden ondersteund?
 
----------------------------------------
 
 
 
Staan in /etc/termcap
 
Er zijn problemen te verwachten met andere terminals dan
 
adm3a, vt100/102, X-terminals, SUN-stations.
 
 
 
 
 
1.22  Hoe kan ik mijn prompt veranderen?
 
----------------------------------------
 
 
 
Dat hangt natuurlijk van het type shell af, enkele voorbeelden
 
kunnen e.e.a. verduidelijken:
 
 
 
- sh, maak de prompt tot iets met de naam van de machine erin,
 
bijv. 'wn3 >'
 
 
 
wn4> PS1="`hostname` >"
 
 
 
- csh, maak een prompt met daarin het history nummer en de machine
 
naam, bijv. '15 wn3>'
 
 
 
wn4> set prompt="\! `hostname`>"
 
 
 
- bash, maak een prompt met het history nummer, machine naam en de
 
huidige directory, bijv: '8 wn3:~/doc/punt '
 
 
 
wn4> PS1="\# \h:\w "
 
 
 
De huidige directory kan ook in csh in de prompt gezet worden:
 
 
 
wn4> set prompt="\! `hostname`:${cwd}> "
 
 
 
Alleen moet er dan wel nog een alias voor het 'cd' commando opgenomen
 
worden, zodat de prompt na het veranderen van de directory aangepast
 
wordt:
 
 
 
wn4> alias cd 'chdir \!*; set prompt="\! `hostname`:${cwd}> "'
 
 
 
 
 
-----------------------------------------------------------------------
 
2 Email en News
 
===============
 
 
 
2.1 Internet? Wat is dat?
 
-------------------------
 
 
 
Je hoort regelmatig mensen praten over "het Internet". Maar wat is dat
 
netwerk nou eigenlijk? Het Internet bestaat uit een heleboel computers
 
die aan elkaar gekoppeld zijn via een (snel) netwerk. Het principe is
 
simpel; aan elke computer die aan Internet hangt kun je een stel nieuwe
 
computers vastmaken die daarmee ook aan 'Het Internet' hangen.
 
 
 
2.2  Wat betekent email?
 
-------------------------
 
 
 
Via het Internet kunnen mensen berichten uitwisselen, met elkaar
 
praten, een spelletje spelen, kortom contact maken. Email staat voor
 
"electronic mail", electronische post, dit in tegenstelling tot "snail
 
mail", de gewone post. Bij email tik je een bericht in, geeft aan naar
 
wie het moet, en voila, binnen korte tijd komt het aan bij de
 
geadresseerde.  Vaak gebeurt dit binnen enkele seconden, vandaar de
 
term "snail mail" (slakkenpost) voor de normale post.
 
 
 
 
 
2.3  Hoe werkt email?
 
----------------------
 
 
 
Het idee bij email is hetzelfde als bij normale post; je geeft aan naar
 
wie het toe moet, schrijft het bericht, en verstuurt het. Er zijn een
 
heleboel programma's beschikbaar die email kunnen versturen.
 
Voorbeelden zijn "pine", "netscape", "mail", "mh", "xmh" en "mailtool".
 
Daarnaast zijn er nog een heleboel Public Domain programma's
 
binnen te halen die nog weer veel meer mogelijkheden bieden. De
 
programma's werken allemaal op hetzelfde principe: een bericht dat
 
verstuurd moet worden, wordt naar een centrale computer hier op de
 
universiteit gestuurd, en die probeert dan het bericht af te leveren
 
bij degene voor wie het bedoeld is.
 
 
 
 
 
2.4  Hoe zien emailadressen eruit?
 
-----------------------------------
 
 
 
Een voorbeeld van een emailadres is dat van Jos Alsters:
 
"josal@sci.kun.nl".  Het bestaat uit twee delen; zijn loginnaam:
 
"josal", en het domein waar hij te bereiken is: "sci.kun.nl". De twee
 
delen zijn gescheiden door een "@", spreek uit als "at" [et]. Het maakt
 
bij emailadressen meestal niet uit of je ze met hoofdletters of
 
niet spelt.
 
 
 
 
 
2.5  Wat zijn domeinen?
 
------------------------
 
 
 
Een domein is een cluster computers die bij elkaar horen. De computers
 
"rood.sci.kun.nl", "joet.sci.kun.nl" en "wn1.sci.kun.nl" horen
 
bijvoorbeeld allemaal tot hetzelfde domein "sci.kun.nl".
 
 
 
Als je mail verstuurt naar iemand, is het vaak niet nodig precies de
 
computer te specificeren, maar is het voldoende om zijn domein te
 
noemen.  Simpel gezegd is er namelijk vaak 1 computer die voor een heel
 
domein de email verzorgt.
 
 
 
Aan het domein van iemand kun je al een beetje aflezen waar hij zich
 
bevindt. Op onze universiteit wordt ernaar gestreefd de domeinen uit
 
drie delen te laten bestaan, maar veel andere instanties volgen die
 
regel ook. Stel dat er een nieuw domein zou moeten komen, genaamd
 
"natuurkunde", dan zou dat dus niet "natuurkunde.sci.kun.nl", maar
 
eerder "natuurkunde.kun.nl" genoemd worden.
 
 
 
Hieronder zijn een paar voorbeelden van eindes van emailadressen:
 
 
 
.sci.kun.nl    De B-faculteiten van de KUN (SCIence)
 
.cs.kun.nl    Informatica (Computing Science)
 
.uci.kun.nl    Het UCI.
 
.kun.nl        De KUN
 
.uva.nl        De Universiteit van Amsterdam
 
.nl            Nederland
 
.be            Belgie
 
.ca            Canada
 
.au            Australie
 
.jp            Japan
 
.edu          Een Amerikaanse universiteit (EDUcational institute)
 
.com          Een Amerikaans bedrijf (COMpany)
 
.mil          Een Amerikaanse militaire instelling
 
.gov          Een Amerikaanse overheidsinstelling (GOVernment)
 
  
Een belangrijk emailadres om te weten is "postmaster". Op elke domein
+
=== PATH ===
hoort er een "postmaster" te zijn. Je kunt die persoon aanspreken als
 
jouw mail naar iemand nooit aankomt, als je ergens problemen mee hebt,
 
als je last hebt van iemand uit zijn domein. Onze postmaster heet
 
"postmaster@sci.kun.nl", en een mailtje naar hem zal ongetwijfeld
 
terechtkomen bij iemand van C&CZ.
 
  
2.6 (verwijderd, te oud)
+
The variable PATH is important, it decides which file is run as command if not specified with an absolute or relative path-name. If multiple files with the same name are present on the system, the order of the directories in the PATH variable determines which of the files is executed.
------------------------
 
  
2.7  Wat is een mailinglist?
+
<pre>
-----------------------------
+
prompt> echo $PATH
 +
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/bin:~/bin
 +
</pre>
  
Een mailinglist is een soort email-discussie, die per email wordt
+
The PATH variable is a list of directories separated with a colon character. It is evaluated from left to right. Note that the current directory ('.') is not in the PATH and if you want to execute a file that is in your current working directory (see $PWD or the ''pwd'' command), you need to specify it using a relative or absolute path-name:
verstuurd naar de mensen die op de lijst staan. Je kunt je opgeven voor
 
zo'n lijst bij degene die de lijst bijhoudt (de administrator).
 
Iedereen die deelneemt aan de disussie stuurt zijn bericht naar de
 
administrator, en die zorgt ervoor dat iedereen die op de lijst staat,
 
ook dat bericht toegestuurd krijgt. Dit betekent vaak dat je bergen
 
post in je mailbox zult krijgen.
 
  
Hoe vind je uit welke mailinglists er zijn?  Welke lists er precies
+
<pre>
allemaal zijn is niet uit te vinden, meestal kom je ze tegen `van
+
prompt> ./mycommand
horen zeggen'. Als je door je nieuws bladert lees je soms iets over
+
</pre>
zo'n mailinglist.  Daarnaast zijn er de nieuwsgroepen die onder
 
bit.list-serv te vinden zijn, dit zijn kopieen van mailinglists.
 
  
 +
Some people want to have commands in the current directory to be found in the PATH, which is possible, however it has risks, especially if you are working as superuser on a machine, but even as common user, you run the risk of executing a commandfile that some malicious user placed in a directory in which you are lured to ''cd'' to.
  
2.8  Wat zijn nieuwsgroepen?
+
If you insist on doing this, please make sure you put the '.' at the end of the PATH, so system commands cannot be hidden behind a command file in the current directory with the same name!
-----------------------------
 
  
Newsgroepen zijn een openbare vorm van de mailinglists. In
+
=== What is ''<code>man</code>'' ===
nieuwsgroepen wordt gediscussieerd, gepraat, gescholden, overlegd en
 
gebabbeld over vanalles en nogwat. Mensen van over de hele wereld
 
kunnen een bericht posten in zo'n nieuwsgroep, en dat bericht kan
 
dan over de hele wereld worden gelezen. Alle nieuwsgroepen hebben
 
een naam, en die naam zegt ook meteen iets over het thema van de
 
nieuwsgroep. De -stilzwijgende- afspraak is dat het in een
 
nieuwsgroep alleen maar over dat thema gaat, berichten die in een
 
andere nieuwsgroep thuishoren worden niet gewaardeerd.
 
  
 +
Most commands have a manual page, you can invoke the manual page by giving the command: <code>man &lt;command&gt;</code> in an interactive shell.
  
2.9  Welke zijn er zoal?
+
<pre>
-------------------------
+
prompt&gt; man bash
 +
</pre>
  
Teveel om op te noemen. Er zijn zo'n 1800 nieuwsgroepen, maar dat
+
will give you the manual page of the bash shell. Manual pages have a few common headers which you can find in nearly all man pages. Once you get used to this, you can quickly find out how to use the command more effectively.
aantal is dynamisch, omdat iedereen een nieuwe nieuwsgroep op mag
 
richten, als hij daar de behoefte toe voelt. Er zit vanalles tussen.
 
Verzin een thema, en er is een nieuwsgroep over.
 
  
Gelukkig zit er enige logica achter de namen van de nieuwsgroepen,
+
<pre>
zodat je er nog enigszins wijs uit kunt komen. De nieuwsgroepen hangen
+
prompt&gt; man -k something
aan elkaar als een soort boom, die naar onder toe steeds specifieker
+
</pre>
wordt.
 
  
De naam van een nieuwsgroep ziet er bijv. als volgt uit:
+
Will search for the keyword <code>something</code> in the summary of each man-page on the system. This may help you find the right command to do what you want, without knowing the exact command name. This is not a fool-proof solution and often a search engine will be more effective!
  
"comp.os.linux". 
+
=== Typical Linux commandline ===
  
De nieuwsgroep gaat over "comp(uters)", om preciezer te zijn gaat
+
If you work in a terminal (window) you can give commands via the shell. The shell interprets your command, most importantly it splits the line you provide into words separated by whitespace.
het over "o(perating )s(ystems)", in het bijzonder over "linux". Op
 
een soortgelijke manier hebben de andere nieuwsgroepen hun naam
 
gekregen.
 
  
Hier zijn een paar voorbeelden van nieuwshierarchien, met wat uitleg:
+
<pre>
 +
prompt&gt; COMMAND [arg1] [arg2] ... <enter>
 +
</pre>
  
alt.        Alt-nieuwsgroepen kunnen zomaar door iedereen worden
+
{|+ class="wikitable"
aangemaakt, simpelweg door erheen te posten. Hierdoor kunnen
+
|-
er onder alt. enorme onzin groepen onstaan. Er hangen echter
+
| prompt&gt;
ook een paar interessante groepen onder, die de sprong naar
+
| printed by the shell, usually <code> user@host $ </code>, but it can be customised!
een `officieel erkende' naam nog niet durven te nemen.
+
|-
 +
| COMMAND
 +
| the command you want to execute (you type it)
 +
|-
 +
| [arg1]
 +
| argument for the command
 +
|-
 +
| [arg2]
 +
| another argument for the command
 +
|-
 +
| ...
 +
| further arguments for the command
 +
|-
 +
| <code><enter></code>
 +
| You press the return key, or enter, to "give" the command to the shell. After this, your line will be interpreted and executed.
 +
|-
 +
|}
  
bionet.    Deze nieuwshierarchie bevat groepen die interessant zouden
+
==== examples ====
kunnen zijn voor biologen.
 
  
comp.      Computers. Elke, zichzelf respecterende computer met dito
+
{|+ class="wikitable"
gebruikers heeft een eigen groep (eventueel met subgroepen,
+
|-
al naar gelang de mate van zelfrespect) onder "comp.sys.".
+
| <code>ls -l</code>
Zo ook elke computertaal ("comp.lang."), operating system
+
| long (-l) listing of all files and directories in the current working directory
("comp.os") en wat niet al meer.
+
|-
 +
| <code>ls -a -l</code>
 +
| long (-l) listing of all files and directories in the current working directory, also show hidden entries (-a)
 +
|-
 +
| <code>ls -l /tmp</code>
 +
| long (-l) listing of all files and directories in /tmp
 +
|-
 +
| <code>ls -l /bin/bash</code>
 +
| long (-l) listing of the file /bin/bash
 +
|-
 +
| <code>man man</code>
 +
| show manual page of the <code>man</code> command
 +
|-
 +
|}
  
kun.        Dit is een locale nieuwshierarchie, die de rest van de wereld
+
== What is the ''environment''? ==
- als het goed is - niet kan lezen. Eronder hangen "kun.misc",
 
waar het over vanalles en nogwat gaat, "kun.cncz", waarin
 
mededelingen van C&Cz geplaatst worden en "kun.test", waarin
 
je proefballonnetjes kunt oplaten.
 
  
news.      Deze hierarchie houdt zich bezig met het Netnews. Interessant
+
The environment is a collection of shell variables that is passed to the commands you type. Check what is in the environment with the command:
is de groep "news.newusers"; deze is speciaal voor vragen van
 
mensen die nog met vragen zitten over news. Bovendien wordt
 
daar regelmatig een FAQ (Frequently Asked Questions) gepost,
 
met daarin antwoorden op de meest gestelde vragen van mensen.
 
  
nlnet.      Dit is een Nederlandse hierarchie. Als het goed is, is ook
+
<pre>
deze groep alleen binnen Nederland leesbaar, met als gevolg
+
$ env
dat alle conversatie gewoon in het Nederlands plaats vindt.
+
</pre>
Nieuwsgroepen zijn bijvoorbeeld:
 
  
nlnet.announce  Hierin worden belangrijke aankondigingen gedaan over
+
In a Bourne shell, a variable can be set like this:
interessante symposia, etc.
 
nlnet.misc      Een babbelgroep waar enorm veel berichten op gepost
 
worden. Heel af en toe komen er ook interessante
 
disussies in.
 
nlnet.taal      Voor alle vragen op taalgebied. Is de "ij" een
 
letter of niet? Houd Van Dale en het Groene Boekje
 
bij de hand.
 
nlnet.markt    Hier wordt spul te koop aangeboden.
 
nlnet.muziek    Hierin gaat het over muziek in Nederland
 
  
rec.        Recreational. Wat de mens in zijn vrije tijd zoal bezighoudt.
+
<pre>
Denk aan alle soorten muziek, sport, tv, noem maar op.
+
prompt&gt; MYVAR=something
 +
</pre>
  
soc.        Social. Ongeveer elke cultuur op aarde heeft een eigen groep
+
to show what the variable holds (Note the '''$''' sign):
onder "soc.culture." waarin het over die cultuur gaat. Omdat
 
de hele wereld daar kan posten wordt "soc.culture.netherlands"
 
ook wel gebruikt door Nederlanders in het buitenland met
 
heimwee om op de hoogte te blijven.
 
  
talk.      Hier wordt gepraat, net als in andere nieuwsgroepen.
+
<pre>
 +
prompt&gt; echo $MYVAR
 +
</pre>
  
 +
To make it part of the environment:
  
2.10  Hoe is de etiquette bij electronische post?
+
<pre>
--------------------------------------------------
+
prompt&gt; export MYVAR
 +
</pre>
  
De omgangsvormen bij elektronische post zijn heel anders dan bij
+
Variables that are usually present are
normale omgang met mensen of briefwisselingen. Dit komt voornamelijk
 
door het verschil in de tijd dat het bericht de ander bereikt, en de
 
afstand tussen de twee personen.
 
  
Bij een normale conversatie zou je het wel uit je hoofd laten om iemand
+
{|+ class="wikitable"
uit te schelden; immers, voor je het weet heb je een vuist in je
+
|-
gezicht. Bij email is dat natuurlijk veel makkelijker, en loop je dat
+
| <code>HOME</code>
risico niet. Bovendien is email snel, behoorlijk anoniem en makkelijk
+
| your home directory, used when you give the command <code>cd</code> without arguments to get to your home directory
vervalsbaar. Psychologisch onderzoek heeft uitgewezen dan mensen bij
+
|-
email opener, maar ook directer en extremer zijn dan bij normale
+
| <code>PATH</code>
eye-to-eye gesprekken.
+
| the list of directories searched for the name of the command you give without a '''<code>/</code>''' in it. <br>
 +
'''NB''' Do not put the current directory "." at the front of the path!
 +
|-
 +
| <code>EDITOR</code>
 +
| The editor command used when you invoke a command that uses an editor to let you modify files. Typical editor commands are <code>vi</code>, <code>nano</code>, <code>joe</code>
 +
|-
 +
| <code>PAGER</code>
 +
| The pager command used when e.g. a manual page doesn't fit on a screen. Typical pagers are <code>less</code>, <code>more</code>
 +
|-
 +
|}
  
De hele nieuwshierarchie is vrij anarchistisch, en er is geen politie
+
And many more...
die toezicht houdt op het gedrag in de nieuwsgroepen. Dit betekent dat
 
je vrij bent om te doen wat je wilt, zolang je daar andere mensen niet
 
al te zeer op hun tenen trapt. Het kan natuurlijk ook voorkomen dat jij
 
flink op je tenen getrapt wordt. Probeer in dat geval eerst het bericht
 
met een flinke korrel zout te nemen. Helpt dat niet, waarschuw die
 
persoon even dat, als hij niet oppast, je verdere stappen zult
 
ondernemen.  Als ook dat niet helpt, doe dan je beklag bij de
 
"postmaster" op het domein van die persoon.
 
  
Er zijn ook wat richtlijnen bij het posten:
+
== What is ''input/output redirection'' ==
  
- Houd de regellengte korter dan ongeveer 75 tekens. Als mensen op een
+
Whenever you start a command, the shell opens three "files" by default. These are '''stdin''', '''stdout''' and '''stderr''', also known by their numbers, 0, 1 and 2.
bericht van je reageren, nemen ze vaak een gedeelte over en zetten
 
er dan tekens voor, voor de duidelijkheid. De meeste mensen die News
 
lezen hebben een scherm van 80 tekens breed, en regels die te breed
 
zijn zorgen voor een zeer moeilijk te lezen bericht.
 
  
- Als je ergens op reageert, neem dan niet het hele bericht over, maar
+
The (bourne) shell has the ability to ''redirect'' the flow of these files to somewhere else.
alleen de interessante passages.
 
  
- Denk eraan dat iedereen kan zien dat het bericht van de KUN komt.
+
Without redirection, the three files are all connected to the terminal, so stdin to the keyboard device, stdout and stderr to the terminal window.
Doe dus geen dingen die de KUN in een kwaad daglicht stellen.
 
  
- Veel mensen hebben een ondertekening met een tekeningetje of een
+
If you command the shell to redirect the output to a file, you can store the output of the command to a file, instead of seeing it on the window where you typed the command.
spreuk. Laat die ondertekening niet groter worden dan drie tot
 
vijf regels.
 
  
- Post in de stijl van de nieuwsgroep. De manier om jezelf verre van
 
populair te maken is natuurlijk het posten van een controversiele
 
mening in een nieuwsgroep.
 
  
- Als een nieuwsgroep je niet bevalt heeft het meestal weinig zin om
+
==== examples ====
daarover in die nieuwsgroep te gaan klagen. De mensen in die
 
nieuwsgroep zijn blijkbaar wel tevreden met de gang van zaken daar.
 
Staak je ambities als wereldverbeteraar, en ga op zoek naar een
 
interessantere nieuwsgroep.
 
  
 +
{|+ class="wikitable"
 +
|-
 +
| <code>ls &gt; mylisting</code>
 +
| output redirection creates or '''overwrites''' the file ''mylisting'' with the output of the <code>ls</code> command
 +
|-
 +
| <code>ls &gt;&gt; mylisting</code>
 +
| output redirection creates or '''appends''' the file ''mylisting'' with the output of the <code>ls</code> command
 +
|-
 +
| <code>ls some-file 2&gt;myerrors</code>
 +
| standard error redirection creates or '''overwrites''' the file ''myerrors'' with the error message produced by the <code>ls</code> command
 +
|-
 +
| <code>wc -l &lt;$HOME/.bash_history</code>
 +
| using input redirection count the number of lines in the file ''$HOME/.bash_history''. Try the same command with and without the &lt;! <br>
 +
With the &lt; the stdin is redirected from the file ''$HOME/.bash_history'' to the <code>wc</code> command. Without the &lt; the filename is passed as an argument to ''wc'' so it can open the file itself.
 +
|-
 +
|}
  
2.11  Zijn er speciale termen in nieuwsgroepen die ik moet weten?
+
Instead of redirecting to a file, it is also possible to redirect the output of a command to the stdin of another command. This is called a pipeline. Another way to look at this is to see the command after the '''|''' symbol as a '''filter'''. Multiple '''filters''' can be used in sequence to massage the output of a command into a desirable format or selection.
-----------------------------------------------------------------
 
  
Er zijn een paar email en News specifieke termen die wel interessant
+
<pre>
zijn om te weten:
+
prompt&gt; cat /etc/shells | wc -l
 +
</pre>
  
UseNet  Het wereldwijde netwerk waarmee de 1,6 miljoen computers met
+
== How can I run multiple commands from one commandline? ==
elkaar verbonden zijn.
 
  
NetNews  De verzameling nieuwsgroepen en alle berichten erin.
+
Normally, commands are separated by a newline &lt;enter&gt;, however, you can also use a '';'' semicolon to seperate commands:
  
Smiley  Een smiley is een gekanteld mini-gezichtje zoals de standaard
+
<pre>
smiley: ":-)". Van links naar rechts zie je de oogjes, een
+
prompt&gt; ls; sleep 10; echo bla
neus en een lachend mondje. Smileys zijn er in honderden
+
</pre>
soorten en maten: :-(, 8-), :->, etc. Er is zelfs een groot
 
    smiley-boek te vinden.
 
  
Flame    Een flame is een bericht waarin iemand verbaal `geroosterd'
+
The above will list the directory, wait 10 seconds, then print '''bla'''
wordt. Uitgescholden dus. Het flamen is door sommigen verheven
 
tot een kunst, waarbij de kunst is om in zo beschaafd mogelijke
 
termen de ander volledig voor paal te zetten. Maar ook standaard
 
gescheld valt hieronder. Alleen de moedigsten der aarde durven
 
een stap te zetten in "alt.flame".
 
  
FAQ      Frequently Asked Questions. Omdat in bepaalde nieuwsgroepen vaak
+
== How can I run a command non-interactively and without having to wait for it to finish? ==
dezelfde vragen worden gesteld, wordt er meestal een FAQ bij-
 
gehouden met antwoorden op die vragen. Heel erg nuttig als je
 
niet weet waar de nieuwsgroep precies over gaat, of als je meer
 
over het onderwerp wilt weten.
 
  
IMHO    "In My Humble Opinion", naar mijn bescheiden mening.
+
A common problem is that you want to run a command that takes a long time to finish and can do so without needing any input.
  
RTFM    Deze term krijg je vaak om je oren geslingerd als je naar een
+
You can start a command to run in the background by adding a &amp;
ding vraagt wat ergens prachtig gedocumenteerd is. Het staat
+
<pre>
voor "Read The Fortran/Fucking Manual": lees de handleiding
+
prompt&gt; ls -l &amp;
    maar.
+
</pre>
  
* en _  Door ergens "*" of "_" omheen te zetten kun je het benadrukken.
+
As you will see when you try this, it is still connected to the terminal. If you prepend the command <code>nohup</code> you can disconnect it and even logout of the machine you run the command on. The output will typically end up in a file called '''nohup.out'''.
"Ik vind dat je dat echt _niet_ kunt maken!". Sommige nieuws-
 
lezers laten de om-"*"-de tekst in boldfont, en de om-"_"-de
 
tekst in italics zien.
 
  
followup Een bericht wat op een ander bericht reageert in een nieuwsgroep
+
The shell has some commands that allow you to change the background, foreground and stopped state of a job (i.e. a running command).
heet een followup.
 
  
reply    Ongeveer hetzelfde als een followup, met het verschil dat een
+
* The key '''control-Z''' stops a foreground job and returns you to the shell prompt
reply naar de verzender van het originele bericht gaat, en niet
+
* the command '''fg''' brings a stopped job or a background job to running in the foreground (access to the terminal)
naar de nieuwsgroep.
+
* the command '''bg''' brings a stopped command to the background
 +
* the command '''jobs''' lists the background and stopped jobs started from your shell
 +
* the command '''kill''' can send a signal to a background jobs. E.g. <tt>kill %1</tt>
 +
** NB, the kill command is most commonly used to send signals to process id's (PID), which do not have to be started in the current shell.
  
crossposten
+
=== Alternatively: screen ===
Als je berichten naar meerdere nieuwsgroepen tegelijk stuurt,
 
heet dat crossposten.
 
  
.sig    De "signature", de ondertekening van iemand.
+
If you want to run the program and be able to provide input or check on its progress now and then, you can run a virtual terminal program, like '''screen''' or '''tmux''', these will continue running when you disconnect and log out, later you can reconnect to see how it's going. See <code>man screen</code> or <code>man tmux</code>.
  
Verder worden nieuwsgroepen vaak afgekort met hun beginletters: s.c.n.
+
== What is filename expansion or wildcards? ==
staat bijvoorbeeld voor soc.culture.netherlands.
 
  
 +
The shell has some tools to save you typing long filenames. E.g. when you don't want to list all files in a directory:
  
2.12  Welke nieuwslezers zijn er zoal beschikbaar?
+
{|+ class="wikitable"
--------------------------------------------------
+
|-
 +
| <code>ls -d ?</code>
 +
| list all files and directories with a name of one character
 +
|-
 +
| <code>ls -d ???</code>
 +
| list all files and directories with a name of three character
 +
|-
 +
| <code>ls -d a*</code>
 +
| list all files and directories with a name starting with "a" and any number of unspecified characters after it
 +
|-
 +
| <code>ls -d .*</code>
 +
| list all files and directories with a name of three character
 +
|-
 +
| <code>ls -d *[0-9]</code>
 +
| list all files and directories ending with a number
 +
|-
 +
| <code>ls -d *[a-z]</code>
 +
| list all files and directories ending with a lowercase letter
 +
|-
 +
| <code>ls -d *[A-Z0-9]</code>
 +
| list all files and directories ending with an uppercase letter or a number
 +
|-
 +
| <code>ls -d ~/a*</code>
 +
| list all files and directories '''in my homedirectory''' starting with the letter a
 +
|-
 +
| <code>ls -d *\**</code> or <code>ls -d *'*'*</code>
 +
| list all files and directories with names containing a real '''*'''. Use the '''\'''' or single quotes to '''escape''' the character following it. i.e. prevent the shell from using the '''*''' for wildcard expansion.
 +
|-
 +
| characters to escape
 +
| < > [ ] ( ) { } * & ! ~ ; "space" "quotes" and many more...
 +
|}
  
Alsof er al niet genoeg nieuwsgroepen waren, zijn er ook nog eens een
+
The option '''-d''' of ls makes sure to list the entry itself and not the contents of the directory by that name.
heleboel programma's waarmee je het kunt lezen. Voorbeelden zijn netscape, rn,
 
xrn, nn, messages, tin, trn. Omdat ik van de andere nieuwslezers niet
 
veel weet, zal ik het alleen maar hebben over nn.
 
  
 +
More information about wildcards can be found in the '''bash''' manual.
  
2.13  Hoe start je nn op, en waar vind ik hulp over nn?
+
'''NB''' A special case is when you ''escape'' the newline or &lt;enter&gt; character. The shell will not start interpreting the command and you can add more to your command line on the next line.
-------------------------------------------------------
 
  
Het opstarten van nn is heel simpel:
+
<pre>
 +
prompt&gt; ls \&lt;enter&gt;
 +
-ltr&lt;enter&gt;
 +
...
 +
prompt&gt;
 +
</pre>
  
.........................................................................
+
Will be the same as "<code>ls -ltr</code>"
  
1 wn4: ~> nn
+
= How do I customise my interactive shell session? =
.........................................................................
 
  
Als dit de eerste keer was dat je nn opstartte, gaat het programma nu
+
In this section we assume you are using the Bourne Again SHell (bash). You can configure your login shell via [https://diy.science.ru.nl DIY]. (If you are running this on your own Linux machine, you can use the <code>chsh</code> command to change the login shell.)
een paar bestanden aanmaken die het nodig heeft. Om precies te zijn:
 
een bestand "~/.newsrc", met daarin alle nieuwsgroepen, en een
 
directory "~/.nn", waarin wat interne dingetjes opgeslagen worden.
 
  
Hulp over nn is makkelijk te krijgen met behulp van "man nn" of "xman
+
== What happens when I login? ==
nn".  Die handleiding is wel heel erg groot! Simpeler is het om de
 
<?>-toets te drukken als je hulp nodig hebt. Bij nn kun je die vrijwel
 
overal tikken.
 
  
Als nn om enge dingen begint te vragen waar je liever geen antwoord op
+
When you login, bash checks a list of possible locations for configuration files (which are full of shell commands).
wilt geven, kun je <control-G> tikken, en dan verdwijnt de vraag.
 
  
 +
Bash looks for the following files
 +
<pre>
 +
/etc/profile
 +
~/.bash_profile
 +
~/.bash_login
 +
~/.profile.
 +
</pre>
  
2.14  Ik heb nn opgestart; wat zie ik nu op het sherm?
+
When you start a new interactive shell on the same machine, bash looks for other files:
------------------------------------------------------
 
  
Als je nn opstart, krijg je iets te zien als dit:
+
<pre>
 +
/etc/bash.bashrc
 +
~/.bashrc
 +
</pre>
  
.........................................................................
+
People often want to have the same settings in all shells, so a lot of times you see the following in '''~/.profile''':
 +
<pre>
 +
if [ -f ~/.bashrc ]; then
 +
        source ~/.bashrc
 +
fi
 +
</pre>
  
Newsgroup: nlnet.misc                          Articles: 14 of 29/8
+
And all configuration can exist in '''~/.bashrc'''
  
a Hans Oey        27      >>>>>X terminals versus PC's
+
In either the system or personal bashrc files, variables and aliases are set to preference:
b Arjan de Bruin  70 [9]  >Male chauvinist pigs (was<>exhibitionisme)))
 
c Jos Horsmeier    12      Tonke Dragt: Torenhoog en mijlenbreed.
 
d Jos Horsmeier    31      Jan Jitzes onnoemelijke g<> Smileys (blurgh))
 
e Dude            28      >>>>nlnet faq / CVF: nlnet.we<>n voor de faq.
 
f Johan Wevers    18      >>>Jos vs Johan (was Re: Jan<>melijke gezeur)
 
  
-- 22:02 -- SELECT -- help:? -----All-----
+
* '''PATH''' is set to find systemwide programs, you can expand this search path to include directories in your homedir
.........................................................................
+
* '''PS1''' is set to a useful prompt
 +
* '''PAGER'''
  
De bovenste regel verklapt dat deze nieuwsgroep "nlnet.misc" heet, en
 
dat er 14 artikelen in deze nieuwsgroep nog niet gelezen zijn. Het
 
gedeelte "of 29/8" betekent dat er in totaal 29 nieuwe berichten zijn
 
in 8 gesubscribede nieuwsgroepen.
 
  
Daaronder volgen aan aantal regels met artikelen. Per regel staat er:
+
== How can I change the way my prompt looks? ==
  
- de letter waarmee het artikel te selecteren is
+
The variable '''PS1''' is the prompt you normally see when you can enter a command to the shell. Various ways exist to make this more useful.
- de naam (of het pseudoniem) van de schrijver van het artikel
 
- De lengte van het artikel in regels
 
- Soms staat er een getal tussen rechte haken achter; nn heeft
 
dan alle artikelen die ook dezelfde titel hebben samengevoegd.
 
- De titel van het artikel; hierbij geeft het aantal ">"-tekens
 
aan hoeveel referenties - dus het hoeveelste antwoord op het
 
originele artikel - dit artikel is. Als de titel te lang is
 
voor het scherm wordt er een gedeelte vervangen door "<>".
 
  
Met de toetsen <shift-"<"> en <shift-">"> is het mogelijk door alle
+
* Set PS1 directly
titels in een nieuwsgroep heen te bladeren, dit kan ook gewoom met
+
* Set PROMPT_COMMAND to something that sets PS1
<spatiebalk>, waarbij je automatisch naar de volgende nieuwsgroep
 
springt als er niet meer artikelen zijn.
 
  
 +
To make it permanent, define PS1 or PROMPT_COMMAND in your ~/.bashrc file.
  
2.15  Help! Nog 655781 artikelen in 1781 nieuwsgroepen! Wat nu?
+
==== examples ====
---------------------------------------------------------------
 
  
Zo snel mogelijk nn weer verlaten met <shift-Q>.
+
<pre>
 +
PS1='\u@\h:\w\$ '
 +
PS1='\u@\h:\w [$?]\$ '
 +
PS1='[\e[32m]\u@\h:[\e[33m]\w[\e[32m]$[\e[0m] '
 +
</pre>
  
Je kunt nu de "~/.newsrc" file gaan editen en in die file alle ":"
+
== Other customizations ==
achter nieuwsgroepen veranderen in "!". ":" staat namelijk voor
 
"subscribed", en "!" voor unsubsribed.  Alle interessante
 
nieuwsgroepen verander je dan weer terug in een ":".
 
  
Met vi zou dat als volgt gaan:
+
= Scripting =
  
.........................................................................
+
Often you want to be able to reproduce a sequence of commands or even create a small program to do a lot of work in the shell.
  
1 wn4: ~> vi ~/.newsrc
+
For this purpose, you can create a batch script, shell file, or shell script. We recommend you do this in the bourne shell (sh) or (bash).
:%s/:/!/
+
Using (t)csh for shell scripts is not recommended, see [http://harmful.cat-v.org/software/csh Csh Programming Considered Harmful].
  
(Verander bij alle interessante nieuwsgroepen de "!" in een ":")
+
== Basic shell script ==
  
:x
+
<pre>
.........................................................................
+
echo start of script
 +
ls -l
 +
echo end of script
 +
</pre>
  
 +
If you put the above 3 lines in a file <code>myscript</code>, you can call <code>bash myscript</code> and run the commands in the file.
  
Als je nu weer nn opstart, zul je veel minder berichten in veel minder
+
In order to make the file a command, you can make the file executable by giving the command: <code>chmod a+x myscript</code>
nieuwsgroepen hebben.
 
  
 +
Then you can call the script using <code>./myscript</code>
  
2.16  Wat is het idee achter nn?
+
== Choose interpreter #! hashbang ==
--------------------------------
 
  
Het idee achter nn is dat je de nieuwsgroepen die je interessant vindt
+
== How to provide multiple lines of input: Here Documents ==
selecteert. Elke volgende keer dat je nn opstart zul je dan die nieuws-
 
groepen te zien krijgen, als daar nieuwe berichten in staan. Door
 
berichten te lezen, zal nn ze de volgende keer niet meer laten zien,
 
zodat je steeds alleen de nieuwste berichten te zien krijgt. Natuurlijk
 
kun je de oude berichten (mits ze niet te oud zijn) nog altijd
 
terugzoeken.
 
  
Nn zal je elke nieuwsgroep waarop je gesubsribed bent voorshotelen,
+
== How to use the output of command as parameters: Command substitution ==
waarna je er met de spatiebalk doorheen kunt wandelen. Je krijgt dan
 
alle titels van berichten te zien, en als je er een paar wilt lezen,
 
dan tik je de letter die voor dat bericht staat in. De regel zal dan
 
reverse worden weergegeven, ten teken dat hij geselecteerd is. Als je
 
de nieuwsgroep verlaat, gaat nn kijken of je artikelen geselecteerd
 
had, en zo ja, zal hij ze laten zien. Als je met de nieuwsgroep klaar
 
bent, gaat nn naar de volgende nieuwsgroep, waar het verhaal zich
 
herhaalt.
 
  
Als je denkt "ik lees deze nieuwsgroep later wel een keer", kun je
+
<pre>
<shift-N> doen, van "Next newsgroup". Als je denkt "pfoei wat veel,
+
prompt> CMD-1 `CMD-2`
daar wil ik niet doorheenbladeren, maar ik wil ze ook niet meer te zien
+
or ~equivalent in POSIX shell
krijgen" dan kun je het beste <shift-X> doen, van Catch-up. Alle
+
prompt> CMD-1 $(CMD-2)
artikelen worden dan als gelezen gemarkeerd, en je krijgt de volgende
+
</pre>
nieuwsgroep te zien.
 
  
 +
Call <tt>CMD-1</tt> with arguments created from the output of <tt>CMD-2</tt>
  
2.17  Hoe sla ik oninteressante berichten over?
+
==== example ====
-----------------------------------------------
 
  
Aan de titels kun je vaak niet zien of het bericht interessant is.
+
Rename a file to have a different extension or a date in the name.
Normaliter blader je door berichten met <spatiebalk>; die wandelt eerst
 
door het hele bericht, en gaat als dat nodig is naar het volgende
 
bericht.  Als je aan de kop van een bericht al ziet dat het niet
 
interessant is, kun je met <n> naar het volgende bericht.
 
  
Als je denkt: "dit hele bericht, en alles wat erop zal volgen is vast
+
* Get the date in a particular format (see man date)
niet interessant", kun je de <k>-toets gebruiken: "kill". Het bericht
 
en alle followups worden dan als gelezen gemarkeerd en overgeslagen.
 
Als je het onderwerp voorlopig niet meer te zien wilt krijgen moet je
 
<shift-K> doen; dan wordt gevraagd voor hoelang je het niet te zien
 
wilt krijgen.  De eerstvolgende paar dagen krijg je die berichten dan
 
niet te zien.
 
  
 +
<pre>
 +
prompt> date "+%Y%m%d-%H:%M"
 +
20180327-12:41
 +
</pre>
  
2.18  Hoe gooi ik overtollige nieuwsgroepen weg?
+
* Get the first part of the name
------------------------------------------------
 
  
De eerste methode die we hebben gebruikt, vanuit vi, is natuurlijk een
+
<pre>
omweggetje dat werk spaarde. Zo af en toe komen er nieuwe groepen bij,
+
prompt> basename pietje.jpg .jpg
die je dan automatisch te zien krijgt. Je kunt deze groepen
+
pietje
unsubscriben met <shift-U>.
+
</pre>
  
Ook de andere weg kan bewandeld worden; als je een nieuwsgroep ineens
+
* Use both commands to create a new name for move (rename)
toch wel interessant vindt, kun je erheen gaan (<shift-G>, de naam
 
intypen eventueel met behulp van <spatiebalk> en <?>) en dan <shift-U>
 
doen.  Als de groep ge-unsubscribed was, zal nn vragen "Resubscribe to
 
...?".
 
  
 +
<pre>
 +
prompt> mv -v pietje.jpg $(basename pietje.jpg .jpg)-$(date "+%Y%m%d-%H:%M").jpg
 +
'pietje.jpg' -> 'pietje-20180327-12:45.jpg'
 +
</pre>
  
2.19  Hoe post ik een bericht?
+
* The <tt>CMD-2</tt> will be executed before <tt>CMD-1</tt>.  
------------------------------
+
* Command substitution can be invoked using <tt>`CMD-2`</tt> or <tt>$(CMD-2)</tt>
 +
* The advantage of <tt>$()</tt> is that it can be nested <tt>$(CMD-2 $(CMD-3))</tt>
  
Tot nu toe ging alles nog over het lezen van berichten. Maar je wilt
+
= Unix Permissions =
natuurlijk zelf ook dingen posten! Nn maakt onderscheid tussen vier
 
dingen:
 
  
followup  Terwijl je een bericht leest, wil je erop antwoorden in de
+
Linux and unix have read, write and execute/access permissions for the owner, the group and others. This concept works very well, but has some limitations.
nieuwsgroep. Als je <f> drukt, zal nn je vragen of je het
 
originele artikel wilt includen, en zal je favoriete editor
 
(die je kunt zetten met de environment variable EDITOR in de
 
shell) opstarten, waarna je naar hartelust kunt gaan typen.
 
Verlaat je editor alsof je het bericht wilt wegschrijven,
 
en nn zal vragen of je het wilt posten. <return> is dan
 
voldoende om het bericht te versturen.
 
  
reply    Je wilt op het bericht dat je leest antwoorden naar de schrijver
+
One common mistake is that the permissions for "others" are often called "world", which implies that the whole world has access to the file or directory. Others in this case means not the owner and not any member of the group.
ervan. Druk de <r> en het zal net als bij de followup gebeuren.
 
  
mail      Dit kun je gebruiken om een leuk bericht door te sturen naar
+
== Basic unix permissions ==
iemand anders. <m> start een procedure als hierboven.
 
  
posten    Alle vorige methodes gaan uit van een oud bericht. Maar je kunt
+
To find out about permissions on the filesystem, you can give the <tt>ls -l</tt> command, which shows the permissions in the first column:
natuurlijk ook een totaal nieuw bericht versturen. Om dit te
+
<pre>
doen tik je in nn ":post". Nn zal vragen om de newsgroup, de
+
prompt> ls -l
distribution, de keywords en een summary. Als je geen antwoord
+
total 8.0K
op een van die vragen weet, kun je het beste gewoon <return>
+
drwx------ 2 simon simon 4.0K Mar 28 13:23 a
drukken, dat werkt goed. Alleen bij "newsgroups" natuurlijk
+
drwxrwxr-x 2 simon simon 4.0K Mar 28 13:23 b
niet...
+
-rw-rw-r-- 1 simon cncz    0 Mar 28 13:23 c
 +
-r--r--r-- 1 simon simon    0 Mar 28 13:23 d
 +
-rwxrwxrwx 1 simon simon    0 Mar 28 13:23 e
 +
</pre>
  
 +
The output meaning is:
 +
<pre>
 +
drwxr-xr-- 2 simon cncz  4.0K Mar 28 13:23 a
 +
|||||||||| |  |    |    |        |      |
 +
|||||||||| |  |    |    |        |      +- filename
 +
|||||||||| |  |    |    |        +-------- modification date/time
 +
|||||||||| |  |    |    +----------------- filesize
 +
|||||||||| |  |    +----------------------- group
 +
|||||||||| |  +----------------------------- owner
 +
|||||||||| +--------------------------------- number of hardlinks to file
 +
|||||||||+----------------------------------- execute bit for others
 +
||||||||+------------------------------------ write bit for others
 +
|||||||+------------------------------------- read bit for others
 +
||||||+-------------------------------------- execute bit for group
 +
|||||+--------------------------------------- write bit for group
 +
||||+---------------------------------------- read bit for group
 +
|||+----------------------------------------- execute bit for owner
 +
||+------------------------------------------ write bit for owner
 +
|+------------------------------------------- read bit for owner
 +
+-------------------------------------------- directory (d), file (-) or ...
 +
</pre>
  
2.20  Wat staat er allemaal in de header van een bericht?
+
{|+
---------------------------------------------------------
+
|-
 +
| <tt>d/-</tt>
 +
| directory (d) or file (-)
 +
|-
 +
| '''r'''
 +
| '''r''' (permission to read) or '''-''' no permission to read
 +
|-
 +
| '''w'''
 +
| '''w''' (permission to write) or '''-''' no permission to write
 +
|-
 +
| '''x'''
 +
| '''x''' (permission to access/execute) or '''-''' no permission to access a directory or execute a file
 +
|-
 +
|}
  
In headers kunnen de meest vreemde dingen staan, die min of meer
+
The order of evaluation is like this:
begrepen kunnen worden door nieuwslezers en mailprogramma's.
 
Hieronder de meest voorkomende:
 
  
From:          Van wie komt het bericht?
+
# is the owner my effective user id? -> apply the permissions for owner -> finished
Subject:        Het onderwerp
+
# am I a member of the group listed for this file/directory? -> apply the permission for the group -> finished
Keywords:      Enkele sleutelbegrippen
+
# am I not the owner and not a member of the group? -> apply the permissions for other -> finished
Summary:        Een korte, eenregelige samenvatting
 
Distribution:  Hier kun je local, nlnet of world invullen.
 
Followup-to:    Hier de nieuwsgroep(en) waarnaar followups moeten
 
Reply-to:      Het mailadres waar replies heen moeten
 
References:    Artikel ID's. Meestal veel te veel.
 
  
 +
In case of directories, the execute bit has to apply for all the directories in the path all the way back to the root directory '''/'''.
  
2.21  Hoe kan ik artikelen automatisch laten kiezen?
+
== Changing permissions ==
----------------------------------------------------
 
  
Nn heeft verschillende tools om vanuit de shell de nieuwsgroepen en
+
=== chmod ===
berichten een beetje te manipuleren. Bijvoorbeeld:
 
  
nngrab      Selecteer nieuws op keywords
+
You can use '''chmod''' to change the permission bits.
nngrep      Selecteer nieuws op nieuwsgroep namen
 
nncheck    Laat zien hoeveel artikelen er te lezen zijn
 
nntidy      Maakt de ~.newsrc file netjes.
 
nnpost      Posten vanuit de shell, hetzelfde als :post in nn.
 
  
Verder kun je met behulp van de ~/.nn/INIT file een heleboel dingen
+
The permissions are stored efficiently in the filesystem (in the inode). The permissions can be represented by 3 bits as an octal number ( 0 1 2 3 4 5 6 7 10 11 ...)
instellen, zoals bijvoorbeeld de volgorde van de nieuwsgroepen, hoe je
 
standaard mailtjes eruit zien, of je automatisch een ondertekening wilt
 
hebben.
 
  
Ook kun je met de KILL file artikelen, of zelfs artikelen van
+
The chmod command can use either a symbolic representation or octal representation of the permissions:
specifieke personen al van tevoren selecteren of weggooien. Hierover
 
kun je meer lezen in de handleiding van nn, met "man nn".
 
  
Als nn het ooit niet doet, kan dat misschien liggen aan de files die
+
<pre>
hij bijhoudt in ~/.nn/. Het weggooien van alle files behalve de INIT
+
prompt> chmod u+rw,g=r,o= thefile
en KILL file kan dan wel eens helpen.
+
</pre>
 +
This is using chmod to change the permissions using a symbolic representation: change user permissions to add read and write permissions (don't change execute permisions), set group to read and other to no permissions.
  
 +
<pre>
 +
prompt> chmod 760 thefile
 +
</pre>
 +
This is the octal way to represent the permissions, note that this cannot leave bits unchanged! You specify the permissions in three (or four) octal numbers, representing permissions for user, group and others. When using four numbers, this can set additional permissions, see advanced permissions.
  
2.22  Kan ik zelf een nieuwsgroep maken?
+
{|+ class="wikitable"
----------------------------------------
+
| octal value
 +
| binary value
 +
| permissions
 +
|-
 +
| 0
 +
| 000/---
 +
| no permissions
 +
|-
 +
| 1
 +
| 001/--x
 +
| only execute/access permission
 +
|-
 +
| 2
 +
| 010/-w-
 +
| only write permssion
 +
|-
 +
| 3
 +
| 011/-wx
 +
| write and execute permissions
 +
|-
 +
| 4
 +
| 100/r--
 +
| only read permission (common for files)
 +
|-
 +
| 5
 +
| 101/r-x
 +
| read and execute permissions (common for directory)
 +
|-
 +
| 6
 +
| 110/rw-
 +
| read and write permissions (common for non executable files)
 +
|-
 +
| 7
 +
| 111/rwx
 +
| read write and execute permissions (common for directories and executable files)
 +
|-
 +
|}
  
Er zijn al genoeg nieuwsgroepen, dus de kans dat je een nieuwe wilt
+
==== Important points ====
maken is vrij klein. Maar stel dat je er toch een wilt maken.  De
 
eenvoudigste manier om dat te doen is om door iets te posten naar
 
"alt.<jouw favoriete naam>". Dan wordt de nieuwsgroep automatisch
 
aangemaakt. Bedenk wel dat de hele "alt."-hierarchie door sommige
 
domeinen helemaal niet wordt overgenomen. Dus het kan goed dat de helft
 
van de wereld die nieuwe nieuwsgroep niet te zien zal krijgen.
 
  
Je kunt ook proberen een officiele nieuwsgroep te maken. Daarvoor is
+
* Note that directories need execute permissions to be usable (i.e. enter it)
een officieel protocol opgesteld, dat precies voorschrijft hoe en wat
+
* Permissions can be changed recursively to all files/directories in the specified files/directories; <tt>chmod -R u+w somedir</tt>
je moet doen. Kijk daarvoor in "news.newusers", daar staat dat vast in
+
* changing permissions can be dangerous, you can loose access to your files or expose files to others that should not have access to them.
de FAQ uitgelegd. Heel simpel uitgelegd komt het op het volgende neer:
 
  
- Post een RFD (Request For Discussion) voor de nieuw te maken
+
=== chown ===
nieuwsgroep. Leg daarin uit waarom die nieuwsgroep er moet
 
komen volgens jou. Als je na minimaal een of twee maanden
 
discussie nog steeds van mening bent dat de nieuwsgroep er
 
moet komen, ga dan verder met de volgende stap.
 
  
- Post een CFV (Call For Votes). Je legt weer uit wat de
+
Change the owner of a file/directory (only usable by root)
nieuwsgroep is, en geeft mensen minimaal een of twee
 
maanden de tijd om hun stem bij jou uit te brengen.
 
De nieuwsgroep zal worden aangemaakt als er minstens
 
vijftig mensen gestemd hebben, en meer dan 2/3 van de
 
mensen voor de aanmaak was.
 
  
- Als de nieuwsgroep dit allemaal overleefd heeft, kun je
+
<pre>
hem aanmelden bij de instantie die nieuwsgroepen aanmaakt.
+
prompt> chown john somefile
 +
</pre>
  
Nogmaals, de getallen en termijnen die hier genoemd zijn, zijn zo
+
* chown also supports the -R flag
uit de duim gezogen, maar staan netjes vermeld in "news.newusers".
 
Ze staan hier om te laten zien dat het aanmaken van een nieuwsgroep
 
niet zo een-twee-drie gaat.
 
 
 
-----------------------------------------------------------------------
 
3) Etcetera
 
===========
 
  
 +
=== chgrp ===
  
3.1 'Vreemde' toetsen:
+
Change the group of the file/directory
----------------------
 
  
In Unix (de meeste programma's zullen dit 'begrijpen'):
+
<pre>
^U - verwijder laatste regel
+
prompt> chgrp myothergroup somefile
^W - verwijder laatste woord
+
</pre>
^D - EOF, exit
 
Omdat de dubbele functie tot vergissingen leidde, is de exit-functie
 
door C&CZ afgezet.
 
^V - Volgend karakter letterlijk nemen.
 
^R - Druk commando regel nog een keer af.
 
^Z - Stop lopend programma, keer terug naar shell.
 
^C - Breek lopend programma af.
 
^\ - Breek lopend programma af, maak een core dump naar disk.
 
^S/^Q - stop/start output
 
  
Csh/bash:
+
* chgrp also supports the -R flag
^I/TAB - Command/Filename completion (Bash)
 
<ESC>/^D - Filename completion (Csh)
 
  
Escape karakters:
+
== Advanced unix permissions ==
|  ---
 
|--|WN3|
 
--------    -----                ----    -----    ----  |  ---
 
|PC-thuis|--|modem|----tel.net----|PABX|--|modem|--|CITS|--|
 
--------    -----                ----    -----    ----  |  ---
 
|--|WN2|
 
|  ---
 
  
Kermit: ^\^C
+
* sticky bit
Als b.v. vanaf huis met Kermit ingelogd: dit geeft controle
+
* other types of files
terug aan thuis-PC. Log-in blijft wel open!
+
* umask
  Met het kermit 'connect' commando wordt de verbinding weer
 
  opgepakt.
 
Cits: ^^x
 
Dit geeft controle terug aan Cits. Log-in blijft wel open!
 
  Intikken van een '?' geeft een lijst met mogelijke commando's.
 
  Let op: met '^^' wordt bedoeld <control> 'hoedje'...
 
  Een 'return' op een lege regel pakt de verbinding weer op.
 
Telnet: ^]
 
  Ook nu valt de controle terug op het telnet commando.
 
  Een '?' geeft de mogelijkheden.
 
  Een 'return' op een lege regel pakt de verbinding weer op.
 
Rsh: ~^Z
 
  Controle wordt overgenomen door de locale shell.
 
  De remote shell staat 'stil' in de achtergrond. Dus d.m.v.
 
  'fg rsh' wordt controle weer teruggegeven aan de remote shell.
 
  
 +
<pre>
  
  
Line 1,449: Line 717:
  
 
Zie http://www.sci.kun.nl/cncz/procedures/backups.html
 
Zie http://www.sci.kun.nl/cncz/procedures/backups.html
 +
</pre>

Latest revision as of 11:50, 3 April 2018

C&CZ's Not Frequently Enough asked questions

with answers!

Last modified: 2018-03-21

For questions: <>


Further reference: http://wiki.science.ru.nl/cncz/

About this FAQ

https://wiki.science.ru.nl/cncz/index.php?title=Faq_unix

Contributors

Patrick Atoon
Kees Keijzers
Jos Alsters
Peter van Campen
Simon Oosthoek

Linux shells

What is a shell?

The shell is a program that interprets the user's commands and executes them on the Operating System. There are many kinds of shells, which have different interpreted languages in which to write commands.

A shell can be used interactively, a human user typing commands on a terminal prompt, or in a shellscript. The shellscript is also called a batch file. A shell script that asks for human input can only be run from an interactive shell.

Examples of shells

On the linux machines you can use the shells:

  • /bin/sh  : the default "Bourne" compatible shell, on Ubuntu, this is /bin/dash
  • /bin/dash: a light-weight Bourne/POSIX compatible shell.
  • /bin/bash: the Bourne Again Shell. A full fledged linux shell and the default.
  • /bin/zsh : the last shell you'll ever need, very configurable
  • /bin/tcsh: a csh compatible shell. We strongly advise not to use this for scripts!

Note that there are shells for microsoft windows, e.g. cmd.exe and powershell. Recently the bash shell is becoming available on windows as well.

What is a command?

A command is either a built-in command of the shell, or a file with executable instructions in it.

The built in commands are executed by the shell, so they do not require the kernel to read another file and execute a different process. For this reason, some commands that are used often in scripts or on the commandline are not just available as an executable file, but also as internal command (e.g. echo and /bin/echo). A lot of built-in commands have to be built in, e.g. set or cd, because they act on the state of the shell itself.

Most commands are executable files, these can be separated in two categories; scripts and binary executables. Scripts are interpreted by an interpreter, like bash, python, perl, etc. Binary executables are programs compiled to machine code and stored in a format that the kernel understands.

How does the shell find a command?

Way to find the command Examples
an absolute path-name, starting with '/'
prompt> /usr/bin/vim
prompt> /usr/local/datasearch/bin/telgids

a relative path-name, containing at least one '/'
prompt> bin/testprogramma
prompt> ../petervc/bin/backup-photon
a name without '/' built-in the shell
prompt> echo "something"
prompt> read X
a name without '/' found in the '$PATH'
prompt> ls
prompt> firefox

PATH

The variable PATH is important, it decides which file is run as command if not specified with an absolute or relative path-name. If multiple files with the same name are present on the system, the order of the directories in the PATH variable determines which of the files is executed.

prompt> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:~/bin:~/bin

The PATH variable is a list of directories separated with a colon character. It is evaluated from left to right. Note that the current directory ('.') is not in the PATH and if you want to execute a file that is in your current working directory (see $PWD or the pwd command), you need to specify it using a relative or absolute path-name:

prompt> ./mycommand

Some people want to have commands in the current directory to be found in the PATH, which is possible, however it has risks, especially if you are working as superuser on a machine, but even as common user, you run the risk of executing a commandfile that some malicious user placed in a directory in which you are lured to cd to.

If you insist on doing this, please make sure you put the '.' at the end of the PATH, so system commands cannot be hidden behind a command file in the current directory with the same name!

What is man

Most commands have a manual page, you can invoke the manual page by giving the command: man <command> in an interactive shell.

prompt> man bash

will give you the manual page of the bash shell. Manual pages have a few common headers which you can find in nearly all man pages. Once you get used to this, you can quickly find out how to use the command more effectively.

prompt> man -k something

Will search for the keyword something in the summary of each man-page on the system. This may help you find the right command to do what you want, without knowing the exact command name. This is not a fool-proof solution and often a search engine will be more effective!

Typical Linux commandline

If you work in a terminal (window) you can give commands via the shell. The shell interprets your command, most importantly it splits the line you provide into words separated by whitespace.

prompt> COMMAND [arg1] [arg2] ... <enter>
prompt> printed by the shell, usually user@host $ , but it can be customised!
COMMAND the command you want to execute (you type it)
[arg1] argument for the command
[arg2] another argument for the command
... further arguments for the command
<enter> You press the return key, or enter, to "give" the command to the shell. After this, your line will be interpreted and executed.

examples

ls -l long (-l) listing of all files and directories in the current working directory
ls -a -l long (-l) listing of all files and directories in the current working directory, also show hidden entries (-a)
ls -l /tmp long (-l) listing of all files and directories in /tmp
ls -l /bin/bash long (-l) listing of the file /bin/bash
man man show manual page of the man command

What is the environment?

The environment is a collection of shell variables that is passed to the commands you type. Check what is in the environment with the command:

$ env

In a Bourne shell, a variable can be set like this:

prompt> MYVAR=something

to show what the variable holds (Note the $ sign):

prompt> echo $MYVAR

To make it part of the environment:

prompt> export MYVAR

Variables that are usually present are

HOME your home directory, used when you give the command cd without arguments to get to your home directory
PATH the list of directories searched for the name of the command you give without a / in it.

NB Do not put the current directory "." at the front of the path!

EDITOR The editor command used when you invoke a command that uses an editor to let you modify files. Typical editor commands are vi, nano, joe
PAGER The pager command used when e.g. a manual page doesn't fit on a screen. Typical pagers are less, more

And many more...

What is input/output redirection

Whenever you start a command, the shell opens three "files" by default. These are stdin, stdout and stderr, also known by their numbers, 0, 1 and 2.

The (bourne) shell has the ability to redirect the flow of these files to somewhere else.

Without redirection, the three files are all connected to the terminal, so stdin to the keyboard device, stdout and stderr to the terminal window.

If you command the shell to redirect the output to a file, you can store the output of the command to a file, instead of seeing it on the window where you typed the command.


examples

ls > mylisting output redirection creates or overwrites the file mylisting with the output of the ls command
ls >> mylisting output redirection creates or appends the file mylisting with the output of the ls command
ls some-file 2>myerrors standard error redirection creates or overwrites the file myerrors with the error message produced by the ls command
wc -l <$HOME/.bash_history using input redirection count the number of lines in the file $HOME/.bash_history. Try the same command with and without the <!

With the < the stdin is redirected from the file $HOME/.bash_history to the wc command. Without the < the filename is passed as an argument to wc so it can open the file itself.

Instead of redirecting to a file, it is also possible to redirect the output of a command to the stdin of another command. This is called a pipeline. Another way to look at this is to see the command after the | symbol as a filter. Multiple filters can be used in sequence to massage the output of a command into a desirable format or selection.

prompt> cat /etc/shells | wc -l

How can I run multiple commands from one commandline?

Normally, commands are separated by a newline <enter>, however, you can also use a ; semicolon to seperate commands:

prompt> ls; sleep 10; echo bla

The above will list the directory, wait 10 seconds, then print bla

How can I run a command non-interactively and without having to wait for it to finish?

A common problem is that you want to run a command that takes a long time to finish and can do so without needing any input.

You can start a command to run in the background by adding a &

prompt> ls -l &

As you will see when you try this, it is still connected to the terminal. If you prepend the command nohup you can disconnect it and even logout of the machine you run the command on. The output will typically end up in a file called nohup.out.

The shell has some commands that allow you to change the background, foreground and stopped state of a job (i.e. a running command).

  • The key control-Z stops a foreground job and returns you to the shell prompt
  • the command fg brings a stopped job or a background job to running in the foreground (access to the terminal)
  • the command bg brings a stopped command to the background
  • the command jobs lists the background and stopped jobs started from your shell
  • the command kill can send a signal to a background jobs. E.g. kill %1
    • NB, the kill command is most commonly used to send signals to process id's (PID), which do not have to be started in the current shell.

Alternatively: screen

If you want to run the program and be able to provide input or check on its progress now and then, you can run a virtual terminal program, like screen or tmux, these will continue running when you disconnect and log out, later you can reconnect to see how it's going. See man screen or man tmux.

What is filename expansion or wildcards?

The shell has some tools to save you typing long filenames. E.g. when you don't want to list all files in a directory:

ls -d ? list all files and directories with a name of one character
ls -d ??? list all files and directories with a name of three character
ls -d a* list all files and directories with a name starting with "a" and any number of unspecified characters after it
ls -d .* list all files and directories with a name of three character
ls -d *[0-9] list all files and directories ending with a number
ls -d *[a-z] list all files and directories ending with a lowercase letter
ls -d *[A-Z0-9] list all files and directories ending with an uppercase letter or a number
ls -d ~/a* list all files and directories in my homedirectory starting with the letter a
ls -d *\** or ls -d *'*'* list all files and directories with names containing a real *. Use the \' or single quotes to escape the character following it. i.e. prevent the shell from using the * for wildcard expansion.
characters to escape < > [ ] ( ) { } * & ! ~ ; "space" "quotes" and many more...

The option -d of ls makes sure to list the entry itself and not the contents of the directory by that name.

More information about wildcards can be found in the bash manual.

NB A special case is when you escape the newline or <enter> character. The shell will not start interpreting the command and you can add more to your command line on the next line.

prompt> ls \<enter>
-ltr<enter>
...
prompt>

Will be the same as "ls -ltr"

How do I customise my interactive shell session?

In this section we assume you are using the Bourne Again SHell (bash). You can configure your login shell via DIY. (If you are running this on your own Linux machine, you can use the chsh command to change the login shell.)

What happens when I login?

When you login, bash checks a list of possible locations for configuration files (which are full of shell commands).

Bash looks for the following files

/etc/profile
~/.bash_profile
~/.bash_login
~/.profile.

When you start a new interactive shell on the same machine, bash looks for other files:

/etc/bash.bashrc
~/.bashrc

People often want to have the same settings in all shells, so a lot of times you see the following in ~/.profile:

if [ -f ~/.bashrc ]; then
        source ~/.bashrc
fi

And all configuration can exist in ~/.bashrc

In either the system or personal bashrc files, variables and aliases are set to preference:

  • PATH is set to find systemwide programs, you can expand this search path to include directories in your homedir
  • PS1 is set to a useful prompt
  • PAGER


How can I change the way my prompt looks?

The variable PS1 is the prompt you normally see when you can enter a command to the shell. Various ways exist to make this more useful.

  • Set PS1 directly
  • Set PROMPT_COMMAND to something that sets PS1

To make it permanent, define PS1 or PROMPT_COMMAND in your ~/.bashrc file.

examples

PS1='\u@\h:\w\$ '
PS1='\u@\h:\w [$?]\$ '
PS1='[\e[32m]\u@\h:[\e[33m]\w[\e[32m]$[\e[0m] '

Other customizations

Scripting

Often you want to be able to reproduce a sequence of commands or even create a small program to do a lot of work in the shell.

For this purpose, you can create a batch script, shell file, or shell script. We recommend you do this in the bourne shell (sh) or (bash). Using (t)csh for shell scripts is not recommended, see Csh Programming Considered Harmful.

Basic shell script

echo start of script
ls -l
echo end of script

If you put the above 3 lines in a file myscript, you can call bash myscript and run the commands in the file.

In order to make the file a command, you can make the file executable by giving the command: chmod a+x myscript

Then you can call the script using ./myscript

Choose interpreter #! hashbang

How to provide multiple lines of input: Here Documents

How to use the output of command as parameters: Command substitution

prompt> CMD-1 `CMD-2`
or ~equivalent in POSIX shell
prompt> CMD-1 $(CMD-2)

Call CMD-1 with arguments created from the output of CMD-2

example

Rename a file to have a different extension or a date in the name.

  • Get the date in a particular format (see man date)
prompt> date "+%Y%m%d-%H:%M"
20180327-12:41
  • Get the first part of the name
prompt> basename pietje.jpg .jpg
pietje
  • Use both commands to create a new name for move (rename)
prompt> mv -v pietje.jpg $(basename pietje.jpg .jpg)-$(date "+%Y%m%d-%H:%M").jpg
'pietje.jpg' -> 'pietje-20180327-12:45.jpg'
  • The CMD-2 will be executed before CMD-1.
  • Command substitution can be invoked using `CMD-2` or $(CMD-2)
  • The advantage of $() is that it can be nested $(CMD-2 $(CMD-3))

Unix Permissions

Linux and unix have read, write and execute/access permissions for the owner, the group and others. This concept works very well, but has some limitations.

One common mistake is that the permissions for "others" are often called "world", which implies that the whole world has access to the file or directory. Others in this case means not the owner and not any member of the group.

Basic unix permissions

To find out about permissions on the filesystem, you can give the ls -l command, which shows the permissions in the first column:

prompt> ls -l
total 8.0K
drwx------ 2 simon simon 4.0K Mar 28 13:23 a
drwxrwxr-x 2 simon simon 4.0K Mar 28 13:23 b
-rw-rw-r-- 1 simon cncz     0 Mar 28 13:23 c
-r--r--r-- 1 simon simon    0 Mar 28 13:23 d
-rwxrwxrwx 1 simon simon    0 Mar 28 13:23 e

The output meaning is:

drwxr-xr-- 2 simon cncz  4.0K Mar 28 13:23 a
|||||||||| |   |     |     |        |      |
|||||||||| |   |     |     |        |      +- filename
|||||||||| |   |     |     |        +-------- modification date/time
|||||||||| |   |     |     +----------------- filesize
|||||||||| |   |     +----------------------- group
|||||||||| |   +----------------------------- owner
|||||||||| +--------------------------------- number of hardlinks to file
|||||||||+----------------------------------- execute bit for others
||||||||+------------------------------------ write bit for others
|||||||+------------------------------------- read bit for others
||||||+-------------------------------------- execute bit for group
|||||+--------------------------------------- write bit for group 
||||+---------------------------------------- read bit for group 
|||+----------------------------------------- execute bit for owner
||+------------------------------------------ write bit for owner
|+------------------------------------------- read bit for owner
+-------------------------------------------- directory (d), file (-) or ...
d/- directory (d) or file (-)
r r (permission to read) or - no permission to read
w w (permission to write) or - no permission to write
x x (permission to access/execute) or - no permission to access a directory or execute a file

The order of evaluation is like this:

  1. is the owner my effective user id? -> apply the permissions for owner -> finished
  2. am I a member of the group listed for this file/directory? -> apply the permission for the group -> finished
  3. am I not the owner and not a member of the group? -> apply the permissions for other -> finished

In case of directories, the execute bit has to apply for all the directories in the path all the way back to the root directory /.

Changing permissions

chmod

You can use chmod to change the permission bits.

The permissions are stored efficiently in the filesystem (in the inode). The permissions can be represented by 3 bits as an octal number ( 0 1 2 3 4 5 6 7 10 11 ...)

The chmod command can use either a symbolic representation or octal representation of the permissions:

prompt> chmod u+rw,g=r,o= thefile

This is using chmod to change the permissions using a symbolic representation: change user permissions to add read and write permissions (don't change execute permisions), set group to read and other to no permissions.

prompt> chmod 760 thefile

This is the octal way to represent the permissions, note that this cannot leave bits unchanged! You specify the permissions in three (or four) octal numbers, representing permissions for user, group and others. When using four numbers, this can set additional permissions, see advanced permissions.

octal value binary value permissions
0 000/--- no permissions
1 001/--x only execute/access permission
2 010/-w- only write permssion
3 011/-wx write and execute permissions
4 100/r-- only read permission (common for files)
5 101/r-x read and execute permissions (common for directory)
6 110/rw- read and write permissions (common for non executable files)
7 111/rwx read write and execute permissions (common for directories and executable files)

Important points

  • Note that directories need execute permissions to be usable (i.e. enter it)
  • Permissions can be changed recursively to all files/directories in the specified files/directories; chmod -R u+w somedir
  • changing permissions can be dangerous, you can loose access to your files or expose files to others that should not have access to them.

chown

Change the owner of a file/directory (only usable by root)

prompt> chown john somefile
  • chown also supports the -R flag

chgrp

Change the group of the file/directory

prompt> chgrp myothergroup somefile
  • chgrp also supports the -R flag

Advanced unix permissions

  • sticky bit
  • other types of files
  • umask


3.2 Hoe kan ik mijn bestanden ontoegankelijk maken voor anderen?
----------------------------------------------------------------

Daarvoor is zowel op Unix als op MSDOS met PC-NFS het 'chmod'
commando. (Het bekijken van de protecties gaat met 'ls -lg' ook op
MSDOS!)  Chmod heeft een aantal varianten om de 'bitjes' te zetten:

H:> ls -lg bestandje
-rwxr-xr-x  groep  eigenaar 112 bestandje

|||       -> eigenaar
|||    -> groep
||| -> wereld
H:>

Dus de protectie van directories en bestanden worden steeds door 3
'bitjes' gegeven: rwx met de 'waardes' 4,2,1

Het chmod commando wordt als volgt gebruikt:

wn4> chmod u=rwx,g=rx,o= bestandje
wn4> ls -lg bestandje
-rwxr-x---  groep  eigenaar 112 bestandje

Nu is het bestand alleen schrijfbaar voor de eigenaar, en lees en
executeerbaar voor de eigenaar en de groep. De rest mag niets.

Ander voorbeeld:

H:> chmod g=,o= geheim
H:> ls -lg geheim
-rwx------  groep  eigenaar 12 geheim

Nu kan alleen de eigenaar het bestand lezen, wijzigen en
executeren.  Alle anderen kunnen niets.

Ook kun je in chmod expliciet de bitjes opgeven, in octale notatie,
zoiets als:

wn4> chmod 700 bestandje
wn4> ls -lg bestandje
-rwx------  groep  eigenaar 112 bestandje

Hiermee is het bestand alleen nog te lezen, schrijven en executeren
door de eigenaar.

wn4> chmod 444 bestandje
wn4> ls -lg bestandje
-r--r--r--  groep  eigenaar 112 bestandje

Nu is het bestand nog alleen nog te lezen door iedereen.

Verder zie 'man chmod' en 'man ls' op Unix, voor PC-NFS staat e.e.a.
in de manual.

Bijbehorend is de umask variabele: deze maskeert bitjes die niet
vanzelf aan moeten gaan voor nieuwe bestanden: Als de umask 022 is
dan zullen de bitjes van de eigenaar niet beinvloed worden, het '2'
bitje (schrijven) voor de groep en de wereld wordt afgezet voor een
nieuw bestand. Ook dit is weer waar voor zowel MSDOS als Unix.
Onder MSDOS met PC-NFS zet men het umask als volgt:

C:> net umask 077

Dit zet alle toegang tot nieuwe bestanden voor anderen dan de
eigenaar af.  Onder Unix gaat het bijna identiek:

wn4> umask 022

Nu zijn voor alle nieuwe bestanden de 'schrijf bitjes' uit.

Tenslotte: de protectie van de directorie is ook belangrijk! Het
verwijderen van een file is een directorie operatie! Dus al heb ik
op de file zelf geen rechten, als ik wel mag schrijven op de
directorie kan ik het bestand gewoon verwijderen!


3.3   Help, ik ben een file op Unix kwijt! Kan ik die terug krijgen?
--------------------------------------------------------------------

Zie http://www.sci.kun.nl/cncz/procedures/backups.html