mkdir_rmdir
user@host ~ $ ls -Al
total 0
user@host ~ $ mkdir notes/2025/04
mkdir: cannot create directory ‘notes/2025/04’: No such file or directory
user@host ~ $ mkdir notes notes/2025 notes/2025/04
user@host ~ $ tree
.
└── notes
└── 2025
└── 04
4 directories, 0 files
user@host ~ $ mkdir -p projects/2025/04
user@host ~ $ tree
.
├── notes
│ └── 2025
│ └── 04
└── projects
└── 2025
└── 04
7 directories, 0 files
user@host ~ $ touch file
user@host ~ $ mkdir file projects/2024/03
mkdir: cannot create directory ‘file’: File exists
mkdir: cannot create directory ‘projects/2024/03’: No such file or directory
user@host ~ $ mkdir -p file projects/2024/03
mkdir: cannot create directory ‘file’: File exists
user@host ~ $ tree
.
├── file
├── notes
│ └── 2025
│ └── 04
└── projects
├── 2024
│ └── 03
└── 2025
├── 04
└── 05
10 directories, 1 file
user@host ~ $ rmdir notes/2025/04
user@host ~ $ rmdir notes
rmdir: failed to remove 'notes': Directory not empty
user@host ~ $ tree
.
├── file
├── notes
│ └── 2025
└── projects
├── 2024
│ └── 03
└── 2025
├── 04
└── 05
9 directories, 1 file
user@host ~ $ rmdir -p notes/2025
user@host ~ $ tree
.
├── file
└── projects
├── 2024
│ └── 03
└── 2025
├── 04
└── 05
7 directories, 1 file
user@host ~ $
ln
user@host ~ $ ls -il *
15466639 -rw-r--r-- 1 user users 55 Apr 6 00:00 text
user@host ~ $ ln text hardlink
user@host ~ $ ln -s text symlink
user@host ~ $ ls -il *
15466639 -rw-r--r-- 2 user users 55 Apr 6 00:00 hardlink
15466649 lrwxrwxrwx 1 user users 4 Apr 6 01:00 symlink -> text
15466639 -rw-r--r-- 2 user users 55 Apr 6 00:00 text
user@host ~ $ cat text
One day a tortoise will learn how to fly.
(Small Gods)
user@host ~ $ fortune -s >> hardlink
user@host ~ $ ls -il *
15466639 -rw-r--r-- 2 user users 183 Apr 6 01:00 hardlink
15466649 lrwxrwxrwx 1 user users 4 Apr 6 01:00 symlink -> text
15466639 -rw-r--r-- 2 user users 183 Apr 6 01:00 text
user@host ~ $ cat text
One day a tortoise will learn how to fly.
(Small Gods)
"Real stupidity beats artificial intelligence every time."
-- Bursar 1 - Hex 0
(Terry Pratchett, Hogfather)
user@host ~ $ rm text
user@host ~ $ ls -il *
15466639 -rw-r--r-- 1 user users 183 Apr 6 01:00 hardlink
15466649 lrwxrwxrwx 1 user users 4 Apr 6 01:00 symlink -> text
user@host ~ $ mkdir text
user@host ~ $ ls -dil *
15466639 -rw-r--r-- 1 user users 183 Apr 6 01:00 hardlink
15466649 lrwxrwxrwx 1 user users 4 Apr 6 01:00 symlink -> text
15466650 drwxr-xr-x 2 user users 4096 Apr 6 01:00 text
user@host ~ $ ln text oh_no
ln: text: hard link not allowed for directory
user@host ~ $ ln -s whatever broken
user@host ~ $ ln -s .. text/back
user@host ~ $ ls -dil * text/*
15466651 lrwxrwxrwx 1 user users 8 Apr 6 01:00 broken -> whatever
15466639 -rw-r--r-- 1 user users 183 Apr 6 01:00 hardlink
15466649 lrwxrwxrwx 1 user users 4 Apr 6 01:00 symlink -> text
15466650 drwxr-xr-x 2 user users 4096 Apr 6 01:00 text
15466652 lrwxrwxrwx 1 user users 2 Apr 6 01:00 text/back -> ..
user@host ~ $ cd text/back
user@host ~/text/back $ cd symlink/back
user@host ~/text/back/symlink/back $ cd text/back
user@host ~/text/back/symlink/back/text/back $ pwd
/home/user/text/back/symlink/back/text/back
user@host ~/text/back/symlink/back/text/back $ readlink -f .
/home/user
user@host ~/text/back/symlink/back/text/back $ realpath .
/home/user
user@host ~/text/back/symlink/back/text/back $ date > now
user@host ~/text/back/symlink/back/text/back $ ln now hardlink text
user@host ~/text/back/symlink/back/text/back $ tree
.
├── broken -> whatever
├── hardlink
├── now
├── symlink -> text
└── text
├── back -> ..
├── hardlink
└── now
cp_mv
user@host ~ $ tree --noreport
.
├── date
├── dir
│ ├── file
│ └── now
└── text
user@host ~ $ cp text normalcopy
user@host ~ $ cp -a text archivecopy
user@host ~ $ ls -l text *copy
-rw-rw---- 1 user wheel 55 Apr 6 01:00 archivecopy
-rw-r----- 1 user users 55 Apr 6 02:00 normalcopy
-rw-rw---- 1 user wheel 55 Apr 6 01:00 text
user@host ~ $ cp -a date text copy
cp: target 'copy': No such file or directory
user@host ~ $ mkdir copy
user@host ~ $ cp -a date text copy
user@host ~ $ cp copy recursive
cp: -r not specified; omitting directory 'copy'
user@host ~ $ cp -r copy recursive
user@host ~ $ tree -Dgp --noreport recursive
[drwxr-xr-x users Apr 6 02:00] recursive
├── [-rw-r--r-- users Apr 6 02:00] date
└── [-rw-r----- users Apr 6 02:00] text
user@host ~ $ cp -a copy archive
user@host ~ $ tree -Dgp --noreport archive
[drwxr-xr-x users Apr 6 02:00] archive
├── [-rw-r--r-- users Apr 6 01:00] date
└── [-rw-rw---- wheel Apr 6 01:00] text
user@host ~ $ cp archive/date archive/text
user@host ~ $ cp -i archive/date archive/text
cp: overwrite 'archive/text'? yes
user@host ~ $ ls
archive archivecopy copy date dir normalcopy recursive text
user@host ~ $ mv normalcopy text
user@host ~ $ ls
archive archivecopy copy date dir recursive text
user@host ~ $ mv -i archivecopy text
mv: overwrite 'text'? yes
user@host ~ $ mv text archivecopy
user@host ~ $ mv archivecopy date dir
user@host ~ $ tree -Dgp --noreport
[drwxr-xr-x users Apr 6 02:00] .
├── [drwxr-xr-x users Apr 6 02:00] archive
│ ├── [-rw-r--r-- users Apr 6 01:00] date
│ └── [-rw-rw---- wheel Apr 6 02:00] text
├── [drwxr-xr-x users Apr 6 02:00] copy
│ ├── [-rw-r--r-- users Apr 6 01:00] date
│ └── [-rw-rw---- wheel Apr 6 01:00] text
├── [drwxr-xr-x users Apr 6 02:00] dir
│ ├── [-rw-rw---- wheel Apr 6 01:00] archivecopy
│ ├── [-rw-r--r-- users Apr 6 01:00] date
│ ├── [-rw-rw---- wheel Apr 6 01:00] file
│ └── [-rw-r--r-- users Apr 6 01:00] now
└── [drwxr-xr-x users Apr 6 02:00] recursive
├── [-rw-r--r-- users Apr 6 02:00] date
└── [-rw-r----- users Apr 6 02:00] text
user@host ~ $ mv dir copy
user@host ~ $ tree --noreport
.
├── archive
│ ├── date
│ └── text
├── copy
│ ├── date
│ ├── dir
│ │ ├── archivecopy
│ │ ├── date
│ │ ├── file
│ │ └── now
│ └── text
└── recursive
├── date
└── text
user@host ~ $
scp_sftp
user@host ~ $ whoami
user
user@host ~ $ ls
date dir text
user@host ~ $ scp example.com:myScript.pl scriptFromExample.pl
user@example.com's password:
myScript.pl 100% 85 80.2KB/s 00:00
user@host ~ $ ls
date dir scriptFromExample.pl text
user@host ~ $ scp user@example.com:myScript.pl .
user@example.com's password:
myScript.pl 100% 85 84.4KB/s 00:00
user@host ~ $ scp john@example.com:todo.txt .
john@example.com's password:
todo.txt 100% 50 49.3KB/s 00:00
user@host ~ $ ls
date dir myScript.pl scriptFromExample.pl text todo.txt
user@host ~ $ scp todo.txt user@mylaptop:/tmp/johns_todo.txt
user@mylaptop's password:
todo.txt 100% 50 75.5KB/s 00:00
user@host ~ $ scp text user@example.com:
user@example.com's password:
text 100% 30 49.2KB/s 00:00
user@host ~ $ scp dir example.com:
user@example.com's password:
scp: local "dir" is not a regular file
scp: failed to upload file dir to .
user@host ~ $ scp -r dir example.com:
user@example.com's password:
file 100% 55 94.1KB/s 00:00
now 100% 30 115.4KB/s 00:00
user@host ~ $ scp john@example.com:photos/cat.jpg \
> john@example.com:photos/ghoti.jpg \
> user@mylaptop:/tmp/johns_todo.txt \
> user@example.com:
user@example.com's password:
john@example.com's password:
cat.jpg 100% 100KB 26.8MB/s 00:00
john@example.com's password:
ghoti.jpg 100% 236KB 31.8MB/s 00:00
user@mylaptop's password:
johns_todo.txt 100% 50 47.2KB/s 00:00
user@host ~ $ sftp john@example.com
john@example.com's password:
Connected to example.com.
sftp> pwd
Remote working directory: /home/john
sftp> ls
documents photos todo.txt
sftp> lpwd
Local working directory: /home/user
sftp> lls
date dir myScript.pl scriptFromExample.pl text todo.txt
sftp> put myScript.pl userScript.pl
Uploading myScript.pl to /home/john/userScript.pl
myScript.pl 100% 85 137.0KB/s 00:00
sftp> put dir/file
Uploading dir/file to /home/john/file
file 100% 55 89.4KB/s 00:00
sftp> lcd dir
sftp> lpwd
Local working directory: /home/user/dir
sftp> get todo.txt new_todo.txt
Fetching /home/john/todo.txt to new_todo.txt
todo.txt 100% 50 77.3KB/s 00:00
sftp> get photos
Fetching /home/john/photos/ to photos
download /home/john/photos/: not a regular file
sftp> get -r photos
Fetching /home/john/photos/ to photos
Retrieving /home/john/photos
ghoti.jpg 100% 236KB 45.1MB/s 00:00
cat.jpg 100% 100KB 43.4MB/s 00:00
sftp> cd /tmp
sftp> pwd
Remote working directory: /tmp
sftp> ls
sftp> put -r dir/*
Uploading dir/file to /tmp/file
file 100% 55 72.3KB/s 00:00
Uploading dir/new_todo.txt to /tmp/new_todo.txt
new_todo.txt 100% 50 219.8KB/s 00:00
Uploading dir/now to /tmp/now
now 100% 30 160.8KB/s 00:00
Uploading dir/photos/ to /tmp/photos
Entering dir/photos/
cat.jpg 100% 100KB 27.8MB/s 00:00
ghoti.jpg 100% 236KB 39.2MB/s 00:00
sftp> ls -l
-rw-r----- ? john john 55 Apr 6 02:00 file
-rw-r--r-- ? john john 50 Apr 6 02:00 new_todo.txt
-rw-r--r-- ? john john 30 Apr 6 02:00 now
drwxr-xr-x ? john john 4096 Apr 6 02:00 photos
sftp> lls -l
total 16
-rw-rw---- 1 user wheel 55 Apr 6 01:00 file
-rw-r--r-- 1 user users 50 Apr 6 02:00 new_todo.txt
-rw-r--r-- 1 user users 30 Apr 6 01:00 now
drwxr-xr-x 2 user users 4096 Apr 6 02:00 photos
sftp> quit
user@host ~ $
rm
user@host ~ $ ls -lt
total 44
drwxr-xr-x 3 user users 4096 Apr 7 19:34 misc
drwxr-xr-x 2 user users 4096 Apr 6 02:00 photos
-rw-r--r-- 1 user users 30 Apr 6 02:00 normalfile.txt
-r--r--r-- 1 user wheel 30 Apr 6 02:00 readonlyfile.txt
-rw-r--r-- 1 user users 165 Apr 6 02:00 input-1.txt
-rw-r--r-- 1 user users 139 Apr 6 02:00 input-2.txt
-rw-r--r-- 1 user users 85 Apr 6 02:00 data1.csv
-rw-r--r-- 1 user users 50 Apr 6 02:00 data2.csv
-rw-r--r-- 1 user users 125 Apr 6 02:00 data3.csv
-rw-r--r-- 1 user users 100 Apr 6 02:00 data4.csv
-rw-r--r-- 1 user users 200 Apr 6 02:00 data5.csv
user@host ~ $ rm normalfile.txt
user@host ~ $ ls -t
misc readonlyfile.txt input-2.txt data2.csv data4.csv
photos input-1.txt data1.csv data3.csv data5.csv
user@host ~ $ rm readonlyfile.txt
rm: remove write-protected regular file 'readonlyfile.txt'?
user@host ~ $ ls -t
misc readonlyfile.txt input-2.txt data2.csv data4.csv
photos input-1.txt data1.csv data3.csv data5.csv
user@host ~ $ rm -f readonlyfile.txt
user@host ~ $ ls -t
misc input-1.txt data1.csv data3.csv data5.csv
photos input-2.txt data2.csv data4.csv
user@host ~ $ rm normalfile.txt
rm: cannot remove 'normalfile.txt': No such file or directory
user@host ~ $ rm -f normalfile.txt
user@host ~ $ rm photos
rm: cannot remove 'photos': Is a directory
user@host ~ $ rm -r photos
user@host ~ $ ls -t
misc input-2.txt data2.csv data4.csv
input-1.txt data1.csv data3.csv data5.csv
user@host ~ $ ls -ld misc/rootsDir misc/rootsDir/data
drwxr-xr-x 2 root root 4096 Apr 7 19:33 misc/rootsDir
-rw-r--r-- 1 user users 50 Apr 6 02:00 misc/rootsDir/data
user@host ~ $ rm misc/rootsDir/data
rm: cannot remove 'misc/rootsDir/data': Permission denied
user@host ~ $ ls misc
file now rootsDir
user@host ~ $ rm -r misc
rm: descend into write-protected directory 'misc/rootsDir'? y
rm: cannot remove 'misc/rootsDir/data': Permission denied
user@host ~ $ ls misc
rootsDir
user@host ~ $ rm input-1.txt input-2.txt
user@host ~ $ rm -i data*.csv
rm: remove regular file 'data1.csv'?
rm: remove regular file 'data2.csv'?
rm: remove regular file 'data3.csv'? ^C
user@host ~ $ ls -t
misc data1.csv data2.csv data3.csv data4.csv data5.csv
user@host ~ $ rm -I data*.csv
rm: remove 5 arguments? y
user@host ~ $ ls -t
misc