Bab 9. Tips sistem

# Bab 9. Tips sistem

Di sini, saya menjelaskan tips dasar untuk mengonfigurasi dan mengelola sistem, sebagian besar dari konsol.

## 9.1. Tips konsol

Ada beberapa program utilitas untuk membantu aktivitas konsol Anda.

Tabel 9.1. Daftar program untuk mendukung aktivitas konsol

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`mc` | V:41, I:182 | 1590 | Lihat Bagian 1.3, “Midnight Commander (MC)”
`bsdutils` | V:443, I:999 | 334 | perintah script(1) untuk membuat rekaman sesi terminal
`screen` | V:52, I:200 | 991 | pemultipleks terminal dengan emulasi terminal VT100/ANSI
`tmux` | V:94, I:162 | 1291 | pemultipleks terminal alternatif (Gunakan "Control-B" sebagai gantinya)
`ripgrep` | V:14, I:42 | 5294 | pencarian string rekursif yang cepat dalam pohon kode sumber dengan penyaringan otomatis
`fzf` | V:8, I:35 | 4983 | pencari teks fuzzy
`fzy` | V:0.08, I:0.36 | 59 | pencari teks fuzzy
`rlwrap` | V:1, I:12 | 328 | pembungkus baris perintah fitur readline
`ledit` | V:0.5, I:7.7 | 375 | pembungkus baris perintah fitur readline
`rlfe` | V:0.04, I:0.49 | 45 | pembungkus baris perintah fitur readline

### 9.1.1. Merekam aktivitas shell secara bersih

Penggunaan sederhana script(1) (lihat Bagian 1.4.9, “Merekam aktivitas shell”) untuk merekam aktivitas shell menghasilkan berkas dengan karakter kontrol. Hal ini dapat dihindari dengan menggunakan col(1) sebagai berikut.

    $ script
    Script started, file is typescript

Lakukan apapun … dan tekan `Ctrl-D` untuk keluar `dari skrip`.

    $ col -bx < typescript > cleanedfile
    $ vim cleanedfile

Ada metode alternatif untuk merekam aktivitas shell:

- Menggunakan `tee` (dapat digunakan selama proses boot di initramfs):

      $ sh -i 2>&1 | tee typescript

- Menggunakan `gnome-terminal` dengan penyangga baris yang dinaikkan untuk gulir balik.

- Menggunakan `screen` dengan "`^A H`" (lihat Bagian 9.1.2, “Program screen”) untuk melakukan perekaman konsol.

- Menggunakan `vim` dengan "`:terminal`" untuk memasuki mode terminal. Gunakan "`Ctrl-W N`" untuk keluar dari mode terminal ke mode normal. Gunakan "`:w typescript`" untuk menulis penyangga ke berkas.

- Menggunakan `emacs` dengan "`M-x shell`", "`M-x eshell`", atau "`M-x term`" untuk memasuki konsol rekaman. Gunakan "`C-x C-w`" untuk menulis penyangga ke berkas.

### 9.1.2. Program screen

screen(1) tidak hanya memungkinkan satu jendela terminal bekerja dengan beberapa proses, tetapi juga memungkinkan proses shell jarak jauh untuk bertahan dari koneksi yang terputus. Berikut adalah skenario penggunaan screen(1) yang biasa.

1. Anda masuk ke mesin remote.

2. Anda memulai `screen` pada satu konsol.

3. Anda menjalankan beberapa program di jendela `screen` yang dibuat dengan `^A c` ("Control-A" diikuti oleh "c").

4. Anda beralih di antara beberapa jendela `screen` dengan `^A n` ("Control-A" diikuti oleh "n").

5. Tiba-tiba Anda harus meninggalkan terminal Anda, tetapi Anda tidak ingin kehilangan pekerjaan aktif Anda dengan mempertahankan koneksi.

6. Anda dapat melepaskan sesi `layar` dengan metode apa pun.

   - Secara brutal mencabut koneksi jaringan Anda

   - Mengetik `^A d` ("Control-A" diikuti oleh "d") dan keluar secara manual dari sambungan jarak jauh

   - Ketik `^A DD` ("Control-A" diikuti oleh "DD") agar `layar` terlepas dan log Anda keluar

7. Anda masuk lagi ke mesin remote yang sama (bahkan dari terminal yang berbeda).

8. Anda memulai `screen` sebagai "`screen -r`".

9. `screen` secara ajaib memasang kembali semua jendela `screen` sebelumnya dengan semua program aktif berjalan.

| Tip
Anda dapat menghemat biaya koneksi dengan `screen` untuk koneksi jaringan terukur seperti dial-up dan paket, karena Anda dapat membiarkan proses aktif saat terputus, lalu mencantolkan kembali nanti ketika Anda terhubung lagi.

Dalam sesi `screen`, semua masukan papan ketik dikirim ke jendela Anda saat ini kecuali untuk penekanan tombol perintah. Semua penekanan tombol perintah `screen` dimasukkan dengan mengetik `^A` ("Control-A") ditambah satu tombol [ditambah parameter apa pun]. Berikut adalah hal-hal penting untuk diingat.

Tabel 9.2. Daftar pengikatan tombol untuk screen

pengikatan tombol | arti
--- | ---
`^A ?` | memperlihatkan layar bantuan (menampilkan pengikatan tombol)
`^A c` | membuat jendela baru dan beralih ke jendela itu
`^A n` | pergi ke jendela berikutnya
`^A p` | pergi ke jendela sebelumnya
`^A 0` | masuk ke jendela nomor 0
`^A 1` | masuk ke jendela nomor 1
`^A w` | memperlihatkan daftar jendela
`^A a` | mengirim Ctrl-A ke jendela saat ini sebagai masukan papan ketik
`^A h` | menulis hardcopy jendela saat ini ke berkas
`^A H` | memulai/mengakhiri mencatat jendela saat ini ke berkas
`^A ^X` | mengunci terminal (dilindungi kata sandi)
`^A d` | melepas sesi screen dari terminal
`^A DD` | melepas sesi screen dan log keluar

Lihat screen(1) untuk detailnya.

Lihat tmux(1)untuk fungsionalitas dari perintah alternatif.

### 9.1.3. Menavigasi di sekitar direktori

Pada Bagian 1.4.2, “Menyesuaikan bash”, 2 tips untuk memungkinkan navigasi cepat di sekitar direktori dijelaskan: `$CDPATH` dan `mc`.

Jika Anda menggunakan program filter teks fuzzy, Anda dapat melakukannya tanpa mengetik path yang tepat. Untuk `fzf`, sertakan yang berikut dalam `~/.bashrc`.

    FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
    if [ -f $FZF_KEYBINDINGS_PATH ]; then
      . $FZF_KEYBINDINGS_PATH
    fi

Sebagai contoh:

- Anda dapat melompat ke subdirektori yang sangat dalam dengan upaya minimal. Anda pertama mengetik "`cd **`" dan menekan `Tab`. Kemudian Anda akan diberi tampilan path kandidat. Mengetikkan string path parsial, misalnya, `s/d/b foo`, akan mempersempit path kandidat. Anda memilih path yang akan digunakan oleh `cd` dengan kursor dan tombol return.

- Anda dapat memilih perintah dari riwayat perintah dengan lebih efisien dengan upaya minimal. Anda menekan `Ctrl-R` di sapaan perintah. Kemudian Anda akan dimintai perintah kandidat. Mengetikkan string perintah parsial, misalnya, `vim d`, akan mempersempit kandidat. Anda memilih yang akan digunakan dengan kursor dan tombol return.

### 9.1.4. Pembungkus readline

Beberapa perintah seperti `/usr/bin/dash` yang tidak memiliki kemampuan penyuntingan riwayat baris perintah dapat menambahkan fungsionalitas tersebut secara transparan dengan berjalan di bawah `rlwrap` atau yang setara.

     $ rlwrap dash -i

Ini menyediakan platform yang nyaman untuk menguji titik-titik halus untuk `dash` dengan lingkungan mirip `bash` yang ramah.

### 9.1.5. Memindai pohon kode sumber

Perintah rg(1) dalam paket `ripgrep` menawarkan alternatif yang lebih cepat dari perintah grep(1) untuk memindai pohon kode sumber bagi situasi tipikal. Ini mengambil keuntungan dari CPU multi-core modern dan secara otomatis menerapkan filter yang masuk akal untuk melewati beberapa berkas.

## 9.2. Menyesuaikan vim

Setelah Anda mempelajari dasar-dasar vim(1) melalui Bagian 1.4.8, “Menggunakan vim”, silakan baca "Seven habits of effective text editing (2000)" dari Bram Moolenaar untuk memahami bagaimana `vim` harus digunakan.

### 9.2.1. Menyesuaikan vim dengan fitur internal

Perilaku `vim` dapat diubah secara signifikan dengan mengaktifkan fitur internalnya melalui perintah mode `Ex` seperti "`set ...`" untuk mengatur opsi vim.

Perintah mode `Ex` ini dapat dimasukkan dalam berkas vimrc pengguna, "`~/.vimrc`" tradisional, atau"`~/.vim/vimrc`" yang ramah git. Berikut adalah contoh yang sangat sederhana [2]:

    """ Generic baseline Vim and Neovim configuration (~/.vimrc)
    """   - For NeoVim, use "nvim -u ~/.vimrc [filename]"
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    let mapleader = ' '             " :h mapleader
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    set nocompatible                " :h 'cp -- sensible (n)vim mode
    syntax on                       " :h :syn-on
    filetype plugin indent on       " :h :filetype-overview
    set encoding=utf-8              " :h 'enc (default: latin1) -- sensible encoding
    """ current vim option value can be verified by :set encoding?
    set backspace=indent,eol,start  " :h 'bs (default: nobs) -- sensible BS
    set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
    set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣
    set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
    """ Pick "colorscheme" from blue darkblue default delek desert elflord evening
    """ habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
    """ shine slate torte zellner
    colorscheme industry
    """ don't pick "colorscheme" as "default" which may kill SpellUnderline settings
    set scrolloff=5                 " :h 'scr -- show 5 lines around cursor
    set laststatus=2                " :h 'ls (default 1)  k
    """ boolean options can be unset by prefixing "no"
    set ignorecase                  " :h 'ic
    set smartcase                   " :h 'scs
    set autoindent                  " :h 'ai
    set smartindent                 " :h 'si
    set nowrap                      " :h 'wrap
    "set list                        " :h 'list (default nolist)
    set noerrorbells                " :h 'eb
    set novisualbell                " :h 'vb
    set t_vb=                       " :h 't_vb -- termcap visual bell
    set spell                       " :h 'spell
    set spelllang=en_us,cjk         " :h 'spl -- english spell, ignore CJK
    set clipboard=unnamedplus       " :h 'cb -- cut/copy/paste with other app
    set hidden                      " :h 'hid
    set autowrite                   " :h 'aw
    set timeoutlen=300              " :h 'tm

Keymap dari `vim` dapat diubah dalam berkas vimrc pengguna. Misalnya:

| Perhatian
Jangan mencoba mengubah pengikatan tombol baku tanpa alasan yang sangat bagus.

    """ Popular mappings (imitating LazyVim etc.)
    """ Window moves without using CTRL-W which is dangerous in INSERT mode
    nnoremap <C-H> <C-W>h
    nnoremap <C-J> <C-W>j
    nnoremap <C-K> <C-W>k
    silent! nnoremap <C-L> <C-W>l
    """ Window resize
    nnoremap <C-LEFT> <CMD>vertical resize -2<CR>
    nnoremap <C-DOWN> <CMD>resize -2<CR>
    nnoremap <C-UP> <CMD>resize +2<CR>
    nnoremap <C-RIGHT> <CMD>vertical resize +2<CR>
    """ Clear hlsearch with <ESC> (<C-L> is mapped as above)
    nnoremap <ESC> <CMD>noh<CR><ESC>
    inoremap <ESC> <CMD>noh<CR><ESC>
    """ center after jump next
    nnoremap n nzz
    nnoremap N Nzz
    """ fast "jk" to get out of INSERT mode (<ESC>)
    inoremap  jk <CMD>noh<CR><ESC>
    """ fast "<ESC><ESC>" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap <ESC><ESC> <C-\><C-N>
    """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap jk <C-\><C-N>
    """ previous/next trouble/quickfix item
    nnoremap [q <CMD>cprevious<CR>
    nnoremap ]q <CMD>cnext<CR>
    """ buffers
    nnoremap <S-H> <CMD>bprevious<CR>
    nnoremap <S-L> <CMD>bnext<CR>
    nnoremap [b <CMD>bprevious<CR>
    nnoremap ]b <CMD>bnext<CR>
    """ Add undo break-points
    inoremap  , ,<C-G>u
    inoremap  . .<C-G>u
    inoremap  ; ;<C-G>u
    """ save file
    inoremap <C-S> <CMD>w<CR><ESC>
    xnoremap <C-S> <CMD>w<CR><ESC>
    nnoremap <C-S> <CMD>w<CR><ESC>
    snoremap <C-S> <CMD>w<CR><ESC>
    """ better indenting
    vnoremap < <gv
    vnoremap > >gv
    """ terminal (Somehow under Linux, <C-/> becomes <C-_> in Vim)
    nnoremap <C-_> <CMD>terminal<CR>
    "nnoremap <C-/> <CMD>terminal<CR>
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    if ! has('nvim')
    """ Toggle paste mode with <SPACE>p for Vim (no need for Nvim)
    set pastetoggle=<leader>p
    """ nvim default mappings for Vim.  See :h default-mappings in nvim
    """ copy to EOL (no delete) like D for d
    noremap Y y$
    """ sets a new undo point before deleting
    inoremap <C-U> <C-G>u<C-U>
    inoremap <C-W> <C-G>u<C-W>
    """ <C-L> is re-purposed as above
    """ execute the previous macro recorded with Q
    nnoremap Q @@
    """ repeat last substitute and *KEEP* flags
    nnoremap & :&&<CR>
    """ search visual selected string for visual mode
    xnoremap * y/\V<C-R>"<CR>
    xnoremap # y?\V<C-R>"<CR>
    endif

Agar pengikatan tombol di atas berfungsi dengan baik, program terminal perlu dikonfigurasi untuk menghasilkan "ASCII DEL" bagi tombol `Backspace` dan "Escape sequence" untuk tombol `Delete`.

Konfigurasi lain-lain dapat diubah dalam berkas vimrc pengguna. Mis.:

    """ Use faster 'rg' (ripgrep package) for :grep
    if executable("rg")
      set grepprg=rg\ --vimgrep\ --smart-case
      set grepformat=%f:%l:%c:%m
    endif
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Retain last cursor position :h '"
    augroup RetainLastCursorPosition
      autocmd!
      autocmd BufReadPost *
        \ if line("'\"") > 0 && line ("'\"") <= line("$") |
        \   exe "normal! g'\"" |
        \ endif
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Force to use underline for spell check results
    augroup SpellUnderline
      autocmd!
      autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ highlight tailing spaces except when typing as red (set after colorscheme)
    highlight TailingWhitespaces ctermbg=red guibg=red
    """ \s\+     1 or more whitespace character: <Space> and <Tab>
    """ \%#\@<!  Matches with zero width if the cursor position does NOT match.
    match TailingWhitespaces /\s\+\%#\@<!$/

### 9.2.2. Menyesuaikan vim dengan paket eksternal

Paket pengaya eksternal yang menarik dapat ditemukan:

- Vim - editor teks di mana-mana -- Situs hulu resmi Vim dan skrip vim

- VimAwsome -- Daftar pengaya Vim

- vim-scripts -- Paket Debian: kumpulan skrip vim

Paket pengaya dalam paket vim-scripts dapat difungsikan memakai berkas vimrc pengguna. Mis.:

    packadd! secure-modelines
    packadd! winmanager
    " IDE-like UI for files and buffers with <space>w
    nnoremap <leader>w         :WMToggle<CR>

Sistem paket Vim asli yang baru, bekerja dengan baik dengan "`git`" dan "`git submodule`". Salah satu contoh konfigurasi tersebut dapat ditemukan di repositori git saya: dot-vim. Ini pada dasarnya:

- Dengan menggunakan "`git`" dan "`git submodule`", paket eksternal terbaru, seperti "`nama`", ditempatkan ke dalam `~/.vim/pack/*/opt/nama` dan sejenisnya.

- Dengan menambahkan baris `:packadd! nama` ke berkas vimrc pengguna, paket-paket ini ditempatkan pada `runtimepath`.

- Vim memuat paket-paket ini pada `runtimepath` selama inisialisasinya.

- Pada akhir inisialisasinya, tag untuk dokumen yang dipasang diperbarui dengan "`helptags ALL`".

Untuk lebih lanjut, silakan mulai `vim` dengan "`vim --startuptime vimstart.log`" untuk memeriksa urutan eksekusi aktual dan waktu yang dihabiskan untuk setiap langkah.

Cukup membingungkan untuk melihat terlalu banyak cara[3] untuk mengelola dan memuat paket-paket eksternal ini bagi `vim`. Memeriksa informasi asli adalah obat terbaik.

Tabel 9.3. Informasi tentang inisialisasi `vim`

ketikan tombol | informasi
--- | ---
`:help package` | penjelasan tentang mekanisme paket vim
`:help runtimepath` | penjelasan tentang mekanisme `runtimepath`
`:version` | keadaan internal termasuk kandidat untuk berkas vimrc
`:echo $VIM` | variabel lingkungan "`$VIM`" yang digunakan untuk menemukan berkas vimrc
`:set runtimepath?` | daftar direktori yang akan dicari untuk semua berkas dukungan runtime
`:echo $VIMRUNTIME` | variabel lingkungan "`$VIMRUNTIME`" digunakan untuk menemukan berbagai berkas dukungan runtime yang disediakan oleh sistem

## 9.3. Perekaman dan presentasi data

### 9.3.1. Daemon log

Banyak program tradisional merekam aktivitas mereka dalam format berkas teks di bawah direktori "`/var/log/`".

logrotate(8) digunakan untuk menyederhanakan administrasi berkas log pada sistem yang menghasilkan banyak berkas log.

Banyak program baru merekam aktivitasnya dalam format berkas biner menggunakan layanan Jurnal systemd-journald(8) di bawah direktori "`/var/log/journal`".

Anda dapat mencatat data ke Jurnal systemd-journald(8) dari skrip shell dengan menggunakan perintah systemd-cat(1).

Lihat Bagian 3.5, “Pesan sistem” dan Bagian 3.4, “Pesan kernel”.

### 9.3.2. Penganalisis log

Berikut adalah penganalisis log terkenal ("`~Gsecurity::log-analyzer`" dalam aptitude(8)).

Tabel 9.4. Daftar penganalisis log sistem

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`fail2ban` | V:101, I:111 | 2192 | memblokir IP-IP yang menyebabkan beberapa kesalahan otentikasi
`logwatch` | V:9, I:11 | 2436 | penganalisis log dengan keluaran bagus yang ditulis dalam Perl
`awstats` | V:5.5, I:8.5 | 6934 | penganalisis log server web yang kuat dan penuh fitur
`analog` | V:3, I:85 | 3739 | penganalisis log server web
`sarg` | V:0.74, I:0.81 | 863 | generator laporan analisis squid
`pflogsumm` | V:1.5, I:3.8 | 173 | Perangkum entri log Postfix
`fwlogwatch` | V:0.11, I:0.17 | 487 | penganalisis log firewall
`squidview` | V:0.03, I:0.46 | 224 | memantau dan menganalisis berkas access.log squid
`swatch` | V:0.09, I:0.30 | 99 | penampil berkas log dengan pencocokan regex, penyorotan, dan kait
`crm114` | V:0.07, I:0.34 | 1371 | Mutilator Regex dan Filter Spam yang Dapat Dikontrol (CRM114)
`icmpinfo` | V:0.01, I:0.33 | 42 | menafsirkan pesan ICMP

| Catatan
CRM114 menyediakan infrastruktur bahasa untuk menulis filter fuzzy dengan perpustakaan regex TRE. Penggunaannya yang populer adalah filter surel spam tetapi dapat digunakan sebagai penganalisis log.

### 9.3.3. Tampilan data teks yang dikustomisasi

Meskipun alat pager seperti more(1) dan less(1) (lihat Bagian 1.4.5, “Pager”) dan alat ubahan untuk menyoroti dan memformat (lihat Bagian 11.1.8, “Menyoroti dan memformat data teks polos”) dapat menampilkan data teks dengan baik, penyunting tujuan umum (lihat Bagian 1.4.6, “Penyunting teks”) paling serbaguna dan dapat disesuaikan.

| Tip
Untuk vim(1) dan alias mode pager-nya view(1), "`:set hls`" memungkinkan pencarian yang disorot.

### 9.3.4. Tampilan waktu dan tanggal yang disesuaikan

Format tampilan baku waktu dan tanggal oleh perintah "`ls -l`" tergantung pada lokal (lihat Bagian 1.2.6, “Stempel waktu” untuk nilainya). Variabel "`$LANG`" dirujuk terlebih dahulu dan dapat ditimpa oleh variabel lingkungan "`$LC_TIME`" atau "`$LC_ALL`" yang diekspor.

Format tampilan baku aktual untuk setiap lokal tergantung pada versi pustaka C standar (paket `libc6`) yang digunakan. Yaitu, rilis Debian yang berbeda memiliki baku yang berbeda. Untuk format iso, lihat ISO 8601.

Jika Anda benar-benar ingin menyesuaikan format tampilan waktu dan tanggal ini di luar lokal, Anda harus mengatur nilai gaya waktu dengan argumen "`--time-style`" atau dengan nilai "`$TIME_STYLE`" (lihat ls(1), date(1), "`info coreutils 'ls invocation'`").

Tabel 9.5. Menampilkan contoh waktu dan tanggal untuk perintah "`ls -l`" dengan nilai gaya waktu

nilai gaya waktu | lokal | tampilan waktu dan tanggal
--- | --- | ---
`iso` | apa pun | `01-19 00:15`
`long-iso` | apa pun | `2009-01-19 00:15`
`full-iso` | apa pun | `2009-01-19 00:15:16.000000000 +0900`
`locale` | `C` | `Jan 19 00:15`
`locale` | `en_US.UTF-8` | `Jan 19 00:15`
`locale` | `es_ES.UTF-8` | `ene 19 00:15`
`+%d.%m.%y %H:%M` | apa pun | `19.01.09 00:15`
`+%d.%b.%y %H:%M` | `C` atau `en_US.UTF-8` | `19.Jan.09 00:15`
`+%d.%b.%y %H:%M` | `es_ES.UTF-8` | `19.ene.09 00:15`

| Tip

Anda dapat menghilangkan mengetik opsi panjang pada baris perintah menggunakan alias perintah (lihat Bagian 1.5.9, “Alias perintah”):

    alias ls='ls --time-style=+%d.%m.%y %H:%M'

### 9.3.5. Echo shell berwarna

Shell echo ke sebagian besar terminal modern dapat diwarnai menggunakan kode escape ANSI (lihat "`/usr/share/doc/xterm/ctlseqs.txt.gz"`).

Misalnya, coba yang berikut ini

    $ RED=$(printf "\x1b[31m")
    $ NORMAL=$(printf "\x1b[0m")
    $ REVERSE=$(printf "\x1b[7m")
    $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

### 9.3.6. Perintah berwarna

Perintah berwarna berguna untuk memeriksa keluaran mereka di lingkungan interaktif. Saya memasukkan yang berikut dalam "`~/.bashrc`".

    if [ "$TERM" != "dumb" ]; then
        eval "`dircolors -b`"
        alias ls='ls --color=always'
        alias ll='ls --color=always -l'
        alias la='ls --color=always -A'
        alias less='less -R'
        alias ls='ls --color=always'
        alias grep='grep --color=always'
        alias egrep='egrep --color=always'
        alias fgrep='fgrep --color=always'
        alias zgrep='zgrep --color=always'
    else
        alias ll='ls -l'
        alias la='ls -A'
    fi

Penggunaan alias membatasi efek warna pada penggunaan perintah interaktif. Ini memiliki keuntungan dibandingkan mengekspor variabel lingkungan "`export GREP_OPTIONS='--color=auto'`" karena warna dapat dilihat di bawah program pager seperti less(1). Jika Anda ingin meniadakan warna saat menyalurkan ke program lain, gunakan "`--color=auto`" sebagai gantinya dalam contoh di atas untuk "`~/.bashrc`".

| Tip
Anda dapat mematikan alias mewarnai ini di lingkungan interaktif dengan memanggil shell memakai "`TERM=dumb bash`".

### 9.3.7. Merekam aktivitas penyunting untuk pengulangan yang kompleks

Anda dapat merekam aktivitas penyunting untuk pengulangan yang kompleks.

Untuk Vim, sebagai berikut.

- "`qa`": mulai merekam karakter yang diketik ke dalam register bernama "`a`".

- … aktivitas penyunting

- "`q`": mengakhiri rekaman karakter yang diketik.

- "`@a`": jalankan isi register "`a`".

Untuk Emacs, sebagai berikut.

- "`C-x (`": mulai mendefinisikan makro papan ketik.

- … aktivitas penyunting

- "`C-x)`": akhir mendefinisikan makro papan ketik.

- "`C-x e`": jalankan makro papan ketik.

### 9.3.8. Merekam gambar grafis dari aplikasi X

Ada beberapa cara untuk merekam gambar grafis dari aplikasi X, termasuk tampilan `xterm`.

Tabel 9.6. Daftar alat manipulasi gambar grafis

paket | popcon | ukuran | layar | perintah
--- | --- | --- | --- | ---
`gnome-screenshot` | V:12, I:101 | 1115 | Wayland | aplikasi tangkapan layar untuk GNOME
`flameshot` | V:8, I:18 | 3534 | Wayland | aplikasi tangkapan layar dengan steroid
`gimp` | V:44, I:216 | 32791 | Wayland + X | tangkapan layar di menu GUI
`x11-apps` | V:30, I:445 | 2461 | X | xwd(1)
`imagemagick` | V:9, I:278 | 79 | X | import(1)
`scrot` | V:4, I:50 | 144 | X | scrot(1)

### 9.3.9. Merekam perubahan dalam berkas konfigurasi

Ada alat khusus untuk merekam perubahan dalam berkas konfigurasi dengan bantuan DVCS dan untuk membuat snapshot sistem di Btrfs.

Tabel 9.7. Daftar paket yang dapat merekam riwayat konfigurasi

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`etckeeper` | V:24, I:27 | 157 | menyimpan berkas konfigurasi dan metadatanya dengan Git (baku), Mercurial, atau GNU Bazaar
`timeshift` | V:8, I:13 | 4481 | utilitas pemulihan sistem menggunakan snapshot rsync atau BTRFS
`snapper` | V:6.1, I:8.1 | 2396 | Alat manajemen snapshot sistem berkas Linux

Anda juga dapat mempertimbangkan pendekatan skrip lokal Bagian 10.2.3, “Tips pencadangan”.

## 9.4. Memantau, mengendalikan, dan memulai aktivitas program

Aktivitas program dapat dipantau dan dikendalikan menggunakan alat khusus.

Tabel 9.8. Daftar alat untuk memantau dan mengendalikan aktivitas program

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`coreutils` | V:911, I:1000 | 17994 | nice(1): menjalankan program dengan prioritas penjadwalan yang dimodifikasi
`bsdutils` | V:443, I:999 | 334 | renice(1): memodifikasi prioritas penjadwalan dari proses yang berjalan
`procps` | V:834, I:997 | 2389 | Utilitas sistem berkas "`/proc`": ps(1), top(1), kill(1), watch(1), …
`psmisc` | V:404, I:727 | 950 | Utilitas sistem berkas "`/proc`": killall(1), fuser(1), peekfd(1), pstree(1)
`time` | V:6, I:81 | 148 | time(1): menjalankan program untuk melaporkan penggunaan sumber daya sistem sehubungan dengan waktu
`sysstat` | V:120, I:166 | 1904 | sar(1), iostat(1), mpstat(1), …: alat kinerja sistem untuk Linux
`isag` | V:0.1, I:3.3 | 109 | Grafer Aktivitas Sistem Interaktif untuk sysstat
`lsof` | V:445, I:949 | 492 | lsof(8): daftar berkas yang dibuka oleh proses berjalan menggunakan opsi "`-p`"
`strace` | V:10, I:102 | 4393 | strace(1): melacak panggilan sistem dan sinyal
`ltrace` | V:1, I:12 | 420 | ltrace(1): melacak panggilan pustaka
`xtrace` | V:0.04, I:0.70 | 342 | xtrace(1): melacak komunikasi antara klien dan server X11
`powertop` | V:33, I:224 | 696 | powertop(1): informasi tentang penggunaan daya sistem
`cron` | V:922, I:997 | 247 | menjalankan proses sesuai dengan jadwal di latar belakang dari daemon cron(8)
`anacron` | V:419, I:476 | 110 | penjadwal perintah seperti cron untuk sistem yang tidak berjalan 24 jam sehari
`at` | V:73, I:98 | 158 | at(1) atau batch(1): menjalankan pekerjaan pada waktu tertentu atau di bawah tingkat beban tertentu

| Tip
Paket `procps` memberikan dasar-dasar pemantauan, pengendalian, dan memulai kegiatan program. Anda harus mempelajari semuanya.

### 9.4.1. Mencatat waktu eksekusi proses

Menampilkan waktu yang digunakan oleh proses yang dipanggil oleh perintah.

    # time some_command >/dev/null
    real    0m0.035s       # time on wall clock (elapsed real time)
    user    0m0.000s       # time in user mode
    sys     0m0.020s       # time in kernel mode

### 9.4.2. Prioritas penjadwalan

Suatu nilai nice digunakan untuk mengontrol prioritas penjadwalan untuk proses tersebut.

Tabel 9.9. Daftar nilai nice untuk prioritas penjadwalan

nilai nice | prioritas penjadwalan
--- | ---
19 | proses prioritas terendah (nice)
0 | proses prioritas sangat tinggi untuk pengguna
-20 | proses prioritas yang sangat tinggi untuk root (tidak-nice)

    # nice  -19 top                                      # very nice
    # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

Terkadang nilai nice yang ekstrem lebih berbahaya daripada baik untuk sistem. Gunakan perintah ini dengan hati-hati.

### 9.4.3. Perintah ps

Perintah ps(1) pada sistem Debian mendukung fitur BSD dan SystemV dan membantu mengidentifikasi aktivitas proses secara statis.

Tabel 9.10. Daftar gaya perintah ps

gaya | perintah tipikal | fitur
--- | --- | ---
BSD | `ps aux` | display %CPU %MEM
System V | `ps -efH` | tampilkan PPID

Untuk proses anak zombie (mati), Anda dapat membunuh mereka dengan id proses induk yang diidentifikasi di bidang "`PPID`".

Perintah pstree(1) menampilkan pohon proses.

### 9.4.4. Perintah top

top(1) pada sistem Debian memiliki fitur yang kaya dan membantu mengidentifikasi proses apa yang bertindak aneh secara dinamis.

Ini adalah program layar penuh interaktif. Anda bisa mendapatkan bantuan penggunaannya dengan menekan tombol "h" dan menghentikannya dengan menekan tombol "q".

### 9.4.5. Daftar berkas yang dibuka oleh suatu proses

Anda dapat mencantumkan semua berkas yang dibuka oleh proses dengan ID proses (PID), misalnya 1, dengan yang berikut ini.

    $ sudo lsof -p 1

PID=1 biasanya adalah program `init`.

### 9.4.6. Menelusuri aktivitas program

Anda dapat melacak aktivitas program dengan strace(1), ltrace(1), atau xtrace(1) untuk panggilan dan sinyal sistem, panggilan pustaka, atau komunikasi antara klien dan server X11.

Anda dapat melacak panggilan sistem dari perintah `ls` sebagai berikut.

    $ sudo strace ls

| Tip
Gunakan skrip strace-graph yang ditemukan di /usr/share/doc/strace/examples/ untuk membuat tampilan pohon yang bagus

### 9.4.7. Identifikasi proses menggunakan berkas atau soket

Anda juga dapat mengidentifikasi proses yang menggunakan berkas dengan fuser(1), misalnya untuk "`/var/log/mail.log`" dengan berikut ini.

    $ sudo fuser -v /var/log/mail.log
                         USER        PID ACCESS COMMAND
    /var/log/mail.log:   root       2946 F.... rsyslogd

Anda melihat bahwa berkas "`/var/log/mail.log`" dibuka untuk ditulis oleh perintah rsyslogd(8).

Anda juga dapat mengidentifikasi proses menggunakan soket dengan fuser(1), misalnya untuk "`smtp/tcp`" dengan yang berikut.

    $ sudo fuser -v smtp/tcp
                         USER        PID ACCESS COMMAND
    smtp/tcp:            Debian-exim   3379 F.... exim4

Sekarang Anda tahu sistem Anda menjalankan exim4(8) untuk menangani koneksi TCP ke port SMTP (25).

### 9.4.8. Mengulangi perintah dengan interval konstan

watch(1) mengeksekusi program berulang kali dengan interval konstan sambil menunjukkan keluarannya di layar penuh.

    $ watch w

Ini menampilkan siapa yang masuk ke sistem, diperbarui setiap 2 detik.

### 9.4.9. Mengulangi perintah atas berkas

Ada beberapa cara untuk mengulangi perintah atas berkas yang cocok dengan beberapa kondisi, misalnya pencocokan pola glob "`*.ext`".

- Metode for-loop shell (lihat Bagian 12.1.4, “Loop shell”):

    for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done

- Kombinasi find(1) dan xargs(1):

    find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command

- find(1) dengan opsi "`-exec`" dengan suatu perintah:

    find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;

- find(1) dengan opsi "`-exec`" dengan skrip shell pendek:

    find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

Contoh di atas ditulis untuk memastikan penanganan yang tepat dari nama berkas aneh seperti yang berisi spasi. Lihat Bagian 10.1.5, “Idiom untuk pemilihan berkas” untuk penggunaan `find` (1) pada tingkat lanjut.

### 9.4.10. Memulai program dari GUI

Untuk antarmuka baris perintah (CLI), program pertama dengan nama yang cocok yang ditemukan di direktori yang ditentukan dalam variabel lingkungan `$PATH` dijalankan. Lihat Bagian 1.5.3, “Variabel "`$PATH`"”.

Untuk antarmuka pengguna grafis (GUI) yang sesuai dengan standar freedesktop.org, berkas `*.desktop` di direktori `/usr/share/applications/` memberikan atribut yang diperlukan untuk tampilan menu GUI dari setiap program. Setiap paket yang sesuai dengan sistem menu xdg Freedesktop.org memasang data menu yang disediakan oleh "*.desktop" di bawah "/usr/share/applications/". Lingkungan desktop modern yang sesuai dengan standar Freedesktop.org menggunakan data ini untuk menghasilkan menu mereka menggunakan paket xdg-utils. Lihat "/usr/share/doc/xdg-utils/README".

Misalnya, berkas `chromium.desktop` mendefinisikan atribut untuk "Peramban Web Chromium" seperti "Name" untuk nama program, "Exec" untuk path eksekusi program dan argumen, "Icon" untuk ikon yang digunakan, dll. (lihat Spesifikasi Entri Desktop) sebagai berikut:

    [Desktop Entry]
    Version=1.0
    Name=Chromium Web Browser
    GenericName=Web Browser
    Comment=Access the Internet
    Comment[fr]=Explorer le Web
    Exec=/usr/bin/chromium %U
    Terminal=false
    X-MultipleArgs=false
    Type=Application
    Icon=chromium
    Categories=Network;WebBrowser;
    MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
    StartupWMClass=Chromium
    StartupNotify=true

Ini adalah deskripsi yang terlalu disederhanakan. Berkas `*.desktop` dipindai sebagai berikut.

Lingkungan desktop menetapkan variabel lingkungan `$XDG_DATA_HOME` dan `$XDG_DATA_DIR`. Misalnya, di bawah GNOME:

- `$XDG_DATA_HOME` tidak ditata. (Nilai baku `$HOME/.local/share` digunakan.)

- `$XDG_DATA_DIRS` diatur ke `/usr/share/gnome:/usr/local/share/:/usr/share/`.

Jadi direktori dasar (lihat Spesifikasi Direktori Dasar XDG) dan direktori `applications` adalah sebagai berikut.

- `$HOME/.local/share/` → `$HOME/.local/share/applications/`

- `/usr/share/gnome/` → `/usr/share/gnome/applications/`

- `/usr/local/share/` → `/usr/local/share/applications/`

- `/usr/share/` → `/usr/share/applications/`

Berkas `*.desktop` dipindai dalam direktori `applications` ini dalam urutan ini.

| Tip
Entri menu GUI ubahan pengguna dapat dibuat dengan menambahkan berkas `*.desktop` di direktori `$HOME/.local/share/applications/`.

| Tip
Baris "`Exec=...`" tidak diuraikan oleh shell. Gunakan perintah env(1) jika variabel lingkungan perlu diatur.

| Tip
Demikian pula, jika berkas `*.desktop` dibuat di direktori `autostart` di bawah direktori dasar ini, program yang ditentukan dalam berkas `*.desktop` dijalankan secara otomatis ketika lingkungan desktop dimulai. Lihat Spesifikasi Autostart Aplikasi Desktop.

| Tip
Demikian pula, jika berkas `*.desktop` dibuat di direktori `$HOME/Desktop` dan lingkungan Desktop dikonfigurasi untuk mendukung fitur peluncur ikon desktop, program yang ditentukan di dalamnya dijalankan setelah mengklik ikon. Harap dicatat bahwa nama sebenarnya dari direktori `$HOME/Desktop` tergantung pada lokal. Lihat xdg-user-dirs-update(1).

### 9.4.11. Menyesuaikan program yang akan dimulai

Beberapa program memulai program lain secara otomatis. Berikut adalah poin-poin pemeriksaan untuk menyesuaikan proses ini.

- Menu konfigurasi aplikasi:

  - Desktop GNOME: "Settings" → "Apps" → "Default Apps"

  - Desktop KDE: "Application Launcher" → "System Settings" → "Default Applications"

  - Peramban Iceweasel: "Sunting" → "Preferensi" → "Aplikasi"

  - mc(1): "`/etc/mc/mc.ext`"

- Variabel lingkungan seperti "`$BROWSER`", "`$EDITOR`", "`$VISUAL`", dan "`$PAGER`" (lihat environ(7))

- Sistem update-alternatives(1) untuk program seperti "`editor`", "`view`", "`x-www-browser`", "`gnome-www-browser`", dan"`www-browser`" (lihat Bagian 1.4.7, “Menyiapkan penyunting teks default”)

- isi berkas "`~/.mailcap`" dan "`/etc/mailcap`" yang mengaitkan jenis MIME dengan program (lihat mailcap(5))

- Konten berkas "`~/.mime.types`" dan "`/etc/mime.types`" yang mengaitkan ekstensi nama berkas dengan tipe MIME (lihat run-mailcap(1))

| Tip
update-mime(8) memperbarui berkas "`/etc/mailcap`" menggunakan berkas "`/etc/mailcap.order`" (lihat mailcap.order(5)).

| Tip
Paket `debianutils` menyediakan sensible-browser(1), sensible-editor(1), dan sensible-pager(1) yang membuat keputusan yang masuk akal atas penyunting, pager, dan peramban web yang akan dipanggil. Saya sarankan Anda untuk membaca skrip shell ini.

| Tip

Untuk menjalankan aplikasi konsol seperti `mutt` di bawah X sebagai aplikasi pilihan Anda, Anda mesti mencipta aplikasi GUI sebagai berikut dan mengatur "`/usr/local/bin/mutt-term`" sebagai aplikasi pilihan Anda yang akan dimulai seperti yang dijelaskan.

    # cat /usr/local/bin/mutt-term <<EOF
    #!/bin/sh
    gnome-terminal -e "mutt \$@"
    EOF
    # chmod 755 /usr/local/bin/mutt-term

### 9.4.12. Membunuh sebuah proses

Gunakan kill(1) untuk membunuh (atau mengirim sinyal ke) suatu proses dengan ID proses.

Gunakan killall(1) atau pkill(1) untuk melakukan hal yang sama dengan nama perintah proses dan atribut lainnya.

Tabel 9.11. Daftar sinyal yang sering digunakan untuk perintah bunuh

nilai sinyal | nama sinyal | aksi | catatan
--- | --- | --- | ---
0 | --- | tidak ada sinyal yang dikirim (lihat kill(2)) | memeriksa apakah proses sedang berjalan
1 | SIGHUP | mengakhiri proses | terminal terputus (sinyal terputus)
2 | SIGINT | mengakhiri proses | interupsi dari papan ketik (`CTRL-C`)
3 | SIGQUIT | mengakhiri proses dan dump core | berhenti dari papan ketik (`CTRL-\`)
9 | SIGKILL | mengakhiri proses | sinyal kill yang tidak dapat diblokir
15 | SIGTERM | mengakhiri proses | sinyal pengakhiran yang dapat diblokir

### 9.4.13. Menjadwalkan tugas sekali

Jalankan perintah at(1) untuk menjadwalkan pekerjaan satu kali dengan yang berikut.

    $ echo 'command -args'| at 3:40 monday

### 9.4.14. Menjadwalkan tugas secara teratur

Gunakan cron(8) untuk menjadwalkan tugas secara teratur. Lihat crontab(1) dan crontab(5).

Anda dapat menjadwalkan untuk menjalankan proses sebagai pengguna normal, misalnya `foo` dengan membuat berkas crontab(5) sebagai "`/var/spool/cron/crontabs/foo`" dengan perintah "`crontab -e`".

Berikut adalah contoh berkas crontab(5).

    # use /usr/bin/sh to run commands, no matter what /etc/passwd says
    SHELL=/bin/sh
    # mail any output to paul, no matter whose crontab this is
    MAILTO=paul
    # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
    # run at 00:05, every day
    5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
    # run at 14:15 on the first of every month -- output mailed to paul
    15 14 1  * *   $HOME/bin/monthly
    # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
    0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
    23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
    5  4 *   * sun echo "run at 04:05 every Sunday"
    # run at 03:40 on the first Monday of each month
    40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

| Tip
Untuk sistem yang tidak berjalan terus menerus, pasang paket `anacron` untuk menjadwalkan perintah berkala pada interval yang ditentukan sedekat mungkin dengan waktu aktif mesin mengizinkan. Lihat anacron(8) dan anacrontab(5).

| Tip
Untuk skrip pemeliharaan sistem terjadwal, Anda dapat menjalankannya secara berkala dari akun root dengan menempatkan skrip tersebut di "`/etc/cron.hourly/`", "/etc/cron.daily/``","`/etc/cron.weekly/`", atau "`/etc/cron.monthly/`". Waktu eksekusi skrip ini dapat disesuaikan dengan "`/etc/crontab`" dan "`/etc/anacrontab`".

Systemd memiliki kemampuan tingkat rendah untuk menjadwalkan program untuk berjalan tanpa daemon `cron`. Misalnya, `/lib/systemd/system/apt-daily.timer` dan `/lib/systemd/system/apt-daily.service` mengatur kegiatan pengunduhan apt harian. Lihat systemd.timer(5).

### 9.4.15. Menjadwalkan tugas pada acara

Systemd dapat menjadwalkan program tidak hanya pada kejadian timer tetapi juga pada kejadian mount. Lihat Bagian 10.2.3.3, “Pencadangan yang dipicu oleh kejadian pewaktu” dan Bagian 10.2.3.2, “Pencadangan yang dipicu kejadian mount” untuk contoh.

### 9.4.16. Tombol Alt-SysRq

Menekan Alt-SysRq (PrtScr) diikuti oleh satu tombol melakukan keajaiban menyelamatkan kontrol sistem.

Tabel 9.12. Daftar tombol perintah SAK yang terkenal

tombol setelah Alt-SysRq | deskripsi tindakan
--- | ---
`k` | matikan semua proses pada konsol virtual saat ini (SAK)
`s` | selaraskan semua sistem berkas yang dikait untuk menghindari korupsi data
`u` | kait ulang ke hanya baca semua sistem berkas yang dikait (umount)
`r` | memulihkan papan ketik dari mode raw setelah X crash

Lihat lebih lanjut pada Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks

| Tip
Dari terminal SSH dll., Anda dapat menggunakan fitur Alt-SysRq dengan menulis ke "`/proc/sysrq-trigger`". Misalnya, "`echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger`" dari prompt shell root menyelaraskan dan u melepas kait semua sistem berkas yang dikait.

Kernel Linux Debian amd64 saat ini (2021) memiliki `/proc/sys/kernel/sysrq=438=0b110110110`:

- 2 = 0x2 - memfungsikan kontrol tingkat log konsol (ON)

- 4 = 0x4 - memfungsikan kontrol papan ketik (SAK, unraw) (ON)

- 8 = 0x8 - memfungsikan dump debug proses dll (OFF)

- 16 = 0x10 - memfungsikan perintah sinkronisasi (ON)

- 32 = 0x20 - memfungsikan remount hanya baca (ON)

- 64 = 0x40 - memfungsikan pensinyalan proses (term, kill, oom-kill) (OFF)

- 128 = 0x80 - izinkan reboot/poweroff (ON)

- 256 = 0x100 - memungkinkan me-nice semua tugas RT (ON)

## 9.5. Tips pemeliharaan sistem

### 9.5.1. Siapa yang ada di sistem?

Anda dapat memeriksa siapa yang ada di sistem dengan berikut ini.

- who(1) menunjukkan siapa yang sedang log masuk.

- w(1) menunjukkan siapa yang sedang log masuk dan apa yang mereka lakukan.

- last(1) menampilkan daftar pengguna terakhir yang masuk.

- lastb(1) menunjukkan daftar pengguna buruk terakhir yang masuk.

| Tip
"`/var/run/utmp`", dan"`/var/log/wtmp`" menyimpan informasi pengguna tersebut. Lihat login(1) dan utmp(5).

### 9.5.2. Memperingatkan semua orang

Anda dapat mengirim pesan ke semua orang yang masuk ke sistem dengan wall(1) dengan berikut ini.

    $ echo "We are shutting down in 1 hour" | wall

### 9.5.3. Identifikasi perangkat keras

Untuk perangkat mirip PCI (AGP, PCI-Express, CardBus, ExpressCard, dll), lspci(8) (mungkin dengan opsi "`-nn`") adalah awal yang baik untuk identifikasi perangkat keras.

Atau, Anda dapat mengidentifikasi perangkat keras dengan membaca isi "`/proc/bus/pci/devices`" atau meramban pohon direktori di bawah "`/sys/bus/pci`" (lihat Bagian 1.2.12, “procfs dan sysfs”).

Tabel 9.13. Daftar alat identifikasi perangkat keras

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`pciutils` | V:258, I:993 | 289 | Utilitas PCI Linux: lspci(8)
`usbutils` | V:83, I:887 | 322 | Utilitas USB Linux: lsusb(8)
`nvme-cli` | V:24, I:34 | 2222 | Utilitas NVMe untuk Linux: nvme(1)
`pcmciautils` | V:4.1, I:6.4 | 92 | Utilitas PCMCIA untuk Linux: pccardctl(8)
`scsitools` | V:0.2, I:2.3 | 261 | kumpulan alat untuk manajemen perangkat keras SCSI: lsscsi(8)
`procinfo` | V:0.4, I:6.2 | 149 | informasi sistem yang diperoleh dari "`/proc`": lsdev(8)
`lshw` | V:13, I:90 | 971 | informasi tentang konfigurasi perangkat keras: lshw(1)
`discover` | V:26, I:620 | 81 | sistem identifikasi perangkat keras: discover(8)

### 9.5.4. Konfigurasi perangkat keras

Meskipun sebagian besar konfigurasi perangkat keras pada sistem desktop GUI modern seperti GNOME dan KDE dapat dikelola melalui alat konfigurasi GUI yang menyertainya, adalah ide yang baik untuk mengetahui beberapa metode dasar untuk mengkonfigurasinya.

For the keyboard and terminal configuration, see Bagian 8.2, “Masukan papan ketik” and Bagian 8.3, “Keluaran tampilan”.

Tabel 9.14. Daftar alat konfigurasi perangkat keras

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`console-setup` | V:81, I:974 | 422 | Fonta konsol Linux dan utilitas keytable
`keyd` | V:1.1, I:1.3 | 1437 | keyboard key remapping daemon using kernel level input primitives (evdev, uinput)
`keyd-application-mapper` | V:0.00, I:0.09 | 34 | keyboard key remapping daemon - application-specific remapper
`x11-xserver-utils` | V:309, I:531 | 559 | Utilitas server X: xset(1), xmodmap(1)
`acpid` | V:55, I:85 | 158 | daemon untuk mengelola kejadian yang disampaikan oleh Advanced Configuration and Power Interface (ACPI)
`acpi` | V:7, I:79 | 49 | utilitas untuk menampilkan informasi pada perangkat ACPI
`sleepd` | V:0.08, I:0.11 | 84 | daemon untuk membuat laptop tidur selama tidak aktif
`hdparm` | V:117, I:213 | 246 | optimasi akses hard disk (lihat Bagian 9.6.9, “Optimalisasi hard disk”)
`smartmontools` | V:235, I:265 | 2455 | mengontrol dan memantau sistem penyimpanan menggunakan S.M.A.R.T.
`setserial` | V:3.2, I:5.2 | 104 | koleksi alat untuk manajemen port serial
`memtest86+` | V:1, I:19 | 12483 | koleksi alat untuk manajemen perangkat keras memori
`scsitools` | V:0.2, I:2.3 | 261 | koleksi alat untuk manajemen perangkat keras SCSI
`setcd` | V:0.06, I:0.66 | 33 | optimasi akses drive compact disc
`big-cursor` | I:0.64 | 26 | kursor tetikus yang lebih besar untuk X

Di sini, ACPI adalah kerangka kerja yang lebih baru untuk sistem manajemen daya daripada APM.

| Tip
Penskalaan frekuensi CPU pada sistem modern diatur oleh modul kernel seperti `acpi_cpufreq`.

### 9.5.5. Waktu sistem dan perangkat keras

Berikut ini mengatur waktu sistem dan perangkat keras ke BB/TT jj:mm, AAYY.

    # date MMDDhhmmCCYY
    # hwclock --utc --systohc
    # hwclock --show

Waktu biasanya ditampilkan pada waktu lokal pada sistem Debian tetapi waktu perangkat keras dan sistem biasanya menggunakan UTC (GMT).

Jika waktu perangkat keras diatur ke UTC, ubah pengaturan menjadi "`UTC=yes`" di "`/etc/default/rcS`".

Berikut konfigurasi ulang zona waktu yang digunakan oleh sistem Debian.

    # dpkg-reconfigure tzdata

Jika Anda ingin memperbarui waktu sistem melalui jaringan, pertimbangkan untuk menggunakan layanan NTP dengan paket seperti `ntp`, `ntpdate`, dan `chrony`.

| Tip
Di bawah systemd, gunakan `systemd-timesyncd` untuk sinkronisasi waktu jaringan sebagai gantinya. Lihat systemd-timesyncd(8).

Lihat yang berikut.

- HOWTO Mengelola Tanggal dan Waktu yang Akurat

- Proyek Layanan Publik NTP

- Paket `ntp-doc`

| Tip
ntptrace(8) dalam paket `ntp` dapat melacak rantai server NTP kembali ke sumber utama.

### 9.5.6. Infrastruktur suara

Driver perangkat untuk kartu suara bagi Linux saat ini disediakan oleh Advanced Linux Sound Architecture (ALSA). ALSA menyediakan mode emulasi untuk Open Sound System (OSS) sebelumnya untuk kompatibilitas.

Perangkat lunak aplikasi dapat dikonfigurasi tidak hanya untuk mengakses perangkat suara secara langsung tetapi juga untuk mengaksesnya melalui beberapa sistem server suara standar. Saat ini, PulseAudio, JACK, dan PipeWire digunakan sebagai sistem server suara. Lihat halaman wiki Debian tentang Suara untuk situasi terbaru.

Biasanya ada mesin suara umum untuk setiap lingkungan desktop yang populer. Setiap mesin suara yang digunakan oleh aplikasi dapat memilih untuk terhubung ke server suara yang berbeda.

| Tip
Gunakan "`cat /dev/urandom > /dev/audio`" atau speaker-test(1) untuk menguji speaker (^C untuk berhenti).

| Tip
Jika Anda tidak bisa mendapatkan suara, speaker Anda mungkin terhubung ke keluaran yang dibisukan. Sistem suara modern memiliki banyak keluaran. alsamixer(1) dalam paket `alsa-utils` berguna untuk mengkonfigurasi pengaturan volume dan bisu.

Tabel 9.15. Daftar paket suara

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`alsa-utils` | V:340, I:459 | 2696 | utilitas untuk mengonfigurasi dan menggunakan ALSA
`oss-compat` | V:0.6, I:9.7 | 21 | Kompatibilitas OSS di bawah ALSA mencegah kesalahan "`/dev/dsp tidak ditemukan`"
`pipewire` | V:321, I:365 | 135 | server multimedia mesin pemrosesan audio dan video - paket meta
`pipewire-bin` | V:328, I:365 | 2219 | server multimedia mesin pemrosesan audio dan video - program server dan CLI audio
`pipewire-alsa` | V:169, I:234 | 190 | server multimedia mesin pemrosesan audio dan video - server audio untuk menggantikan ALSA
`pipewire-pulse` | V:289, I:337 | 53 | server multimedia mesin pemrosesan audio dan video - server audio untuk menggantikan PulseAudio
`pulseaudio` | V:156, I:182 | 6602 | server PulseAudio
`libpulse0` | V:440, I:577 | 969 | pustaka klien PulseAudio
`jackd` | V:2, I:14 | 8 | server JACK Audio Connection Kit. (JACK) (latensi rendah)
`libjack0` | V:1.8, I:8.8 | 329 | pustaka JACK Audio Connection Kit. (JACK) (latensi rendah)
`libphonon4qt5-4` | V:22, I:50 | 572 | Phonon: Mesin suara KDE

### 9.5.7. Menonaktifkan screen saver

Untuk menonaktifkan screen saver, gunakan perintah berikut.

Tabel 9.16. Daftar perintah untuk menonaktifkan screen saver

lingkungan | perintah
--- | ---
Konsol Linux | `setterm -powersave off`
X Window (mematikan screensaver) | `xset s off`
X Window (menonaktifkan DPMS) | `xset -dpms`
X Window (konfigurasi GUI screen saver) | `xscreensaver-command -prefs`

### 9.5.8. Menonaktifkan suara bip

Seseorang selalu dapat mencabut speaker PC untuk menonaktifkan suara bip. Menghapus modul kernel `pcspkr` melakukan ini untuk Anda.

Berikut ini mencegah program readline(3) yang digunakan oleh bash(1) untuk berbunyi bip saat menemui karakter peringatan (ASCII=7).

    $ echo "set bell-style none">> ~/.inputrc

### 9.5.9. Penggunaan memori

Ada 2 sumber daya yang tersedia bagi Anda untuk mendapatkan situasi penggunaan memori.

- Pesan boot kernel dalam "`/var/log/dmesg`" berisi ukuran total yang tepat dari memori yang tersedia.

- free(1) dan top(1) menampilkan informasi tentang sumber daya memori pada sistem yang sedang berjalan.

Berikut adalah contohnya.

    # grep '\] Memory' /var/log/dmesg
    [    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
    $ free -k
                 total       used       free     shared    buffers     cached
    Mem:        997184     976928      20256          0     129592     171932
    -/+ buffers/cache:     675404     321780
    Swap:      4545576          4    4545572

Anda mungkin bertanya-tanya "dmesg memberi tahu saya bebas 990 MB, dan free -k mengatakan 320 MB bebas. Lebih dari 600 MB hilang …".

Jangan khawatir tentang ukuran besar "`digunakan`" dan ukuran kecil "`bebas`" dalam baris "`Mem:`", tetapi baca yang di bawahnya (675404 dan 321780 dalam contoh di atas) dan rileks.

Untuk MacBook saya dengan DRAM 1GB=1048576k (sistem video mencuri sebagian dari ini), saya melihat yang berikut.

Tabel 9.17. Daftar ukuran memori yang dilaporkan

laporan | ukuran
--- | ---
Ukuran total dalam dmesg | 1016784k = 1GB - 31792k
Bebas di dmesg | 990528k
Total di bawah shell | 997184k
Bebas di bawah shell | 20256k (tetapi efektifnya 321780k)

### 9.5.10. Pemeriksaan keamanan dan integritas sistem

Pemeliharaan sistem yang buruk dapat mengekspos sistem Anda ke eksploitasi eksternal.

Untuk pemeriksaan keamanan dan integritas sistem, Anda harus mulai dengan yang berikut.

- Paket `debsums`, lihat debsum(1) dan Bagian 2.5.2, “Berkas "Release" tingkat puncak dan keaslian”.

- Paket `chkrootkit`, lihat chkrootkit(1).

- Keluarga paket `clamav`, lihat clamscan(1) dan freshclam(1).

- FAQ keamanan Debian.

- Manual Mengamankan Debian.

Tabel 9.18. Daftar alat untuk pemeriksaan keamanan dan integritas sistem

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`logcheck` | V:4.8, I:5.9 | 120 | daemon untuk mengirimkan anomali dalam berkas log sistem ke administrator
`debsums` | V:4, I:30 | 108 | utilitas untuk memverifikasi berkas-berkas paket yang dipasang terhadap checksum MD5
`chkrootkit` | V:9, I:14 | 987 | detektor rootkit
`clamav` | V:9, I:39 | 39204 | utilitas anti-virus untuk Unix - antarmuka baris perintah
`tiger` | V:1.2, I:1.5 | 7800 | melaporkan kerentanan keamanan sistem
`tripwire` | V:1.3, I:1.6 | 5060 | pemeriksa integritas berkas dan direktori
`john` | V:1.1, I:7.3 | 469 | alat pemecah kata sandi aktif
`aide` | V:2.0, I:2.4 | 324 | Advanced Intrusion Detection Environment - biner statis
`integrit` | V:0.10, I:0.18 | 2771 | program verifikasi integritas berkas
`crack` | V:0.09, I:0.57 | 153 | program menebak kata sandi

Berikut adalah skrip sederhana untuk memeriksa salah izin berkas sehingga dapat ditulis oleh siapapun.

    # find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)

| Perhatian
Karena paket `debsums` menggunakan checksum MD5 yang disimpan secara lokal, itu tidak dapat sepenuhnya dipercaya sebagai alat audit keamanan sistem terhadap serangan berbahaya.

## 9.6. Tips penyimpanan data

Mem-boot sistem Anda sebagai sistem Linux live (lihat Bagian 3.2.2, “Sistem penyelamat Linux live pada USB” dan Bagian 3.2.3, “Sistem penyelamat Linux live dari GRUB”) memudahkan Anda mengonfigurasi ulang penyimpanan data pada sistem yang terinstal.

| Catatan
Pernyataan tentang hard disk (HDD) berlaku untuk perangkat penyimpanan lain seperti SSD / USB flash drive / Kartu memori / ... . Ganti nama perangkat dalam contoh seperti `/dev/sda` dengan nama perangkat yang sesuai `/dev/nvme0`, `/dev/mmcblk0`, ... .

Anda mungkin perlu umount(8) beberapa perangkat secara manual dari baris perintah sebelum beroperasi pada mereka jika mereka secara otomatis dipasang oleh sistem desktop GUI.

### 9.6.1. Penggunaan ruang disk

Penggunaan ruang disk dapat dievaluasi oleh program yang disediakan oleh paket `mount`, `coreutils`, dan `xdu`:

- mount(8) melaporkan semua sistem berkas yang dikait (= disk).

- df(1) melaporkan penggunaan ruang disk untuk sistem berkas.

- du(1) melaporkan penggunaan ruang disk untuk pohon direktori.

| Tip
Anda dapat mengumpan keluaran dari du(8) ke xdu(1) untuk menghasilkan presentasi grafis dan interaktif dengan "`du -k . |xdu`", "`sudo du -k -x / |xdu`", dll.

### 9.6.2. Konfigurasi partisi disk

Untuk konfigurasi partisi disk, meskipun fdisk(8) telah dianggap standar, parted(8) layak mendapat perhatian. "Data partisi disk", "tabel partisi", "peta partisi", dan "label disk" semuanya sinonim.

PC yang lebih tua menggunakan skema Master Boot Record (MBR) klasik untuk menyimpan data partisi disk di sektor pertama, yaitu, sektor LBA 0 (512 byte).

PC terbaru dengan Unified Extensible Firmware Interface (UEFI), termasuk Mac berbasis Intel, menggunakan skema GUID Partition Table (GPT) untuk menyimpan data partisi disk yang tidak terletak di sektor pertama.

Meskipun fdisk(8) telah menjadi standar untuk alat partisi disk, parted(8) menggantikannya.

Tabel 9.19. Daftar paket manajemen partisi disk

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`util-linux` | V:917, I:1000 | 4658 | utilitas sistem lain-lain termasuk fdisk(8) dan cfdisk(8)
`parted` | V:449, I:568 | 122 | GNU Parted program pengubahan ukuran partisi disk
`gparted` | V:12, I:87 | 2313 | GNOME penyunting partisi berdasarkan `libparted`
`gdisk` | V:19, I:277 | 967 | penyunting partisi untuk disk hibrid GPT/MBR
`kpartx` | V:17, I:26 | 76 | program untuk membuat pemetaan perangkat bagi partisi

| Perhatian
Meskipun parted(8) mengklaim untuk membuat dan mengubah ukuran sistem berkas juga, lebih aman untuk melakukan hal-hal seperti itu menggunakan alat khusus terbaik yang dipelihara seperti mkfs(8)`(mkfs.msdos`(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) dan resize2fs(8).

| Catatan
Untuk beralih antara GPT dan MBR, Anda perlu menghapus beberapa blok pertama isi disk secara langsung (lihat Bagian 9.8.6, “Menghapus konten berkas”) dan menggunakan "`parted /dev/sdx mklabel gpt`" atau "`parted /dev/sdx mklabel msdos`" untuk mengaturnya. Harap dicatat "`msdos`" digunakan di sini untuk MBR.

### 9.6.3. Mengakses partisi menggunakan UUID

Meskipun konfigurasi ulang partisi atau urutan aktivasi media penyimpanan lepasan dapat menghasilkan nama yang berbeda untuk partisi, Anda dapat mengaksesnya secara konsisten. Ini juga membantu jika Anda memiliki beberapa disk dan BIOS/UEFI Anda tidak memberi mereka nama perangkat yang konsisten.

- mount(8) dengan opsi "`-U`" dapat mengait perangkat blok menggunakan UUID, bukan menggunakan nama berkas seperti "`/dev/sda3`".

- "`/etc/fstab`" (lihat fstab(5)) dapat menggunakan UUID.

- Boot loader (Bagian 3.1.2, “Tahap 2: boot loader”) dapat menggunakan UUID juga.

| Tip
Anda dapat menjajaki UUID dari perangkat khusus blok dengan blkid(8). Anda juga dapat menjajaki UUID dan informasi lainnya dengan "`lsblk -f`".

### 9.6.4. LVM2

LVM2 adalah manajer volume logis untuk kernel Linux. Dengan LVM2, partisi disk dapat dibuat pada volume logis bukan harddisk fisik.

LVM membutuhkan hal-hal berikut.

- dukungan device-mapper di kernel Linux (baku untuk kernel Debian)

- pustaka dukungan device-mapper ruang pengguna (paket `libdevmapper*`)

- perkakas LVM2 ruang pengguna (paket `lvm2`)

Silakan mulai belajar LVM2 dari manpages berikut.

- lvm(8): Dasar-dasar mekanisme LVM2 (daftar semua perintah LVM2)

- lvm.conf(5): Berkas konfigurasi untuk LVM2

- lvs(8): Melaporkan informasi tentang volume logis

- vgs(8): Melaporkan informasi tentang grup volume

- pvs(8): Melaporkan informasi tentang volume fisik

### 9.6.5. Konfigurasi sistem berkas

Untuk sistem berkas ext4, paket `e2fsprogs` menyediakan yang berikut.

- mkfs.ext4(8) untuk membuat sistem berkas ext4 baru

- fsck.ext4(8) untuk memeriksa dan memperbaiki sistem berkas ext4 yang ada

- tune2fs(8) untuk mengkonfigurasi superblok dari sistem berkas ext4

- debugfs(8) untuk debug sistem berkas ext4 interaktif. (Ini memiliki perintah `undel` untuk memulihkan berkas yang dihapus.)

Perintah mkfs(8) dan fsck(8) disediakan oleh paket `e2fsprogs` sebagai front-end untuk berbagai program yang bergantung kepada sistem berkas (`mkfs.fstype` dan `fsck.fstype`). Untuk sistem berkas ext4, mereka adalah mkfs.ext4(8) dan fsck.ext4(8) (mereka di-symlinked mke2fs(8) dan e2fsck(8)).

Perintah serupa tersedia untuk setiap sistem berkas yang didukung oleh Linux.

Tabel 9.20. Daftar paket manajemen sistem berkas

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`e2fsprogs` | V:822, I:997 | 1543 | utilitas untuk sistem berkas ext2/ext3/ext4
`btrfs-progs` | V:51, I:78 | 5250 | utilitas untuk sistem berkas Btrfs
`reiserfsprogs` | V:11, I:22 | 473 | utilitas untuk sistem berkas Reiserfs
`zfsutils-linux` | V:33, I:33 | 1895 | utilitas untuk sistem berkas OpenZFS
`dosfstools` | V:257, I:564 | 310 | utilitas untuk sistem berkas FAT. (Microsoft: MS-DOS, Windows)
`exfatprogs` | V:34, I:459 | 558 | utilitas untuk sistem berkas exFAT yang dikelola oleh Samsung.
`exfat-fuse` | V:2, I:45 | 73 | driver sistem berkas exFAT (Microsoft) baca/tulis untuk FUSE.
`xfsprogs` | V:41, I:87 | 4382 | utilitas untuk sistem berkas XFS. (SGI: IRIX)
`ntfs-3g` | V:201, I:512 | 1501 | baca/tulis sistem berkas NTFS (Microsoft: Windows NT, …) driver untuk FUSE.
`jfsutils` | V:0.4, I:6.9 | 1104 | utilitas untuk sistem berkas JFS. (IBM: AIX, OS/2)
`xorriso` | V:14, I:64 | 378 | utilitas untuk sistem berkas ISO-9660 dan penulisan CD/DVD dari libburnia
`wodim` | V:7, I:89 | 898 | alat penulisan CD/DVD baris perintah dari cdrkit
`genisoimage` | V:17, I:160 | 1567 | alat sistem berkas ISO-9660 baris perintah dari cdrkit
`reiser4progs` | V:0.1, I:1.2 | 1367 | utilitas untuk sistem berkas Reiser4
`hfsprogs` | V:0.3, I:3.2 | 394 | utilitas untuk sistem berkas HFS dan HFS Plus. (Apple: Mac OS)
`zerofree` | V:7, I:120 | 30 | program mengisi dengan nol blok bebas dari sistem berkas ext2/3/4

| Tip

Sistem berkas Ext4 adalah sistem berkas baku untuk sistem Linux dan sangat disarankan untuk menggunakannya kecuali Anda memiliki beberapa alasan khusus untuk tidak melakukannya.

Status Btrfs dapat ditemukan di wiki Debian tentang btrfs dan wiki kernel.org tentang btrfs. Hal ini diharapkan menjadi sistem berkas baku berikutnya setelah sistem berkas ext4.

Beberapa alat memungkinkan akses ke sistem berkas tanpa dukungan kernel Linux (lihat Bagian 9.8.2, “Memanipulasi berkas tanpa mengait disk”).

### 9.6.6. Pembuatan sistem berkas dan pemeriksaan integritas

Perintah mkfs(8) membuat sistem berkas pada sistem Linux. Perintah fsck(8) menyediakan pemeriksaan integritas dan perbaikan sistem berkas pada sistem Linux.

Debian sekarang membakukan untuk tidak ada `fsck` periodik setelah pembuatan sistem berkas.

| Perhatian
Umumnya tidak aman untuk menjalankan `fsck` pada sistem berkas yang dikait.

| Tip
Anda dapat menjalankan perintah fsck(8) dengan aman pada semua sistem berkas termasuk sistem berkas root pada saat reboot dengan mengatur "`enable_periodic_fsck`" di "`/etc/mke2fs.conf`" dan cacah mount maks ke 0 menggunakan "`tune2fs -c0 /dev/nama_partisi`". Lihat mke2fs.conf(5) dan tune2fs(8). Periksa berkas di "`/var/log/fsck/`" untuk hasil perintah fsck(8) yang dijalankan dari skrip boot.

### 9.6.7. Optimalisasi sistem berkas dengan opsi mount

Konfigurasi sistem berkas statis dasar diberikan oleh "`/etc/fstab`". Misalnya,

    «file system»                   «mount point» «type» «options»    «dump» «pass»
    proc                                      /proc proc   defaults          0 0
    UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 /     ext4   errors=remount-ro 0 1
    UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none  swap   sw                0 0
    /dev/scd0                        /media/cdrom0  udf,iso9660 user,noauto  0 0

| Tip
UUID (lihat Bagian 9.6.3, “Mengakses partisi menggunakan UUID”) dapat digunakan untuk mengidentifikasi perangkat blok alih-alih nama perangkat blok normal seperti "`/dev/sda1`", "`/dev/sda2`", …

Sejak Linux 2.6.30, baku kernel adalah perilaku yang disediakan oleh opsi "`relatime`".

Lihat fstab(5) dan mount(8).

### 9.6.8. Optimasi sistem berkas melalui superblok

Karakteristik sistem berkas dapat dioptimalkan melalui superblok menggunakan perintah tune2fs(8).

- Eksekusi "`sudo tune2fs -l /dev/sda1`" menampilkan isi superblok sistem berkas pada "`/dev/sda1`".

- Eksekusi "`sudo tune2fs -c 50 /dev/sda1`" mengubah frekuensi pemeriksaan sistem bermas (eksekusi`fsck` selama boot-up) ke setiap 50 boot pada "`/dev/sda1`".

- Eksekusi "`sudo tune2fs -j /dev/sda1`" menambahkan kemampuan jurnal ke sistem berkas, yaitu konversi sistem berkas dari ext2 ke ext3 pada "`/dev/sda1`". (Lakukan ini pada sistem berkas yang tidak dikait.)

- Eksekusi "`sudo tune2fs -O extents,uninit_bg,dir_index /dev/sda1 && fsck -pf /dev/sda1`" mengubahnya dari ext3 menjadi ext4 pada "`/dev/sda1`". (Lakukan ini pada sistem berkas yang tidak dikait.)

| Tip
Meskipun bernama seperti itu, tune2fs(8) bekerja tidak hanya pada sistem berkas ext2 tetapi juga pada sistem berkas ext3 dan ext4.

### 9.6.9. Optimalisasi hard disk

| Awas
Silakan periksa perangkat keras Anda dan baca halaman man hdparm(8) sebelum bermain dengan konfigurasi hard disk karena ini mungkin cukup berbahaya bagi integritas data.

Anda dapat menguji kecepatan akses disk dari hard disk, misalnya "`/dev/sda`", dengan "`hdparm -tT /dev/sda`". Untuk beberapa hard disk yang terhubung dengan (E)IDE, Anda dapat mempercepatnya dengan "`hdparm -q -c3 -d1 -u1 -m16 /dev/sda`" dengan mengaktifkan "(E)IDE 32-bit I/O support", memfungsikan "using_dma flag", pengaturan "interrupt-unmask flag", dan pengaturan "multiple 16 sector I/O" (berbahaya!).

Anda dapat menguji fitur singgahan tulis dari hard disk, misalnya "`/dev/sda`", dengan "`hdparm -W /dev/sda`". Anda dapat menonaktifkan fitur singgahan tulisnya dengan "`hdparm -W 0 /dev/sda`".

Anda mungkin dapat membaca CDROM yang dicetak dengan buruk pada drive CD-ROM berkecepatan tinggi modern dengan memperlambatnya memakai "`setcd -x 2`".

### 9.6.10. Optimasi solid state drive

Solid state drive (SSD) terdeteksi secara otomatis sekarang.

Mengurangi akses disk yang tidak perlu untuk mencegah disk aus dengan mengait "`tmpfs`" pada path data volatil di `/etc/fstab`.

### 9.6.11. Menggunakan SMART untuk memprediksi kegagalan hard disk

Anda dapat memantau dan mencatat hard disk Anda yang patuh ke SMART dengan daemon smartd(8).

1. Aktifkan fitur SMART di BIOS.

2. Instal paket `smartmontools`.

3. Identifikasi hard disk drive Anda dengan menampilkan daftar mereka memakai df(1).

   - Mari kita asumsikan hard disk drive yang akan dipantau sebagai "`/dev/sda`".

4. Periksa keluaran "`smartctl -a /dev/sda`" untuk melihat apakah fitur SMART benar-benar diaktifkan.

   - Jika tidak, aktifkan dengan "`smartctl -s on -a /dev/sda`".

5. Fungsikan daemon smartd(8) agar berjalan dengan cara berikut.

   - jadikan bukan komentar "`start_smartd=yes`" dalam berkas "`/etc/default/smartmontools`".

   - jalankan ulang daemon smartd(8) dengan "`sudo systemctl restart smartmontools`".

| Tip
Daemon smartd(8) dapat disesuaikan dengan berkas `/etc/smartd.conf` termasuk cara diberitahu tentang peringatan.

### 9.6.12. Menentukan direktori penyimpanan sementara melalui $TMPDIR

Aplikasi biasanya membuat berkas sementara di bawah direktori penyimpanan sementara "`/tmp`". Jika "`/tmp`" tidak menyediakan ruang yang cukup, Anda dapat menentukan direktori penyimpanan sementara tersebut melalui variabel `$TMPDIR` untuk program yang berperilaku baik.

### 9.6.13. Perluasan ruang penyimpanan yang dapat digunakan melalui LVM

Untuk partisi yang dibuat pada Logical Volume Manager (LVM) (fitur Linux) pada waktu instalasi, mereka dapat diubah ukurannya dengan mudah dengan menggabungkan extent ke mereka atau memotong extent dari mereka atas beberapa perangkat penyimpanan tanpa konfigurasi ulang sistem utama.

### 9.6.14. Perluasan ruang penyimpanan yang dapat digunakan dengan memasang partisi lain

Jika Anda memiliki partisi kosong (misalnya, "`/dev/sdx`"), Anda dapat memformatnya dengan mkfs.ext4(1) dan mount(8) ke direktori di mana Anda membutuhkan lebih banyak ruang. (Anda perlu menyalin konten data asli.)

    $ sudo mv work-dir old-dir
    $ sudo mkfs.ext4 /dev/sdx
    $ sudo mount -t ext4 /dev/sdx work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

| Tip
Anda dapat mengait berkas image disk kosong (lihat Bagian 9.7.5, “Membuat berkas image disk kosong”) sebagai perangkat loop (lihat Bagian 9.7.3, “Mengait berkas image disk”). Penggunaan disk yang sebenarnya tumbuh dengan data aktual yang disimpan.

### 9.6.15. Perluasan ruang penyimpanan yang dapat digunakan dengan mengait-bind direktori lain

Jika Anda memiliki direktori kosong (misalnya,"`/path/ke/dir-kosong`") pada partisi lain dengan ruang yang dapat digunakan, Anda dapat me-mount(8) itu dengan opsi "`--bind`" ke direktori (misalnya, "`dir-kerja`") di mana Anda membutuhkan lebih banyak ruang.

    $ sudo mount --bind /path/to/emp-dir work-dir

### 9.6.16. Perluasan ruang penyimpanan yang dapat digunakan dengan mengait overlay direktori lain

Jika Anda memiliki ruang yang dapat digunakan di partisi lain (misalnya, "`/path/ke/kosong`" dan "`/path/ke/kerja`"), Anda dapat membuat direktori di dalamnya dan menumpuknya ke direktori lama (misalnya, "`/path/ke/lama`") di mana Anda memerlukan ruang menggunakan OverlayFS untuk kernel Linux 3.18 atau yang lebih baru (Debian Stretch 9.0 atau yang lebih baru).

    $ sudo mount -t overlay overlay \
      -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work

Di sini, "`/path/ke/kosong`" dan "`/path/ke/kerja`" harus berada di partisi yang mendukung RW untuk menulis di "`/path/ke/lama`".

### 9.6.17. Perluasan ruang penyimpanan yang dapat digunakan menggunakan symlink

| Perhatian
Ini adalah metode yang usang. Beberapa perangkat lunak mungkin tidak berfungsi dengan baik dengan "symlink ke direktori". Sebaliknya, gunakan pendekatan "mounting" yang dijelaskan di atas.

Jika Anda memiliki direktori kosong (misalnya, "`/path/ke/dir-kosong`") di partisi lain dengan ruang yang dapat digunakan, Anda dapat membuat symlink ke direktori dengan ln(8).

    $ sudo mv work-dir old-dir
    $ sudo mkdir -p /path/to/emp-dir
    $ sudo ln -sf /path/to/emp-dir work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

| Awas
Jangan gunakan "symlink ke direktori" untuk direktori yang dikelola oleh sistem seperti "`/opt`". Symlink semacam itu mungkin ditimpa ketika sistem ditingkatkan.

## 9.7. Image disk

Di sini, kita membahas manipulasi image disk.

### 9.7.1. Membuat berkas image disk

Berkas image disk, "`disk.img`", dari perangkat yang tidak dipasang, misalnya drive SCSI atau serial ATA kedua "`/dev/sdb`", dapat dibuat dengan salah satu cara berikut.

    # dd if=/dev/sdb of=disk.img; sync

    # cp /dev/sdb disk.img ; sync

    # cat /dev/sdb > disk.img ; sync

Image disk dari master boot record (MBR) PC tradisional (lihat Bagian 9.6.2, “Konfigurasi partisi disk”) yang berada di sektor pertama pada disk IDE utama dapat dibuat menggunakan dd(1) dengan yang berikut.

    # dd if=/dev/sda of=mbr.img bs=512 count=1
    # dd if=/dev/sda of=mbr-nopart.img bs=446 count=1
    # dd if=/dev/sda of=mbr-part.img skip=446 bs=1 count=66

- "`mbr.img`": MBR dengan tabel partisi

- "`mbr-nopart.img`": MBR tanpa tabel partisi

- "`mbr-part.img`": Tabel partisi MBR saja

Jika Anda membuat image partisi disk dari disk asli, ganti "`/dev/sda`" dengan "`/dev/sda1`" dll.

### 9.7.2. Menulis secara langsung ke disk

Berkas image disk, "`disk.img`" dapat ditulis ke perangkat yang tidak dipasang, misalnya drive SCSI kedua "`/dev/sdb`" dengan ukuran yang sesuai, dengan salah satu cara berikut.

    # dd if=disk.img of=/dev/sdb ; sync

    # cp disk.img /dev/sdb ; sync

    # cat disk.img >/dev/sdb ; sync

Demikian pula, berkas image partisi disk, "`partition.img`" dapat ditulis ke partisi yang tidak dikait, misalnya, partisi pertama dari drive SCSI kedua "`/dev/sdb1`" dengan ukuran yang cocok, memakai yang berikut ini.

    # dd if=partition.img of=/dev/sdb1 ; sync

### 9.7.3. Mengait berkas image disk

Image disk "`partition.img`" yang berisi image partisi tunggal dapat dikait dan dilepas kait dengan menggunakan perangkat loop sebagai berikut.

    # losetup --show -f partition.img
    /dev/loop0
    # mkdir -p /mnt/loop0
    # mount -t auto /dev/loop0 /mnt/loop0
    ...hack...hack...hack
    # umount /dev/loop0
    # losetup -d /dev/loop0

Ini dapat disederhanakan sebagai berikut.

    # mkdir -p /mnt/loop0
    # mount -t auto -o loop partition.img /mnt/loop0
    ...hack...hack...hack
    # umount partition.img

Setiap partisi image disk "`disk.img`" yang berisi beberapa partisi dapat dikait dengan menggunakan perangkat loop.

    # losetup --show -f -P disk.img
    /dev/loop0
    # ls -l /dev/loop0*
    brw-rw---- 1 root disk   7,  0 Apr  2 22:51 /dev/loop0
    brw-rw---- 1 root disk 259, 12 Apr  2 22:51 /dev/loop0p1
    brw-rw---- 1 root disk 259, 13 Apr  2 22:51 /dev/loop0p14
    brw-rw---- 1 root disk 259, 14 Apr  2 22:51 /dev/loop0p15
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/loop0p1
    # umount /dev/loop0p15
    # losetup -d /dev/loop0

Atau, efek serupa dapat dilakukan dengan menggunakan device mapper yang dibuat oleh kpartx(8) dari paket `kpartx` sebagai berikut.

    # kpartx -a -v disk.img
    add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
    add map loop0p14 (253:1): 0 6144 linear 7:0 2048
    add map loop0p15 (253:2): 0 253952 linear 7:0 8192
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # ls -l /dev/mapper/
    total 0
    crw------- 1 root root 10, 236 Apr  2 22:45 control
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p1 -> ../dm-0
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p14 -> ../dm-1
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p15 -> ../dm-2
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/mapper/loop0p1
    # umount /dev/mapper/loop0p15
    # kpartx -d disk.img

### 9.7.4. Membersihkan berkas image disk

Sebuah berkas image disk, "`disk.img`" dapat dibersihkan dari semua berkas yang dihapus menjadi image sparse bersih "`new.img`" dengan berikut.

    # mkdir old; mkdir new
    # mount -t auto -o loop disk.img old
    # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G
    # mount -t auto -o loop new.img new
    # cd old
    # cp -a --sparse=always ./ ../new/
    # cd ..
    # umount new.img
    # umount disk.img

Jika "`disk.img`" berada dalam ext2, ext3, atau ext4, Anda juga dapat menggunakan zerofree(8) dari paket `zerofree` sebagai berikut.

    # losetup --show -f disk.img
    /dev/loop0
    # zerofree /dev/loop0
    # cp --sparse=always disk.img new.img
    # losetup -d /dev/loop0

### 9.7.5. Membuat berkas image disk kosong

Image disk kosong "`disk.img`" yang dapat tumbuh hingga 5GiB dapat dibuat menggunakan dd(1) sebagai berikut.

    $ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

Alih-alih menggunakan dd(1), fallocate(8) yang khusus dapat digunakan di sini.

Anda dapat membuat sistem berkas ext4 pada image disk "`disk.img`" ini menggunakan perangkat loop sebagai berikut.

    # losetup --show -f disk.img
    /dev/loop0
    # mkfs.ext4 /dev/loop0
    ...hack...hack...hack
    # losetup -d /dev/loop0
    $ du  --apparent-size -h disk.img
    5.0G  disk.img
    $ du -h disk.img
    83M disk.img

Untuk "`disk.img`", ukuran berkasnya adalah 5,0 GiB dan penggunaan disk yang sebenarnya hanya 83MiB. Perbedaan ini dimungkinkan karena ext4 dapat menyimpan berkas sparse.

| Tip
Penggunaan disk sebenarnya dari berkas sparse tumbuh dengan data yang ditulis ke sana.

Menggunakan operasi serupa pada perangkat yang dibuat oleh perangkat loop atau device mapper sebagai Bagian 9.7.3, “Mengait berkas image disk”, Anda dapat mempartisi image disk "`disk.img`" ini menggunakan parted(8) atau fdisk(8), dan dapat membuat sistem berkas di atasnya menggunakan mkfs.ext4(8), mkswap(8), dll.

### 9.7.6. Membuat berkas image ISO9660

| Tip
Baik genisoimage(1) yang disediakan oleh cdrkit maupun xorrisofs(1) yang disediakan oleh Libburnia berbagi sintaks perintah yang sama kecuali nama perintahnya.

Berkas image ISO9660, "`cd.iso`", dari pohon direktori sumber di "`direktori_sumber`" dapat dibuat menggunakan genisoimage(1) yang disediakan oleh cdrkit dengan berikut.

    #  genisoimage -r -J -T -V volume_id -o cd.iso source_directory

Demikian pula, berkas image ISO9660 yang dapat di-boot, "`cdboot.iso`", dapat dibuat dari pohon direktori mirip `debian-installer` di "`direktori_sumber`" dengan berikut.

    #  genisoimage -r -o cdboot.iso -V volume_id \
       -b isolinux/isolinux.bin -c isolinux/boot.cat \
       -no-emul-boot -boot-load-size 4 -boot-info-table source_directory

Di sini boot loader Isolinux (lihat Bagian 3.1.2, “Tahap 2: boot loader”) digunakan untuk boot.

Anda dapat menghitung nilai md5sum dan membuat image ISO9660 langsung dari perangkat CD-ROM sebagai berikut.

    $ isoinfo -d -i /dev/cdrom
    CD-ROM is in ISO 9660 format
    ...
    Logical block size is: 2048
    Volume size is: 23150592
    ...
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso

| Awas
Anda harus hati-hati menghindari kutu read ahead sistem berkas ISO9660 Linux seperti di atas untuk mendapatkan hasil yang tepat.

### 9.7.7. Menulis secara langsung ke CD/DVD-R/RW

| Tip
DVD hanyalah CD berukuran besar bagi wodim(1) yang disediakan oleh cdrkit dan xorrecord(1) yang disediakan oleh Libburnia. Perintah-perintah ini berbagi sintaks perintah yang sama kecuali nama perintahnya.

Anda dapat menemukan perangkat yang dapat digunakan dengan berikut ini.

    # wodim --devices

Kemudian CD-R kosong dimasukkan ke drive CD, dan berkas image ISO9660, "`cd.iso`" ditulis ke perangkat ini, misalnya, "`/dev/sda`", menggunakan wodim(1) dengan berikut ini.

    # wodim -v -eject dev=/dev/sda cd.iso

Jika CD-RW digunakan alih-alih CD-R, lakukan ini sebagai gantinya dengan yang berikut ini.

    # wodim -v -eject blank=fast dev=/dev/sda cd.iso

| Tip
Jika sistem desktop Anda mengait CD secara otomatis, lepas kaitnya dengan "`sudo umount /dev/sda`" dari konsol sebelum menggunakan wodim(1).

### 9.7.8. Mengait berkas image ISO9660

Jika "`cd.iso`" berisi image ISO9660, maka berikut ini secara manual mengaitnya ke "`/cdrom`".

    # mount -t iso9660 -o ro,loop cd.iso /cdrom

| Tip
Sistem desktop modern dapat mengait media lepasan seperti CD terformat ISO9660 secara otomatis (lihat Bagian 10.1.7, “Perangkat penyimpanan lepasan”).

## 9.8. Data biner

Di sini, kita membahas manipulasi langsung data biner pada media penyimpanan.

### 9.8.1. Melihat dan menyunting data biner

Metode tampilan data biner yang paling dasar adalah dengan menggunakan perintah "`od -t x1`".

Tabel 9.21. Daftar paket yang menampilkan dan menyunting data biner

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`coreutils` | V:911, I:1000 | 17994 | paket dasar yang memiliki od(1) untuk mencurah berkas (HEX, ASCII, OCTAL, …)
`bsdmainutils` | V:4, I:136 | 17 | paket utilitas yang memiliki hd(1) untuk mencurah berkas (HEX, ASCII, OCTAL, …)
`hexedit` | V:0.8, I:7.9 | 70 | editor dan penampil biner (HEKSA, ASCII)
`bless` | V:0.2, I:1.4 | 924 | editor heksadesimal berfitur lengkap (GNOME)
`okteta` | V:1, I:12 | 1589 | editor heksadesimal berfitur lengkap (KDE4)
`ncurses-hexedit` | V:0.1, I:1.2 | 130 | editor dan penampil biner (HEKSA, ASCII, EBCDIC)
`beav` | V:0.04, I:0.32 | 137 | editor dan penampil biner (HEKSA, ASCII, EBCDIC, OKTAL, …)

| Tip
HEX digunakan sebagai akronim untuk format heksadesimal dengan basis 16. OCTAL adalah untuk format oktal dengan basis 8. ASCII adalah untuk American Standard Code for Information Interchange, yaitu kode teks bahasa Inggris normal. EBCDIC adalah untuk Extended Binary Coded Decimal Interchange Code yang digunakan pada sistem operasi mainframe IBM.

### 9.8.2. Memanipulasi berkas tanpa mengait disk

Ada alat untuk membaca dan menulis berkas tanpa mengait disk.

Tabel 9.22. Daftar paket untuk memanipulasi berkas tanpa mengait disk

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`mtools` | V:7, I:53 | 400 | utilitas untuk berkas MSDOS tanpa mengaitnya
`hfsutils` | V:0.2, I:2.7 | 178 | utilitas untuk berkas HFS dan HFS+ tanpa mengait mereka

### 9.8.3. Redundansi data

Sistem RAID perangkat lunak yang ditawarkan oleh kernel Linux menyediakan redundansi data di tingkat sistem berkas kernel untuk mencapai tingkat keandalan penyimpanan yang tinggi.

Ada alat untuk menambahkan redundansi data ke berkas di tingkat program aplikasi untuk mencapai tingkat keandalan penyimpanan yang tinggi juga.

Tabel 9.23. Daftar alat untuk menambahkan redundansi data ke berkas

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`par2` | V:9, I:116 | 297 | Parity Archive Volume Set, untuk memeriksa dan memperbaiki berkas
`dvdisaster` | V:0.1, I:1.2 | 1422 | perlindungan kehilangan data/goresan/penuaan untuk media CD/DVD
`dvbackup` | V:0.01, I:0.03 | 413 | alat cadangan menggunakan camcorder MiniDV (menyediakan rsbep(1))

### 9.8.4. Pemulihan berkas data dan analisis forensik

Ada alat untuk pemulihan berkas data dan analisis forensik.

Tabel 9.24. Daftar paket untuk pemulihan berkas data dan analisis forensik

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`testdisk` | V:2, I:25 | 2275 | utilitas untuk pemindaian partisi dan pemulihan disk
`magicrescue` | V:0.2, I:1.7 | 257 | utilitas untuk memulihkan berkas dengan mencari byte ajaib
`scalpel` | V:0.2, I:2.2 | 89 | frugal, pemahat berkas berkinerja tinggi
`myrescue` | V:0.2, I:1.8 | 81 | menyelamatkan data dari harddisk yang rusak
`extundelete` | V:0.5, I:7.3 | 152 | utilitas untuk membatalkan penghapusan berkas pada sistem berkas ext3/4
`ext4magic` | V:0.3, I:3.4 | 235 | utilitas untuk membatalkan penghapusan berkas pada sistem berkas ext3/4
`ext3grep` | V:0.2, I:1.8 | 299 | alat untuk membantu memulihkan berkas yang dihapus pada sistem berkas ext3
`scrounge-ntfs` | V:0.2, I:1.5 | 49 | program pemulihan data untuk sistem berkas NTFS
`gzrt` | V:0.03, I:0.47 | 34 | toolkit pemulihan gzip
`sleuthkit` | V:2, I:25 | 1119 | alat untuk analisis forensik. (Sleuthkit)
`autopsy` | V:0.2, I:1.1 | 1026 | antarmuka grafis ke SleuthKit
`foremost` | V:0.4, I:4.0 | 102 | aplikasi forensik untuk memulihkan data
`guymager` | V:0.13, I:0.75 | 1049 | alat pembuatan citra forensik berbasis Qt
`dcfldd` | V:0.3, I:2.7 | 113 | versi `dd` yang disempurnakan untuk forensik dan keamanan

| Tip
Anda dapat membatalkan penghapusan berkas pada sistem berkas ext2 menggunakan perintah `list_deleted_inodes` dan `undel` dari debugfs(8) dalam paket `e2fsprogs`.

### 9.8.5. Memecah sebuah berkas besar menjadi berkas-berkas kecil

Ketika data terlalu besar untuk dicadangkan sebagai satu berkas, Anda dapat membuat cadangan kontennya setelah membaginya menjadi, misalnya potongan 2000MiB dan menggabungkan potongan-potongan itu kembali ke berkas asli nanti.

    $ split -b 2000m large_file
    $ cat x* >large_file

| Perhatian
Pastikan Anda tidak memiliki berkas yang dimulai dengan "`x`" untuk menghindari crash nama.

### 9.8.6. Menghapus konten berkas

Untuk menghapus isi berkas seperti berkas log, jangan gunakan rm(1) untuk menghapus berkas dan kemudian membuat berkas kosong baru, karena berkas mungkin masih diakses dalam interval antara perintah. Berikut ini adalah cara yang aman untuk menghapus isi berkas.

    $ :>file_to_be_cleared

### 9.8.7. Berkas dummy

Perintah berikut membuat berkas dummy atau kosong.

    $ dd if=/dev/zero    of=5kb.file bs=1k count=5
    $ dd if=/dev/urandom of=7mb.file bs=1M count=7
    $ touch zero.file
    $ : > alwayszero.file

Anda harus menemukan berkas berikut.

- "`5kb.file`" adalah nol sebanyak 5KB.

- "`7mb.file`" adalah 7MB data acak.

- "`zero.file`" mungkin suatu berkas 0 byte. Jika ada, `mtime`-nya diperbarui sedangkan konten dan panjangnya dipertahankan.

- "`alwayszero.file`" selalu merupakan berkas 0 byte. Jika ada, `mtime`-nya diperbarui dan kontennya diatur ulang.

### 9.8.8. Menghapus seluruh hard disk

Ada beberapa cara untuk menghapus data sepenuhnya dari seluruh perangkat seperti hard disk, misalnya USB flash drive di "`/dev/sda`".

| Perhatian
Periksa lokasi USB flash drive Anda dengan mount(8) terlebih dahulu sebelum menjalankan perintah di sini. Perangkat yang ditunjuk oleh "`/dev/sda`" mungkin adalah hard disk SCSI atau hard disk serial-ATA tempat seluruh sistem Anda berada.

Hapus semua konten disk dengan mengatur ulang data ke 0 dengan yang berikut ini.

    # dd if=/dev/zero of=/dev/sda

Hapus semuanya dengan menimpa dengan data acak sebagai berikut.

    # dd if=/dev/urandom of=/dev/sda

Hapus semuanya dengan menimpa dengan data acak dengan sangat efisien sebagai berikut.

    # shred -v -n 1 /dev/sda

Anda dapat menggunakan `badblocks` (8) dengan opsi `-t random`.

Karena dd(1) tersedia dari shell dari banyak CD Linux bootable seperti Debian installer CD, Anda dapat menghapus sistem terpasang Anda sepenuhnya dengan menjalankan perintah menghapus dari media tersebut pada sistem hard disk, misalnya, "`/dev/sda`", "`/dev/sda`", dll.

### 9.8.9. Menghapus area hard disk yang tidak terpakai

Area yang tidak digunakan pada hard disk (atau USB flash drive), misalnya "`/dev/sdb1`" mungkin masih mengandung data yang telah dihapus karena data tersebut hanya dihapus tautannya dari sistem berkas. Data-data ini dapat dibersihkan dengan menimpanya.

    # mount -t auto /dev/sdb1 /mnt/foo
    # cd /mnt/foo
    # dd if=/dev/zero of=junk
    dd: writing to `junk': No space left on device
    ...
    # sync
    # umount /dev/sdb1

| Awas
Ini biasanya sudah cukup untuk USB flash drive Anda. Namun ini tidak sempurna. Sebagian besar nama berkas yang dihapus dan atributnya mungkin tersembunyi dan tetap ada di dalam sistem berkas.

### 9.8.10. Membatalkan penghapusan berkas yang dihapus tapi masih terbuka

Bahkan jika Anda secara tidak sengaja menghapus suatu berkas, selama berkas itu masih digunakan oleh beberapa aplikasi (mode baca atau tulis), adalah mungkin untuk memulihkan berkas tersebut.

Misalnya, coba yang berikut ini

    $ echo foo > bar
    $ less bar
    $ ps aux | grep ' less[ ]'
    bozo    4775  0.0  0.0  92200   884 pts/8    S+   00:18   0:00 less bar
    $ rm bar
    $ ls -l /proc/4775/fd | grep bar
    lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -l
    -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar
    $ cat bar
    foo

Jalankan pada terminal lain (ketika Anda memiliki paket `lsof`) sebagai berikut.

    $ ls -li bar
    2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar
    $ rm bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -li bar
    2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar
    $ cat bar
    foo

### 9.8.11. Mencari semua hardlink

Berkas dengan hardlink dapat diidentifikasi dengan "`ls -li`".

    $ ls -li
    total 0
    2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo

Baik "`baz`" dan "`foo`" memiliki cacah tautan "2" (>1) yang menunjukkan bahwa mereka memiliki hardlink. Nomor inoda mereka adalah sama-sama "2738404". Ini berarti mereka adalah berkas yang sama yang di-hardlink. Jika Anda tidak kebetulan menemukan semua berkas yang di-hardlink secara kebetulan, Anda dapat mencarinya dengan inode, misalnya, "2738404" sebagai berikut.

    # find /path/to/mount/point -xdev -inum 2738404

### 9.8.12. Konsumsi ruang disk yang tak terlihat

Semua berkas yang dihapus tetapi terbuka mengkonsumsi ruang disk meskipun tidak terlihat dari du(1) normal. Mereka dapat ditampilkan daftarnya dengan ukuran mereka dengan berikut.

    # lsof -s -X / |grep deleted

## 9.9. Tips enkripsi data

Dengan akses fisik ke PC Anda, siapa pun dapat dengan mudah mendapatkan hak istimewa root dan mengakses semua berkas di PC Anda (lihat Bagian 4.6.4, “Mengamankan kata sandi root”). Ini berarti bahwa sistem kata sandi masuk tidak dapat mengamankan data pribadi dan sensitif Anda terhadap kemungkinan pencurian PC Anda. Anda harus menerapkan teknologi enkripsi data untuk melakukannya. Meskipun GNU privacy guard (lihat Bagian 10.3, “Infrastruktur keamanan data”) dapat mengenkripsi berkas, dibutuhkan beberapa upaya pengguna.

Dm-crypt memfasilitasi enkripsi data otomatis melalui modul kernel Linux asli dengan upaya pengguna minimal menggunakan device-mapper.

Tabel 9.25. Daftar utilitas enkripsi data

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`cryptsetup` | V:35, I:78 | 462 | utilitas untuk perangkat blok terenkripsi (dm-crypt / LUKS)
`cryptmount` | V:1.9, I:2.5 | 236 | utilitas untuk perangkat blok terenkripsi (dm-crypt / LUKS) dengan fokus pada mount/unmount oleh pengguna normal
`fscrypt` | V:0.4, I:1.1 | 6545 | utilitas untuk enkripsi sistem berkas Linux (fscrypt)
`libpam-fscrypt` | V:0.27, I:0.34 | 6594 | Modul PAM untuk enkripsi sistem berkas Linux (fscrypt)

| Perhatian
Enkripsi memakan waktu CPU dll. Data terenkripsi menjadi tidak dapat diakses jika kata sandinya hilang. Tolong pertimbangkan manfaat dan biayanya.

| Catatan
Seluruh sistem Debian dapat dipasang pada disk terenkripsi oleh debian-installer (lenny atau yang lebih baru) menggunakan dm-crypt/LUKS dan initramfs.

| Tip
Lihat Bagian 10.3, “Infrastruktur keamanan data” untuk utilitas enkripsi ruang pengguna: GNU Privacy Guard.

### 9.9.1. Enkripsi disk lepasan dengan dm-crypt/LUKS

Anda dapat mengenkripsi isi perangkat massal yang dapat dilepas, misalnya USB flash drive di "`/dev/sdx`", menggunakan dm-crypt/LUKS. Cukup format dengan cara berikut.

    # fdisk /dev/sdx
    ... "n" "p" "1" "return" "return" "w"
    # cryptsetup luksFormat /dev/sdx1
    ...
    # cryptsetup open /dev/sdx1 secret
    ...
    # ls -l /dev/mapper/
    total 0
    crw-rw---- 1 root root  10, 60 2021-10-04 18:44 control
    lrwxrwxrwx 1 root root       7 2021-10-04 23:55 secret -> ../dm-0
    # mkfs.vfat /dev/mapper/secret
    ...
    # cryptsetup close secret

Kemudian, dapat dikait seperti biasa pada "`/media/nama_pengguna/label_disk`", kecuali untuk menanyakan kata sandi (lihat Bagian 10.1.7, “Perangkat penyimpanan lepasan” ) di bawah lingkungan desktop modern menggunakan paket `udisks2`. Perbedaannya adalah bahwa setiap data yang ditulis padanya dienkripsi. Entri kata sandi dapat diotomatisasi menggunakan keyring (lihat Bagian 10.3.6, “Ring kunci kata sandi”).

Anda dapat juga memformat media dalam sistem berkas yang berbeda, misalnya, ext4 dengan "`mkfs.ext4 /dev/mapper/sdx1`". Jika btrfs digunakan sebagai gantinya, paket `udisks2-btrfs` perlu dipasang. Untuk sistem berkas ini, kepemilikan dan izin berkas mungkin perlu dikonfigurasi.

### 9.9.2. Mengait disk terenkripsi dengan dm-crypt/LUKS

Misalnya, partisi disk terenkripsi yang dibuat dengan dm-crypt/LUKS pada "`/dev/sdc5`" oleh Debian Installer dapat dikait ke "`/mnt`" sebagai berikut:

    $ sudo cryptsetup open /dev/sdc5 ninja --type luks
    Enter passphrase for /dev/sdc5: ****
    $ sudo lvm
    lvm> lvscan
      inactive          '/dev/ninja-vg/root' [13.52 GiB] inherit
      inactive          '/dev/ninja-vg/swap_1' [640.00 MiB] inherit
      ACTIVE            '/dev/goofy/root' [180.00 GiB] inherit
      ACTIVE            '/dev/goofy/swap' [9.70 GiB] inherit
    lvm> lvchange -a y /dev/ninja-vg/root
    lvm> exit
      Exiting.
    $ sudo mount /dev/ninja-vg/root /mnt

## 9.10. Kernel

Debian mendistribusikan kernel Linux modular sebagai paket untuk arsitektur yang didukung.

Jika Anda membaca dokumentasi ini, Anda mungkin tidak perlu mengkompilasi kernel Linux sendiri.

### 9.10.1. Parameter kernel

Banyak fitur Linux dapat dikonfigurasi melalui parameter kernel sebagai berikut.

- Parameter kernel yang diinisialisasi oleh bootloader (lihat Bagian 3.1.2, “Tahap 2: boot loader”)

- Parameter kernel diubah oleh sysctl(8) saat runtime untuk yang dapat diakses melalui sysfs (lihat Bagian 1.2.12, “procfs dan sysfs”)

- Parameter modul yang ditetapkan oleh argumen modprobe(8) ketika modul diaktifkan (lihat Bagian 9.7.3, “Mengait berkas image disk”)

Lihat "Panduan pengguna dan administrator kernel Linux » Parameter baris perintah kernel" untuk detailnya.

### 9.10.2. Header kernel

Sebagian besar program normal tidak memerlukan header kernel dan pada kenyataannya dapat rusak jika Anda menggunakannya secara langsung untuk kompilasi. Mereka harus dikompilasi terhadap header di "`/usr/include/linux`" dan "`/usr/include/asm`" yang disediakan oleh paket `libc6-dev` (dibuat dari paket sumber `glibc`) pada sistem Debian.

| Catatan
Untuk mengompail beberapa program kernel-spesifik seperti modul kernel dari sumber eksternal dan daemon automounter (`amd`), Anda harus menyertakan path ke header kernel yang sesuai, misalnya "`-I/usr/src/linux-particular-version/include/`", ke baris perintah Anda.

### 9.10.3. Mengompail kernel dan modul terkait

Debian memiliki metode sendiri untuk mengompail kernel dan modul terkait.

Tabel 9.26. Daftar paket kunci yang akan dipasang untuk rekompilasi kernel pada sistem Debian

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`build-essential` | V:16, I:511 | 17 | paket penting untuk membangun paket Debian: `make`, `gcc`, …
`bzip2` | V:163, I:972 | 113 | utilitas kompresi dan dekompresi untuk berkas bz2
`libncurses5-dev` | I:36 | 6 | pustaka dan dokumen pengembang untuk ncurses
`git` | V:406, I:616 | 50972 | git: sistem kontrol revisi terdistribusi yang digunakan oleh kernel Linux
`fakeroot` | V:31, I:513 | 224 | menyediakan lingkungan fakeroot untuk membangun paket sebagai non-root
`initramfs-tools` | V:465, I:988 | 49 | alat untuk membangun initramfs (spesifik Debian)
`dkms` | V:79, I:147 | 235 | dynamic kernel module support (DKMS) (generik)
`module-assistant` | V:1, I:13 | 395 | alat pembantu untuk membuat paket modul (spesifik Debian)
`devscripts` | V:5, I:32 | 2763 | skrip pembantu untuk pengelola Paket Debian (spesifik Debian)

Jika Anda menggunakan `initrd` dalam Bagian 3.1.2, “Tahap 2: boot loader”, pastikan untuk membaca informasi terkait dalam initramfs-tools(8), update-initramfs(8), mkinitramfs(8), dan initramfs.conf(5).

| Awas
Jangan menempatkan symlink ke direktori di pohon sumber (misalnya "`/usr/src/linux*`") dari "`/usr/include/linux`" dan "`/usr/include/asm`" saat mengompail sumber kernel Linux. (Beberapa dokumen usang menyarankan ini.)

| Catatan

Ketika mengompail kernel Linux terbaru pada sistem `stable` Debian, penggunaan alat terbaru yang di-backport dari Debian `unstable` mungkin diperlukan.

module-assistant(8) (atau bentuk pendeknya `m-a`) membantu pengguna untuk membangun dan menginstall paket modul secara mudah untuk satu atau lebih kernel ubahan.

dynamic kernel module support (DKMS) adalah kerangka kerja independen distribusi baru yang dirancang untuk memungkinkan modul kernel individu ditingkatkan tanpa mengubah seluruh kernel. Ini digunakan untuk pemeliharaan modul di luar pohon. Ini juga membuatnya sangat mudah untuk membangun kembali modul saat Anda meningkatkan kernel.

### 9.10.4. Mengompail sumber kernel: Rekomendasi Tim Kernel Debian

Untuk membangun paket biner kernel ubahan dari sumber kernel hulu, Anda mesti memakai target "`deb-pkg`" yang disediakan olehnya.

    $ sudo apt-get build-dep linux
    $ cd /usr/src
    $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz
    $ tar --xz -xvf linux-version.tar.xz
    $ cd linux-version
    $ cp /boot/config-version .config
    $ make menuconfig
     ...
    $ make deb-pkg

| Tip
Paket linux-source-versi menyediakan sumber kernel Linux dengan patch Debian sebagai "`/usr/src/linux-versi.tar.bz2`".

Untuk membangun paket biner tertentu dari paket sumber kernel Debian, Anda harus menggunakan target "`binary-arch_arsitektur_featureset_flavour`" dalam "`debian/rules.gen`".

    $ sudo apt-get build-dep linux
    $ apt-get source linux
    $ cd linux-3.*
    $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686

Lihat informasi lebih lanjut:

- Wiki Debian: KernelFAQ

- Wiki Debian: DebianKernel

- Buku Pegangan Kernel Debian Linux: https://kernel-handbook.debian.net

### 9.10.5. Driver perangkat keras dan firmware

Driver perangkat keras adalah kode yang berjalan pada CPU utama dari sistem target. Sebagian besar driver perangkat keras tersedia sebagai perangkat lunak bebas sekarang dan termasuk dalam paket kernel Debian normal di area `main`.

- Driver GPU

  - Driver GPU Intel (`main`)

  - Driver GPU AMD/ATI (`main`)

  - Driver GPU NVIDIA (`main` untuk driver nouveau, dan `non-free` untuk driver biner saja yang didukung oleh vendor.)

Firmware adalah kode atau data yang dimuat pada perangkat yang melekat pada sistem target (misalnya, microcode CPU, kode rendering yang berjalan pada GPU, atau data FPGA / CPLD, …). Beberapa paket firmware tersedia sebagai perangkat lunak bebas tetapi banyak paket firmware tidak tersedia sebagai perangkat lunak bebas karena mengandung data biner tanpa sumber. Menginstall data firmware ini sangat penting bagi perangkat untuk berfungsi seperti yang diharapkan.

- Paket data firmware yang berisi data yang dimuat ke memori volatile pada perangkat target.

  - firmware-linux-free (`main`)

  - firmware-linux-nonfree (`non-free-firmware`)

  - firmware-linux-* (`non-free-firmware`)

  - *-firmware (`non-free-firmware`)

  - intel-microcode (`non-free-firmware`)

  - amd64-microcode (`non-free-firmware`)

- Paket program pembaruan firmware yang memperbarui data pada memori non-volatile pada perangkat target.

  - fwupd (`main`): Daemon pembaruan firmware yang mengunduh data firmware dari Linux Vendor Firmware Service.

  - gnome-firmware (`main`): Front end GTK untuk fwupd

  - plasma-discover-backend-fwupd (`main`): Front end Qt untuk fwupd

Harap diperhatikan bahwa akses ke paket `non-free-firmware` disediakan oleh media instalasi resmi untuk memberikan pengalaman instalasi fungsional kepada pengguna sejak Debian 12 Bookworm. Area `non-free-firmware` dijelaskan di Bagian 2.1.5, “Dasar-dasar arsip Debian”.

Harap perhatikan juga bahwa data firmware yang diunduh oleh fwupd dari Linux Vendor Firmware Service dan dimuat ke kernel Linux yang berjalan mungkin `non-free`.

## 9.11. Sistem tervirtualisasi

Penggunaan sistem tervirtualisasi memungkinkan kita untuk menjalankan beberapa instansi sistem secara simultan pada satu perangkat keras.

| Tip
Lihat wiki Debian tentang SystemVirtualization.

### 9.11.1. Alat virtualisasi dan emulasi

Ada beberapa platform alat virtualisasi dan emulasi.

- Paket emulasi perangkat keras lengkap seperti yang dipasang oleh metapackage game-emulator

- Sebagian besar emulasi tingkat CPU dengan beberapa emulasi perangkat I/O seperti QEMU

- Sebagian besar virtualisasi tingkat CPU dengan beberapa emulasi perangkat I/O seperti Kernel-based Virtual Machine (KVM)

- Virtualisasi kontainer tingkat OS dengan dukungan tingkat kernel seperti LXC (Linux Containers), Docker, systemd-nspawn(1), ...

- Virtualisasi akses sistem berkas tingkat OS dengan penimpaan pemanggilan pustaka sistem pada path berkas seperti chroot

- Virtualisasi akses sistem berkas tingkat OS dengan penimpaan panggilan pustaka sistem pada kepemilikan berkas seperti fakeroot

- Emulasi API OS seperti Wine

- Virtualisasi tingkat interpreter dengan pilihan yang dapat dieksekusi dan penimpaan pustaka run-time seperti virtualenv dan venv untuk Python

Virtualisasi kontainer menggunakan Bagian 4.7.5, “Fitur keamanan Linux” dan teknologi backend dari Bagian 7.7, “Sandbox”.

Berikut adalah beberapa paket untuk membantu Anda menyiapkan sistem tervirtualisasi.

Tabel 9.27. Daftar alat virtualisasi

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`coreutils` | V:911, I:1000 | 17994 | Utilitas inti GNU yang memuat chroot(8)
`util-linux` | V:917, I:1000 | 4658 | berbagai utilitas sistem yang memuat unshare(1)
`systemd-container` | V:73, I:76 | 2710 | perkakas container/nspawn systemd yang memuat systemd-nspawn(1)
`schroot` | V:6.8, I:8.8 | 2222 | alat khusus untuk mengeksekusi paket biner Debian di chroot
`sbuild` | V:1.3, I:6.4 | 154 | alat untuk membangun paket biner Debian dari sumber Debian
`debootstrap` | V:5, I:45 | 331 | mem-bootstrap sistem Debian dasar (ditulis dalam sh)
`mmdebstrap` | V:7, I:12 | 574 | mem-bootstrap sistem Debian (ditulis dalam Perl)
`cdebootstrap` | V:0.1, I:1.3 | 114 | mem-bootstrap sistem Debian (ditulis dalam C)
`cloud-image-utils` | V:1, I:14 | 66 | utilitas manajemen image cloud
`cloud-guest-utils` | V:5, I:22 | 71 | utilitas guest cloud
`virt-manager` | V:12, I:48 | 2310 | Virtual Machine Manager: aplikasi desktop untuk mengelola mesin virtual
`libvirt-clients` | V:49, I:71 | 1159 | program untuk pustaka libvirt
`docker.io` | V:48, I:50 | 81426 | docker: Runtime kontainer Linux
`podman` | V:31, I:34 | 84758 | podman: mesin untuk menjalankan kontainer berbasis OCI di dalam Pod
`podman-docker` | V:2.8, I:3.3 | 270 | mesin untuk menjalankan kontainer berbasis OCI di Pods - pembungkus untuk docker
`incus` | V:0.8, I:2.9 | 23 | Incus: kontainer sistem dan manajer mesin virtual
`games-emulator` | I:0.18 | 21 | game-emulator: Emulator Debian untuk permainan
`bochs` | V:0.07, I:0.64 | 8180 | Bochs: Emulator PC IA-32
`qemu-system` | I:21 | 61 | QEMU: biner emulasi sistem penuh
`qemu-user` | V:5.8, I:9.3 | 468923 | QEMU: biner emulasi mode pengguna
`qemu-utils` | V:14, I:108 | 12175 | QEMU: utilitas
`qemu-system-x86` | V:53, I:92 | 68056 | KVM: virtualisasi penuh pada perangkat keras x86 dengan virtualisasi yang dibantu perangkat keras
`virtualbox` | V:3.4, I:4.1 | 151566 | VirtualBox: solusi virtualisasi x86 pada i386 dan amd64
`gnome-boxes` | V:1.2, I:6.4 | 7045 | Boxes: Aplikasi GNOME sederhana untuk mengakses sistem virtual
`xen-tools` | V:0.1, I:1.5 | 719 | alat untuk mengelola server virtual XEN Debian
`wine` | V:13, I:55 | 204 | Wine: Implementasi API Windows (keluarga standar)
`dosbox` | V:1, I:12 | 2697 | DOSBox: emulator x86 dengan grafis Tandy/Herc/CGA/EGA/VGA/SVGA, suara, dan DOS
`lxc` | V:10, I:13 | 1629 | Alat ruang pengguna kontainer Linux
`python3-venv` | V:8, I:147 | 6 | venv untuk membuat lingkungan python virtual (pustaka sistem)
`python3-virtualenv` | V:7, I:39 | 374 | virtualenv untuk membuat lingkungan python virtual yang terisolasi
`pipx` | V:7, I:47 | 4409 | pipx untuk memasang aplikasi python di lingkungan yang terisolasi

Lihat artikel Wikipedia Perbandingan mesin virtual platform untuk perbandingan detail solusi virtualisasi platform yang berbeda.

### 9.11.2. Alur kerja virtualisasi

| Catatan
Kernel Debian baku mendukung KVM sejak `lenny`.

Aliran kerja umum untuk virtualisasi melibatkan beberapa langkah.

- Buat sistem berkas kosong (pohon berkas atau image disk).

  - Pohon berkas dapat dibuat oleh "`mkdir -p /path/ke/chroot`".

  - Berkas image disk mentah dapat dibuat dengan dd(1) (lihat Bagian 9.7.1, “Membuat berkas image disk” dan Bagian 9.7.5, “Membuat berkas image disk kosong”).

  - qemu-img(1) dapat digunakan untuk membuat dan mengkonversi berkas image disk yang didukung oleh QEMU.

  - Format berkas mentah dan VMDK dapat digunakan sebagai format umum di antara alat virtualisasi.

- Mount image disk dengan mount(8) ke sistem berkas (opsional).

  - Untuk berkas image disk mentah, kait itu sebagai perangkat loop atau perangkat device mapper (lihat Bagian 9.7.3, “Mengait berkas image disk”).

  - Untuk image disk yang didukung oleh QEMU, kait mereka sebagai perangkat blok jaringan (lihat Bagian 9.11.3, “Mengait berkas image disk virtual”).

- Mengisi sistem berkas target dengan data sistem yang diperlukan.

  - Penggunaan program seperti `debootstrap` dan `cdebootstrap` membantu proses ini (lihat Bagian 9.11.4, “Sistem chroot”).

  - Gunakan installer OS di bawah emulasi sistem penuh.

- Menjalankan program di bawah lingkungan yang tervirtualisasi.

  - chroot menyediakan lingkungan virtual dasar yang cukup untuk mengkompilasi program, menjalankan aplikasi konsol, dan menjalankan daemon di dalamnya.

  - QEMU menyediakan emulasi CPU lintas platform.

  - QEMU dengan KVM menyediakan emulasi sistem penuh dengan virtualisasi yang dibantu perangkat keras.

  - VirtualBox menyediakan emulasi sistem penuh pada i386 dan amd64 dengan atau tanpa virtualisasi yang dibantu perangkat keras.

### 9.11.3. Mengait berkas image disk virtual

Untuk berkas image disk mentah, lihat Bagian 9.7, “Image disk”.

Untuk berkas image disk virtual lainnya, Anda dapat menggunakan qemu-nbd(8) untuk mengekspornya menggunakan protokol perangkat blok jaringan dan memasangnya menggunakan modul kernel `nbd`.

qemu-nbd(8) mendukung format disk yang didukung oleh QEMU: mentah, qcow2, qcow, vmdk, vdi, bochs, cow (user-mode Linux copy-on-write), parallels, dmg, cloop, vpc, vvfat (virtual VFAT), dan host_device.

Perangkat blok jaringan dapat mendukung partisi dengan cara yang sama seperti perangkat loop (lihat Bagian 9.7.3, “Mengait berkas image disk”). Anda dapat mengait partisi pertama dari "`disk.img`" sebagai berikut.

    # modprobe nbd max_part=16
    # qemu-nbd -v -c /dev/nbd0 disk.img
    ...
    # mkdir /mnt/part1
    # mount /dev/nbd0p1 /mnt/part1

| Tip
Anda dapat mengekspor hanya partisi pertama dari "`disk.img`" menggunakan opsi "`-P 1`" ke qemu-nbd(8).

### 9.11.4. Sistem chroot

Jika Anda ingin mencoba lingkungan Debian baru dari konsol terminal, saya sarankan Anda untuk menggunakan chroot. Hal ini memungkinkan Anda untuk menjalankan aplikasi konsol Debian `unstable` dan `testing` tanpa risiko yang biasanya terkait dan tanpa reboot. chroot(8) adalah cara yang paling dasar.

| Perhatian
Contoh di bawah ini mengasumsikan sistem induk dan sistem chroot berbagi arsitektur CPU `amd64` yang sama.

Meskipun Anda dapat secara manual membuat lingkungan chroot(8) menggunakan debootstrap(1), ini membutuhkan upaya yang tidak sepele.

Paket sbuild untuk membangun paket Debian dari sumber menggunakan lingkungan chroot yang dikelola oleh paket schroot. Ini datang dengan skrip pembantu sbuild-createchroot(1). Mari kita pelajari cara kerjanya dengan menjalankannya sebagai berikut.

    $ sudo mkdir -p /srv/chroot
    $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
     ...

Anda melihat bagaimana debootstrap(8) mengisi data sistem untuk lingkungan `unstable` di bawah "`/srv/chroot/unstable-amd64-sbuild`" untuk sistem build minimal.

Anda dapat masuk ke lingkungan ini menggunakan schroot(1).

    $ sudo schroot -v -c chroot:unstable-amd64-sbuild

Anda melihat bagaimana shell sistem berjalan di bawah lingkungan `unstable` dibuat.

| Catatan
Berkas "`/usr/sbin/policy-rc.d`" yang selalu keluar dengan 101 mencegah program daemon dimulai secara otomatis pada sistem Debian. Lihat "`/usr/share/doc/init-system-helpers/README.policy-rc.d.gz`".

| Catatan
Beberapa program di bawah chroot mungkin memerlukan akses ke lebih banyak berkas dari sistem induk untuk berfungsi daripada yang disediakan `sbuild-createchroot` seperti di atas. Misalnya, "`/sys`", "`/etc/passwd`", "`/etc/group`", "`/var/run/utmp`", "`/var/log/wtmp`", dll mungkin perlu dikait-bind atau disalin.

| Tip
Paket `sbuild` membantu membangun sistem chroot dan membangun paket di dalam chroot menggunakan `schroot` sebagai backend-nya. Ini adalah sistem yang ideal untuk memeriksa ketergantungan build. Lihat lebih jauh tentang sbuild di Debian wiki dan contoh konfigurasi sbuild di "Panduan untuk Pemelihara Debian".

| Tip
Perintah systemd-nspawn(1) membantu menjalankan suatu perintah atau OS dalam suatu kontainer ringan dengan cara yang mirip dengan `chroot`. Itu lebih bertenaga karena itu memakai namespace untuk memvirtualisasi secara penuh pohon proses, IPC, nama host, nama domain, dan secara opsional jejaring dan basis data pengguna. Lihat systemd-nspawn.

### 9.11.5. Beberapa sistem desktop

Jika Anda ingin mencoba lingkungan Desktop GUI baru dari OS apa pun, saya sarankan Anda untuk menggunakan QEMU atau KVM pada suatu sistem Debian `stable` untuk menjalankan beberapa sistem desktop dengan aman menggunakan virtualisasi. Ini memungkinkan Anda untuk menjalankan aplikasi desktop apa pun termasuk Debian `unstable` dan `testing` tanpa risiko biasa yang terkait dengan mereka dan tanpa reboot.

Karena QEMU murni sangat lambat, disarankan untuk mempercepatnya dengan KVM ketika sistem host mendukungnya.

Virtual Machine Manager juga dikenal sebagai `virt-manager` adalah alat GUI yang nyaman untuk mengelola mesin virtual KVM melalui libvirt.

Image disk virtual "`virtdisk.qcow2`" yang berisi sistem Debian untuk QEMU dapat dibuat menggunakan debian-installer: CD kecil sebagai berikut.

    $ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
    $ qemu-img create -f qcow2 virtdisk.qcow2 5G
    $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
    ...

| Tip
Menjalankan distribusi GNU/Linux lainnya seperti Ubuntu dan Fedora di bawah virtualisasi adalah cara yang bagus untuk mempelajari tips konfigurasi. OS proprietari lainnya dapat dijalankan dengan baik di bawah virtualisasiGNU/Linux ini juga.

Lihat tips lainnya di Wiki Debian: SystemVirtualization.

[2] Contoh penyesuaian yang lebih rumit: "Vim Galore", "sensible.vim", ...

[3] vim-pathogen populer.

Bab 8. I18N dan L10N |  | Bab 10. Manajemen data