Navigasi File dan Direktori
Overview
Teaching: 20 min
Exercises: 20 minQuestions
Bagaimana cara berpindah direktori pada Linux
Bagaimana melihat file dan direktori yang saya miliki?
Bagaimana saya mengetahui lokasi direktori saat ini pada komputer saya?
Objectives
Menjelaskan perbedaan dan persamaan antara file dan direktori.
Mengganti absolute path dengan relative path
Membuat absolute dan relative paths yang mengidentifikasi spesifik file dan direktori.
Menjelaskan siklus kerja shell: read-run-print.
Mengidentifikasi perintah, flags, and filenames dari sebuah perintah command-line
Mendemontrasikan penggunaan tab completion, dan menjelaskan manfaatnya
Bagian dari operating system untuk mengatur file dan direktori disebut file system. File system (fs) mengorganisir data kita dalam files yang mengandung informasi dan direktori yang berisi file atau direktori lainnya.
Beberapa perintah yang sering digunakan untuk membuat, menginspeksi, me-rename dan menghapus file dan direktoris akan dijelaskan sebagai berikut. Tekan Ctrl+Alt+T untuk membuka terminal baru.
Preparation Magic
Jika anda mengetikkan:
PS1='$ '
pada shell kemudian diikutienter
maka jendela terminal anda akan terlihat seperti di contoh berikut. User biasa dilambangkan dengan dolar,$
, sedangkan superuser dilambangkan dengan tanda pagar,#
.
$
Tanda dolar merupakan tanda prompt, yang menunjukkan kepada kita bahwa shell sedang menunggu perihtan dari kita. Beberapa shell ataupun konsole/terminal dari perangkat lunak mungkin menggunakan tanda yang berbeda. Informasi sebelum prompt, by default, menunjukkan posisi direktori kita saat ini.
Ketikkan pada shell whoami
,
kemudian lihatlah apa yang terjadi. Dengan cara belajar seperti ini,
akan akan bisa meraba-raba, kira-kira perintah tersebut untuk apa.
$ whoami
bagustris
Lebih spesifik, begini algoritmanya ketika mengetik whoami
pada shell:
- Temukan program
whoami
, - Jalankan program tersebut,
- Tampilkan output program
- Tampilkan prompt baru bahwa shell siap menerima perintah lagi.
Variasi Username
Pada lesson ini,
whoami
akan menampilkan akun user saya, yakni ‘bagustris’. Pada komputer anda dan komputer lainnya, hasilnya tertentu akan berbeda tergantung user siapa yang sedang login.
Perintah yang tidak diketahui
Bash shell akan menampilkan pesan kesalahan ketika menjumpai perintah yang tidak diketahuinya. Misal, ketikkan
asdf
pada shell anda,$ asdf
No command 'asdf' found, did you mean: Command 'sadf' from package 'sysstat' (main) Command 'sdf' from package 'sdf' (universe) Command 'asdfg' from package 'aoeui' (universe) asdf: command not found
Bash akan menginformasikan bahwa tidak ada perintah yang namanya
asdf
. Bash juga akan merekomendasikan perintah yang mirip, mungkin anda salah ketik. Misal Bash merekomendasihkansadf
dari paketsyststat
. Selebihnya,asdf
tidak ditemukan. Ingat, pesan kesalahan ini sangat penting, Jika anda menemui error, bacalah pesan kesalannya dengan seksama, karena disitulah biasanya letak solusinya.
Selanjutnya,
ketikkan perintah untuk mengetahui direktori anda saat ini, pwd
(singkatan dari “print working directory”).
By default
, ketika anda membuka terminal (Ctrl+Alt+T) posisi direktoriny adalah di
home directory, yakni untuk kasus saya diatas adalah/home/bagustris.
Begitu juga ketika anda mengetikkan perintah cd
tanpa argument/input,
maka defaultnya juga home directory.
$ pwd
/home/bagustris
Variasi Home Directory dan Filesystem Hierarchy Standard (FHS)
Posisi home directory /home/bagustris di Linux ini identik dengan
C:\Documents and Settings\bagustris
orC:\Users\bagustris
pada Windows. Pada Windows versi baru mungkin agak berbeda.
Home directory adalah rumah kita, artinya sistem operasi akan
menyimpan file dokumen, gambar, musik, film dll disitu, by default
.
Jika kita perhatikan urutan path
home direktory maka strukturnya adalah ”/” + “home” + “/” + “username”.
Garis miring pertama merupakan root, kemudian “home” berisi user-user pengguna komputer tsb, kemudian
garis miring pemisah direktori/subdirektori dan nama direktori yakni nama user.
Struktur direktori Linux ini biasanya mengacu pada Filesystem Hierarchy Standard (FHS). Pada komputer saya strukturnya seperti ini:
/
├── bin
├── boot
├── cdrom
├── core
├── dev
├── etc
├── home
├── initrd.img -> boot/initrd.img-4.10.0-28-generic
├── initrd.img.old -> boot/initrd.img-4.10.0-27-generic
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
├── var
├── vmlinuz -> boot/vmlinuz-4.10.0-28-generic
└── vmlinuz.old -> boot/vmlinuz-4.10.0-27-generic
Keterangang singkat untuk masing-masing direktori tersebut seperti di bawah ini [3]
/bin is a place for most commonly used terminal commands, like ls, mount, rm, etc.
/boot contains files needed to start up the system, including the Linux kernel, a RAM disk image and bootloader configuration files.
/dev contains all device files, which are not regular files but instead refer to various hardware devices on the system, including hard drives.
/etc contains system-global configuration files, which affect the system's behavior for all users.
/home home sweet home, this is the place for users' home directories.
/lib contains very important dynamic libraries and kernel modules
/media is intended as a mount point for external devices, such as hard drives or removable media (floppies, CDs, DVDs).
/mnt is also a place for mount points, but dedicated specifically to "temporarily mounted" devices, such as network filesystems.
/opt can be used to store additional software for your system, which is not handled by the package manager.
/proc is a virtual filesystem that provides a mechanism for kernel to send information to processes.
/root is the superuser's home directory, not in /home/ to allow for booting the system even if /home/ is not available.
/run is a tmpfs (temporary file system) available early in the boot process where ephemeral run-time data is stored. Files under this directory are removed or truncated at the beginning of the boot process.
(It deprecates various legacy locations such as /var/run, /var/lock, /lib/init/rw in otherwise non-ephemeral directory trees as well as /dev/.* and /dev/shm which are not device files.)
/sbin contains important administrative commands that should generally only be employed by the superuser.
/srv can contain data directories of services such as HTTP (/srv/www/) or FTP.
/sys is a virtual filesystem that can be accessed to set or obtain information about the kernel's view of the system.
/tmp is a place for temporary files used by applications.
/usr contains the majority of user utilities and applications, and partly replicates the root directory structure, containing for instance, among others, /usr/bin/ and /usr/lib.
/var is dedicated to variable data, such as logs, databases, websites, and temporary spool (e-mail etc.) files that persist from one boot to the next. A notable directory it contains is /var/log where system log files are kept.
Untuk direktori home
, jika kita kembangkan maka isi /home
misalnya adalah seperti gambar berikut
Penjelasan dari beberapa sub-direktori dari root /:
bin
(which is where some built-in programs are stored),
data
(for miscellaneous data files),
Users
(where users’ personal directories are located),
tmp
(for temporary files that don’t need to be stored long-term),
and so on.
Tanda Slashes
Telah disinggung sebelumnya, tanda slash / memiliki dua arti pertama adalah root, kedua adalah separator direktori dan subdirektori
Jika ada beberapa user dalam satu PC, maka folder user akan
disimpan dalam /home
, namun user satu tidak bisa melihat
isi user lainnya kecuali dia masuk sebagai root.
Perintah selanjutnya adalah ls
yang merupakan singkatan dari list.
$ ls
Documents Library Music Public
Desktop Downloads Movies Pictures
ls
merupakan perintah untuk melihat isi direktori yang sangat powerful
untuk membedakan direktori dan file kita bisa menambakan flag -F
,
yang menyuruh ls
untuk menambahkan /
pada nama direktori:
$ ls -F
Documents/ Library/ Music/ Public/
Desktop/ Downloads/ Movies/ Pictures/
Cobalah beberapa perintah berikut:
$ ls /usr/bin
# melist secara detail
$ ls -l
# menampilkan dalam format "human readable" ukuran file
$ ls -lh
# menampilkan dalam urutan waktu secara detail
$ ls -lt
# menampilkan dalam urutan waktu secara detail list terbalik (reverse)
$ ls -ltr
# wc word count/untuk menghitung kata, wc -l untuk menghitung jumlah baris, | pipe
# wc akan dijelaskan kemudian
$ ls /usr/bin | wc -l
# menampilkan argumen apa saja yang dimiliki ls
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information);
with -l: show ctime and sort by name;
otherwise: sort by ctime, newest first
-C list entries by columns
--color[=WHEN] colorize the output; WHEN can be 'always' (default
if omitted), 'auto', or 'never'; more info below
-d, --directory list directories themselves, not their contents
-D, --dired generate output designed for Emacs' dired mode
-f do not sort, enable -aU, disable -ls --color
-F, --classify append indicator (one of */=>@|) to entries
--file-type likewise, except do not append '*'
--format=WORD across -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
--full-time like -l --time-style=full-iso
-g like -l, but do not list owner
--group-directories-first
group directories before files;
can be augmented with a --sort option, but any
use of --sort=none (-U) disables grouping
-G, --no-group in a long listing, don't print group names
-h, --human-readable with -l and/or -s, print human readable sizes
(e.g., 1K 234M 2G)
--si likewise, but use powers of 1000 not 1024
-H, --dereference-command-line
follow symbolic links listed on the command line
--dereference-command-line-symlink-to-dir
follow each command line symbolic link
that points to a directory
--hide=PATTERN do not list implied entries matching shell PATTERN
(overridden by -a or -A)
--indicator-style=WORD append indicator with style WORD to entry names:
none (default), slash (-p),
file-type (--file-type), classify (-F)
-i, --inode print the index number of each file
-I, --ignore=PATTERN do not list implied entries matching shell PATTERN
-k, --kibibytes default to 1024-byte blocks for disk usage
-l use a long listing format
-L, --dereference when showing file information for a symbolic
link, show information for the file the link
references rather than for the link itself
-m fill width with a comma separated list of entries
-n, --numeric-uid-gid like -l, but list numeric user and group IDs
-N, --literal print raw entry names (don't treat e.g. control
characters specially)
-o like -l, but do not list group information
-p, --indicator-style=slash
append / indicator to directories
-q, --hide-control-chars print ? instead of nongraphic characters
--show-control-chars show nongraphic characters as-is (the default,
unless program is 'ls' and output is a terminal)
-Q, --quote-name enclose entry names in double quotes
--quoting-style=WORD use quoting style WORD for entry names:
literal, locale, shell, shell-always,
shell-escape, shell-escape-always, c, escape
-r, --reverse reverse order while sorting
-R, --recursive list subdirectories recursively
-s, --size print the allocated size of each file, in blocks
-S sort by file size, largest first
--sort=WORD sort by WORD instead of name: none (-U), size (-S),
time (-t), version (-v), extension (-X)
--time=WORD with -l, show time as WORD instead of default
modification time: atime or access or use (-u);
ctime or status (-c); also use specified time
as sort key if --sort=time (newest first)
--time-style=STYLE with -l, show times using style STYLE:
full-iso, long-iso, iso, locale, or +FORMAT;
FORMAT is interpreted like in 'date'; if FORMAT
is FORMAT1<newline>FORMAT2, then FORMAT1 applies
to non-recent files and FORMAT2 to recent files;
if STYLE is prefixed with 'posix-', STYLE
takes effect only outside the POSIX locale
-t sort by modification time, newest first
-T, --tabsize=COLS assume tab stops at each COLS instead of 8
-u with -lt: sort by, and show, access time;
with -l: show access time and sort by name;
otherwise: sort by access time, newest first
-U do not sort; list entries in directory order
-v natural sort of (version) numbers within text
-w, --width=COLS set output width to COLS. 0 means no limit
-x list entries by lines instead of by columns
-X sort alphabetically by entry extension
-Z, --context print any security context of each file
-1 list one file per line. Avoid '\n' with -q or -b
--help display this help and exit
--version output version information and exit
The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).
Using color to distinguish file types is disabled both by default and
with --color=never. With --color=auto, ls emits color codes only when
standard output is connected to a terminal. The LS_COLORS environment
variable can change the settings. Use the dircolors command to set it.
Exit status:
0 if OK,
1 if minor problems (e.g., cannot access subdirectory),
2 if serious trouble (e.g., cannot access command-line argument).
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/ls>
or available locally via: info '(coreutils) ls invocation'
Hampir semua perintah Linux shell disertai help dan manual pagenya.
Unsupported comand-line options
Jika kita mencoba memberikan argumen yang tidak difahami oleh perintah yang bersangkutan, makan akan muncul pesan kesalahan. Misal,
$ ls -j
ls: invalid option -- 'j' Try 'ls --help' for more information.
man
dan –helpManual merupakan sumberdaya penting untuk memahami perintah shell. Bacalah manual! (RFTF = read the f*ck manual)
Selain manual kita bisa menggunakan
--help
untuk menampilkan argumen dari suatu perintah Contoh:ls --help
akan menampilkan penggunaan dan argumen yang bisa digunakan pada perintahls
ls
juga bisa digunakan untuk melihat isi direktori. Jika tanpa
argumen direktori, maka ls
akan menampikan direktori saat ini.
$ ls -F Desktop
data-shell/
ls
juga bisa digunakan untuk melihat subdirektori, berikut contohnya.
$ ls -F Desktop/data-shell
creatures/ molecules/ notes.txt solar.pdf
data/ north-pacific-gyre/ pizza.cfg writing/
Saatnya berpindah-pindah direktori. Praktekkan perintah-perintah berikut.
$ cd Desktop
$ cd data-shell
$ cd data
Untuk mengetahui posisi kita saat ini, ketikkan kembali,
$ pwd
/home/bagustris/data-shell/data
$ ls -F
amino-acids.txt elements/ pdb/ salmon.txt
animals.txt morse.txt planets.txt sunspot.txt
Berpindah ke data-shell
$ cd data-shell
-bash: cd: data-shell: No such file or directory
Akan muncul error, karena kita sedang berada pada direktori yang berbeda.
Jadi baik ls
, pwd
dan cd
akan saling melengkapi.
$ cd ..
Tanda ..
merupakan parent directory, yakni direktori atasnya.
Sedang tanda .
sebagai argumen bisa berarti current directory,
tanda .
ini bisa berarti source
jika sebagai perintah.
$ pwd
/home/bagustris/Desktop/data-shell
Argumen juga bisa digabung, misalnya:
$ ls -F -a
# sama dengan
$ ls -Fa
./ creatures/ notes.txt
../ data/ pizza.cfg
.bash_profile molecules/ solar.pdf
Desktop/ north-pacific-gyre/ writing/
Hidden Files
Hidden file dalam Unix/Linux ditandai dengan titik satu didepan nama file, misal
.bagus
. Maka baik file atau direktori.bagus
tsb akan di-hidden.
Orthogonality
argumen
.
dan..
tidak hanya milikcd
tetapi bisa digunakan perintah-perintah yang lain, ini artinya argumen tersebut orthogonal.
Baik cd
, pwd
dan ls
saling melengkapi. Berikut buktinya:
$ cd
dimana posisi kita saat ini? pwd
memberi jawabnya.
$ pwd
/home/bagustris
Absolute Vs Relative Path
Sekarang, mari berpindah ke direktori data didalam data-shell,
$ cd Desktop/data-shell/data
Bisakah anda pindah ke /home langsung setelah dari direktori itu? Bisa.
Jika anda menggunakan tanda .
dan ..
sebagai argumen, maka itu dinamakan
relative path
$ pwd
/home/bagustris/Desktop/data-shell/data
cd ../../
Jika anda menggunakan path aslinya seperti ini, maka itu dinamakan absolute path atau absolute directory.
$ cd /home/bagustris/Desktop/data-shell
Dua argumen
cd
lainnya.
cd ~
(dibaca cd tilde) akan membawa anda ke /home directory, sedangkancd -
(dibaca cd dash) akan membawa anda ke direktori terakhir sebelumnya.
Mengorganisasi file
Mengorganisasi file sangat penting, beberapa hal yang bisa dilakukan adalah sbb:
- nama file sesuai isinya
- nama diawali huruf
- tidak ada spasi
- jika diawali angka maka berformat tahun-angkaBulan-tanggal
Sorting Output
Nelle names her directories “year-month-day”, with leading zeroes for months and days, because the shell displays file and directory names in alphabetical order. If she used month names, December would come before July; if she didn’t use leading zeroes, November (‘11’) would come before July (‘7’). Similarly, putting the year first means that June 2012 will come before June 2013.
Tab completion
Contoh user Nell menulis tiap sampel praktikumnya dengan label menurut konvensi yang ditentukan Lab yakni 10 karakter unik sebagai IDnya, misal “NENE01729A”. ID tersebutlah yang digunakan untuk mengumpulkan log untuk menyimpan lokasi, waktu, dept, dan karakteristik sampel, jadi dia memutuskan untuk menggunakan informasi itu sebagai nama file.
Karena output dari file tersebut adalah plain text,
maka die menamai file-nya degan nama NENE01729A.txt
, NENE01812A.txt
, dan seterusnya.
Semua filenya 1520 disimpan dalam direktori yang sama.
Sekarang dia berada pada direktori data-shell
,
Nelle dapat mengecek file di dalam direktori tersebut dengan perintah:
$ ls north-pacific-gyre/2012-07-03/
Hmmm, ada peluang untuk salah ketik ketika mengetik direktori dan sub-direktori tsb. Untuk menyederhanakannya, kita menggunakan apa yang disebut tab completion.
Jadi dia mengetikkan:
$ ls nor
dan kemudian tekan tombol tab pada keyboard, whaoala, it’s magic! secara otomatis shell akan melengkapi nama direktori yang sama dengan tiga karakter yang diketik (nor).
$ ls north-pacific-gyre/
Jika Nelle menekan tab lagi, maka Bash Shell akan menambahkan 2012-07-03/
pada perintahnya,
karena hanya ada satu sub direktori yang mungkin maka folder tsblah yang akan muncul.
Menekan tab lagi akan menampilkan 19 kemungkinan file yanga ada dalam subdirektori 2012-07-03/
.
Menekan tab lagi tidak menunjukkan apa-apa karena sudah
tidak ada lagi sub direktori di bawahnya.
Inilah yang disebut tab completion, shortcut yang sangat memudahkan hidup pengguna Linux/Unix.
LATIHAN
Absolute vs Relative Paths
Starting from
/Users/amanda/data/
, which of the following commands could Amanda use to navigate to her home directory, which is/Users/amanda
?
cd .
cd /
cd /home/amanda
cd ../..
cd ~
cd home
cd ~/data/..
cd
cd ..
Solution
- No:
.
stands for the current directory.- No:
/
stands for the root directory.- No: Amanda’s home directory is
/Users/amanda
.- No: this goes up two levels, i.e. ends in
/Users
.- Yes:
~
stands for the user’s home directory, in this case/Users/amanda
.- No: this would navigate into a directory
home
in the current directory if it exists.- Yes: unnecessarily complicated, but correct.
- Yes: shortcut to go back to the user’s home directory.
- Yes: goes up one level.
Relative Path Resolution
Using the filesystem diagram below, if
pwd
displays/Users/thing
, what willls ../backup
display?
../backup: No such file or directory
2012-12-01 2013-01-08 2013-01-27
2012-12-01/ 2013-01-08/ 2013-01-27/
original pnas_final pnas_sub
Solution
- No: there is a directory
backup
in/Users
.- No: this is the content of
Users/thing/backup
, but with..
we asked for one level further up.- No: see previous explanation. Also, we did not specify
-F
to display/
at the end of the directory names.- Yes:
../backup
refers to/Users/backup
.
ls
Reading ComprehensionAssuming a directory structure as in the above Figure (File System for Challenge Questions), if
pwd
displays/Users/backup
, and-r
tellsls
to display things in reverse order, what command will display:pnas_sub/ pnas_final/ original/
ls pwd
ls -r -F
ls -r -F /Users/backup
- Either #2 or #3 above, but not #1.
Solution
- No:
pwd
is not the name of a directory.- Yes:
ls
without directory argument lists files and directories in the current directory.- Yes: uses the absolute path explicitly.
- Correct: see explanations above.
Exploring More
ls
ArgumentsWhat does the command
ls
do when used with the-l
and-h
arguments?Some of its output is about properties that we do not cover in this lesson (such as file permissions and ownership), but the rest should be useful nevertheless.
Solution
The
-l
arguments makesls
use a long listing format, showing not only the file/directory names but also additional information such as the file size and the time of its last modification. The-h
argument makes the file size “human readable”, i.e. display something like5.3K
instead of5369
.
Listing Recursively and By Time
The command
ls -R
lists the contents of directories recursively, i.e., lists their sub-directories, sub-sub-directories, and so on in alphabetical order at each level. The commandls -t
lists things by time of last change, with most recently changed files or directories first. In what order doesls -R -t
display things? Hint:ls -l
uses a long listing format to view timestamps.Solution
The directories are listed alphabetical at each level, the files/directories in each directory are sorted by time of last change.
Referensi:
[1] 20 Perintah dasar Linux
[2] Surrey Univ. Unix teaching material
[3] Linux Filesystem Tree Overview
Key Points
File system bertanggun jawab dalam mengatur informasi pada disk komputer.
Informasi disimpan dalam file, yang mana disimpan dalam direktori.
Direktori dapat disimpan dalam direktori lain yang membentuk directory tree.
cd path
changes the current working directory.
ls path
prints a listing of a specific file or directory;ls
on its own lists the current working directory.
pwd
prints the user’s current working directory.
whoami
shows the user’s current identity.
/
on its own is the root directory of the whole file system.Sebuah relative path menunjukkan lokasi dari current location.
Sebuah absolute menunjukkan lokasi dari root of the file system.
Nama direktori dipisahkan dengan ‘/’ pada Linux/Unix, tetapi pada Windows pada ‘\’.
’..’ menunjukkan direktori diatasnya’; sedangkan ‘.’ menunjukkan ‘the current directory’.
Kebanyakan file diberi nama
namafile.ekstensi
. Ekstensi tidak harus ada, tapi biasanya digunakan untuk menunjukkan tipe file.Kebanyakan perintah menggunakan opsi (flags) yang diawali dengan ‘-‘.