Every year's group of XPUB students carries along with them a "sandbox": a shared server that is used in classes, as part of Special Issues and the second year.
The term "sandbox" and the thinking around it crosses different projects, courses, ideas and terms, including ...
... Aymeric's PhD thesis Sandbox Culture: A Study of the Application of Free and Open Source Software Licensing Ideas to Art and Cultural Production (2017), where he is using the image of the sandbox to refer to environments "where code becomes a constituent device for different communities to experience varying ideologies and practices".
... A Social Shell & Mesh Cookbooks, one of the contributions to the summer school Relearn (2014) in Brussels, prepared by Michael Murtaugh & Anne Laforet, in which they proposed "to deploy a network of small server nodes (via Raspberry Pi, Olimex, or possibly installed on individual's laptops)" that holds "a web-based commandline/shell environment (a social shell) in which commandline programming is enhanced by "dynamic" manual pages provided by a live "cookbook" or collection of stored "recipes"/scripts (the mesh cookbook)".
... Shadow IT, which has been Aymeric's way to phrase and think about XPUB's infrastructure in relation to the larger institution that XPUB is part of.
... the game Dir Derive (A Situationist Filesystem) by Silvio Lorusso, Magnus Lawrie, Margaret Malcolm, Aymeric Mansoux; a project that emerged during RWX (Read/Write/eXecute) as part of Dave Young's initiative/project l-o-c-a-l-h-o-s-t.com. (2015), in which the filesystem is turned into a "collective ludic experience" (...) "in which multiple users discover new areas of the filesystem by interacting with each other".
... feminist server initiatives such as Anarchaserver, where "feminist servers have been a topic of discussion, a partially-achieved aim and a set of slow-political practices among an informal group of transfeminists interested in creating a more autonomous infrastructure to ensure that data, projects and memory of feminist groups are properly accessible, preserved and managed"[1].
... public access unix systems (aka pubnix systems), where the server becomes a "social club" as "at its core, Unix has a social architecture, and as tilde.town users may know, there is a large subculture of people who have been using Unix and Unix-like operating systems this way for a long time"[2].
... and Living in a Sandbox, a course taught by Aymeric & Michael at some point in time at WdKA/PZI (2008-2018?).
What these different initiatives have in common, is that they turn a server into a pedagogical space and social environment.
(Soon!)
Very short drafty version:
$ ssh XPUB1@192.168.1.XXX
$ echo "hello" > /dev/usb/lp1
$ who
$ sudo adduser YOURUSERNAME
logout
or exit
$ ssh YOURUSERNAME@192.168.1.XXX
$ who
$ sudo adduser YOURUSERNAME GROUPNAME
$ wall
, $ cd
,
$ ls
, $ reboot
, $ date
,
$ cowsay
, $ figlet
$ cd /home/
or $ cd ~
,
$ ls
We will mainly use the following ways to log into the sandbox: SSH, FTP and Jupyterlab.
$ sudo adduser USERNAME
$ ip address
(or
$ ip a
in short)$ ssh USERNAME@ip-address
To do this, you need to install the SSH_proxy_jump that will allow you to access the sandbox through the XPUB HUB.
Not easy unfortunately...
As it is not so easy to use a proxy_jump in Filezilla (as far as i could figure out).
(If Jupyter Lab is installed, because sometimes we install it only later in the year...)
Through the browser:
https://hub.xpub.nl/SANDBOXNAME/~USERNAME/__lab__/
Once you're logged in, you can interact with the filesystem of the server and the programs that are installed on it. To do so, you need to type commands.
Let's first see who else is currently present on the server by typing
the command $ who
.
If there are others present, you can send a message to the
$ wall
! (write your message and send it with
CTRL+D
)
Every command works slightly differently, but luckily you don't have
to remember all of them as these commands come with a manual :). To
access these manuals, you can type: $ man COMMAND
.
So, for example, if you type $ man wall
and check the
synopsis, it says:
wall [-n] [-t timeout] [-g group] [message | file]
. This
tells you that you need to type "wall", the name of the
program, and optionally can use all the things in between
[]
's. So in this case, we can also write
$ wall MESSAGE
in one line, and hit enter to send the
message.
And if everyone does this at the same time, your command line may get
very cosy and very noisy. :) TIP! You can prevent others to "write" to
your terminal with $ mesg
.
If you want to send a message to a particular user instead, you can
use $ write
.
Oke, it's time to move around!
Try for example the command $ ls
... which stands for
"list", this will show you all the files in the current folder.
Now try $ cd /
... which stands for "change directory",
to move to another folder, in this case "root" (/
).
Try $ ls
again to see what is here...
And wander a bit around!
Some places to definitely check out, because they will be places that you might come back to quite a bit:
/home/
/etc/
/var/
If you would like to go over all these thing more slowly, and step by step, you can try the following resources:
From: https://pzwiki.wdka.nl/mediadesign/Shell_Cheat_Sheet
From: https://community.linuxmint.com/tutorial/view/244
date – Show the current date and time
cal – Show this month’s calendar
uptime – Show current uptime
w – Display who is online (same as
who)
whoami – Who you are logged in as
finger user – Display information about
user
uname -a – Show kernel information
cat /proc/cpuinfo – CPU information
cat /proc/meminfo – Memory information
df -h – Show disk usage
du – Show directory space usage
free – Show memory and swap usage
Enter – Run the command
Up Arrow – Show the previous command
Ctrl + C – Halts the current command, cancel the
current operation and/or start with a fresh new line
Ctrl + L – Clear the screen
command | less – Allows the scrolling of
the bash command window using Shift + Up Arrow and
Shift + Down Arrow
!! – Repeats the last command
Ctrl + A – Return to the start of the command you’re
typing
Ctrl + E – Go to the end of the command you’re
typing
Ctrl + D – Log out of current session, similar to
exit
grep pattern files – Search for
pattern in
files
grep -r pattern dir – Search
recursively for pattern in
dir
command | grep
pattern – Search for
pattern in the output of
command
locate file – Find all instances of
file
find / -name filename – Starting with the root
directory, look for the file called
filename
find / -name “\filename\” – Starting
with the root directory, look for the file containing the string
*filename*
locate filename** – Find a file
called filename using the locate command; this
assumes you have already used the command updatedb (see
next)
updatedb – Create or update the database of
files on all file systems attached to the Linux root directory
which filename – Show the subdirectory
containing the executable file called
filename
grep TextStringToFind /dir – Starting
with the directory called dir, look for and
list all files containing TextStringToFind
chmod octal file – Change the
permissions of file to
’’octal’’, which can be found separately for user,
group, and world by adding: 4 – read (r), 2 – write (w), 1 – execute
(x)
Examples:
chmod 777 filename – read, write, execute for all
chmod 755 filename – rwx for owner, rx for group and
world
chmod symbolic file – You can also
change permissions in symbolic mode.
Examples:
chmod ugo+x filename – to make a file executable
chmod g+w filename – to grant write access to the
group
chmod o-r filename – to remove read access to
others
u: user
g: group
o: others
r: read
w: write
x: executable
-R: recursively
For more options, see man chmod.
chown – change ownership
chown name_of_new_owner ’’filename’’
chown newuser:newgroup filename – To change ownership
of a file to newuser and the group
newgroup
chown root:www-data /var/www/html/ – To change
ownership of a file to root and the group
www-data
Check the current ownership of a file with: ls
-l
Check which groups you are in with: groups
ls – Directory listing
ls -l – List files in current directory using long
format
ls -al – Formatted listing with hidden files
cd dir – Change directory to
dir
cd – Change to home
mkdir dir – Create a
directory dir
pwd – Show current directory
rm name – Remove a file or directory called
name
rm -r dir – Delete directory
dir
rm -f file – Force remove
file
rm -rf dir – Force remove an entire directory
dir and all it’s included files and
subdirectories (use with extreme caution)
cp file1 file2 – Copy
file1 to file2
cp -r dir1 dir2 – Copy
dir1 to dir2; create
dir2 if it doesn’t exist
cp file /home/dirname – Copy the
filename called file to the
/home/dirname directory
mv file /home/dirname – Move the
file called filename to the
/home/dirname directory
mv file1 file2 – Rename or
move file1 to file2;
if file2 is an existing directory, moves
file1 into directory
file2
ln -s file link – Create symbolic link
link to file
touch file – Create or update
file
cat > file – Places standard input into
file
cat file – Display the file called
file
more file – Display the file called
file one page at a time, proceed to next page
using the spacebar
head file – Output the first 10 lines of
file
head -20 file – Display the first 20 lines of
the file called file
tail file – Output the last 10 lines of
file
tail -20 file – Display the last 20 lines of
the file called file
tail -f file – Output the contents of
file as it grows, starting with the last 10
lines
ifconfig – List IP addresses for all devices on the
local machine
iwconfig – Used to set the parameters of the network
interface which are specific to the wireless operation (for example: the
frequency)
iwlist – used to display some additional information
from a wireless network interface that is not displayed by
iwconfig
ping host – Ping
host and output results
whois domain – Get whois information for
domain
dig domain – Get DNS information for
domain
dig -x host – Reverse lookup
host
wget file – Download
file
wget -c file – Continue a
stopped download
ssh user@host – Connect to
host as user
ssh -p port user@host – Connect to
host on port port as
user
ssh-copy-id user@host – Add your key
to host for user to
enable a keyed or passwordless login
adduser accountname –
Create a new user call accountname
passwd accountname – Give
accountname a new password
su – Log in as superuser from current login
exit – Stop being superuser and revert to normal
user
ps – Display your currently active processes
top – Display all running processes
kill pid – Kill process id
pid
killall proc – Kill all processes named
proc (use with extreme caution)
bg – Lists stopped or background jobs; resume a stopped
job in the background
fg – Brings the most recent job to foreground
fg n – Brings job
n to the foreground
shutdown -h now – Shutdown the system now and do not
reboot
halt – Stop all processes - same as above
shutdown -r 5 – Shutdown the system in 5 minutes and
reboot
shutdown -r now – Shutdown the system now and
reboot
reboot – Stop all processes and then reboot - same as
above
startx – Start the X system
Meta Characters are characters that have special meaning within the terminal
~
the tilde stands for the user’s home.
cd ~/
change directory to home
.
dot stands for this directory.
ls .
list this directory
..
dot dot stands for the parent
directory to this directory. cp myfile.jpg ..
copy
myfile.jpg to the parent directory
*
asterisk is a wildcards which represents zero or more
characters ls P*.jpg
will list all the files, in the
current directory, that begin with P and end with .jpg
\
backslash it is a literal character. It escape the
meta value of the meta-characters and display them only as literal
characters. echo Foo \*
will output Foo *
If \
wasn’t there it would output all the files in that directory.
A pipe (” | “) sends the output of one program to the input of another program.
echo "my sentence"| wc
the echoed sentence “my sentence”
is pipped into the program wc which counts the number of lines,
words, and characters
>
Writes the output of a command to a file, rather
than to print on terminal.
df > df_output.txt
redirect the content of
man dfM
to a file called df_output.txt
If the said file doesn’t exit it will create it, if it already exists it will overwrite its contents/
>>
appends the output of a command to a file,
without overwriting the original file.
echo 'also add this' >> df_output.txt
will add
‘also add this’ to the contents of df_output.txt
Package managers like apt-get
and aptitude
(on Debian/Ubuntu Linux distributions) and Homebrew and MacPorts on Mac,
allow more (command-line, but not only) programs, than the ones that
come with the operating, to be installed on our system.
sudo apt search [app name]
sudo apt install [app name]
sudo apt remove [app name]
We can install webserver software on the sandbox, which will allow us to interact with the server using the web. The most often used webserver softwares are apache and nginx. At XPUB we often use nginx, so let's do the same here, so we can copy/paste configuration info ;).
To install a webserver, someone needs to run the following, which will install the webserver for all users on the server:
$ sudo apt install nginx
Oke, nginx is installed!
Changes to the configuration of nginx are made here:
/etc/nginx/sites-available/default
$ sudo cat /etc/nginx/sites-available/default
Here we can for example enable the "autoindex on" function, by adding:
location / {
autoindex on;
}
Changes will apply after reloading nginx:
$ sudo service nginx reload
When you install nginx, it automatically makes a specific folder
where we can store web pages that we want to publish:
/var/www/html/
$ cd /var/www/html/
See what is there:
$ ls
Let's make a folder for some "hello hyperworld" first pages on this sandbox:
$ mkdir hello
$ cd hello
Make a web page in this folder with nano (a CLI text editor):
$ nano /var/www/html/hello/YOURUSERNAME.html
You can press CTRL+X to close the file, and type "Y" to save the changes.
And now visit it in the browser: http://192.168.1.XXX/hello/
Next to this folder, you can publish stuff in your home
folder, in the public_html
folder.
$ cd /home/
$ ls
$ cd YOURUSERNAME
$ cd public_html
Make a web page and publish it in your personal
public_html
:
$ nano /home/YOURUSERNAME/public_html/hello.html
or
$ nano ~/public_html/hello.html
And now visit it in the browser: http://192.168.1.XXX/~YOURUSERNAME/hello.html
Hmm, there is no public_html
folder?
If this folder does not exist yet, you need to enable this feature in the nginx configuration:
$ sudo nano /etc/nginx/sites-enabled/default
Add the following:
location ~ ^/~(.+?)(/.*)?$ {
alias /home/$1/public_html$2;
index index.html index.htm;
autoindex on; # this feature automatically lists all files in the public_html folder!
}
Test if your changes did not contain mistakes:
$ sudo nginx -t
And reload nginx to apply the changes:
$ sudo service nginx reload
If you want to dive further into HTML and CSS, see: HTML + CSS (also printed as a notebook)
Set up a collaborative way of making the index.html page for the server, using etherpad, and find a way to include hints in the page about how this web page has been made.
Constraints:
$ wget https://pad.xpub.nl/p/<yourpad>/export/txt > /var/www/html/index.html
See also: HUB