Perintah cd Bash: berpindah direktori, CDPATH, dan skrip
cd adalah perintah di shell Linux yang mengubah direktori kerja saat ini. Anda dapat berpindah menggunakan jalur absolut atau relatif, pindah ke direktori home tanpa argumen, atau kembali ke direktori sebelumnya dengan cd -.
cd adalah perintah bawaan shell karena perlu mengubah status shell saat ini, bukan eksekusi eksternal. Artikel ini menjelaskan navigasi jalur, penanganan tautan simbolik, CDPATH, dan penggunaan aman dalam skrip, berdasarkan Bash.
Apa itu perintah cd?
cd adalah singkatan dari change directory dan mengubah direktori kerja saat ini dari shell. Perintah yang dijalankan setelahnya dengan jalur relatif akan mencari file dan direktori berdasarkan direktori yang telah diubah.
Anda dapat memeriksa lokasi saat ini dengan pwd.
pwd
cd /var/log
pwd
Dengan menjalankan type cd, Anda dapat memastikan bahwa ini adalah perintah bawaan Bash. Jika dijalankan sebagai program terpisah, hanya direktori proses anak yang berubah dan tidak dapat memengaruhi shell induk, jadi shell mengimplementasikannya secara langsung.
Sintaks Dasar
cd [-L] [-@] [direktori]
cd -P [-e] [-@] [direktori]
Umumnya, Anda hanya perlu menentukan direktori yang akan dituju.
Contoh jalur di artikel ini adalah alternatif; nama seperti projects, /srv/app, dan ~alice harus benar-benar ada dan dapat diakses. Sesuaikan dengan direktori uji Anda dan periksa pwd sebelum mencoba contoh berikutnya.
cd /etc
cd projects
Jika perpindahan berhasil, perintah ini mengembalikan status keluar 0, dan jika jalur tidak ada atau izin tidak cukup, mengembalikan nilai bukan nol. Dalam skrip di mana keberhasilan penting, Anda harus memeriksa status keluar.
Pindah dengan Jalur Absolut dan Relatif
Menggunakan Jalur Absolut
Sebuah jalur absolut yang dimulai dari direktori root / menunjuk ke target yang sama terlepas dari lokasi saat ini.
cd /var/log
cd /usr/local/bin
cd /
Jalur absolut lebih mudah dipahami jika lokasi dasar perlu dijelaskan dalam prosedur operasi atau skrip.
Menggunakan Jalur Relatif
Jalur relatif ditafsirkan berdasarkan direktori kerja saat ini.
cd documents
cd projects/web
cd ../backup
Perintah yang sama mungkin berpindah ke direktori yang berbeda atau gagal tergantung lokasi saat ini ketika dijalankan. Jika lokasi sebelum dan sesudah berpindah penting, periksa dengan pwd.
Berpindah ke Direktori Home, Induk, dan Sebelumnya
Berpindah ke Direktori Home
Jika Anda menjalankan cd tanpa argumen, Anda akan berpindah ke direktori home pengguna yang ditentukan oleh variabel HOME. Menggunakan perluasan tilde dengan cd ~ biasanya memberikan hasil yang sama.
cd
cd ~
cd ~/Downloads
Direktori home pengguna lain dapat dirujuk sebagai ~username sesuai dengan informasi akun sistem.
Jika HOME tidak disetel, cd tanpa argumen dapat gagal. Perluasan ~ adalah langkah shell yang berbeda; Bash dapat mencari direktori home akun saat HOME tidak tersedia, jadi kedua bentuk tidak selalu setara.
cd ~alice
Anda tidak dapat berpindah ke sana jika pengguna tidak ada atau jika Anda tidak memiliki izin untuk mengakses jalur home.
Mewakili Direktori Saat Ini dan Induk
Satu titik . mewakili direktori saat ini, dan dua titik .. mewakili direktori induk.
cd .
cd ..
cd ../..
cd ../../shared
cd . biasanya tidak mengubah lokasi Anda; spasi antara perintah dan operand diperlukan. Untuk naik beberapa tingkat, gunakan ../ untuk setiap langkah. Tiga titik ... bukan bentuk standar untuk naik dua tingkat di Bash.
Kembali ke Direktori Sebelumnya dengan cd -
cd - pindah ke direktori kerja sebelumnya yang tersimpan di OLDPWD dan, jika berhasil, mencetak jalur baru.
cd /etc
cd /var/log
cd -
Ini nyaman ketika bergantian antara dua direktori. Jika informasi direktori sebelumnya belum dibuat di shell saat ini, kesalahan OLDPWD not set mungkin terjadi.
Jalur dengan spasi dan karakter khusus
Masukkan jalur dalam tanda kutip
Jalur dengan spasi harus ditempatkan dalam tanda kutip agar diteruskan sebagai satu argumen.
cd "Project Files"
cd '/srv/shared data'
Saat menggunakan variabel sebagai jalur, juga aman untuk menempatkannya dalam tanda kutip ganda untuk mencegah nilainya terpisah menjadi beberapa kata atau diperluas oleh globbing.
target='/srv/shared data'
cd -- "$target"
Backslash dan nama yang terlihat seperti opsi
Anda juga dapat meloloskan spasi dengan menempatkan backslash di depannya.
cd Project\ Files
Jika sebuah nama diawali dengan tanda hubung, lampirkan ./ atau gunakan indikator akhir opsi -- untuk mencegahnya salah dipahami sebagai opsi.
Nama tunggal - tetap bermakna direktori sebelumnya meskipun setelah --. Untuk direktori yang benar-benar bernama -, gunakan cd ./-.
cd ./-archive
cd -- -archive
Menggunakan auto-completion tab memungkinkan shell meloloskan spasi dan karakter khusus di jalur dengan benar, sehingga mengurangi kesalahan ketik.
Memahami PWD dan OLDPWD
PWD mewakili lokasi saat ini
Bash menyimpan direktori kerja baru di variabel PWD setelah perpindahan berhasil. Anda dapat membandingkannya dengan perintah pwd untuk memeriksa jalur logis yang diingat oleh shell saat ini.
printf '%s\n' "$PWD"
pwd
~+ juga digantikan dengan nilai PWD dalam ekspansi tilde Bash.
printf '%s\n' ~+
OLDPWD mewakili lokasi sebelumnya
Setelah perpindahan berhasil, direktori kerja sebelumnya disimpan di OLDPWD. cd - menggunakan nilai ini.
printf '%s\n' "$OLDPWD"
printf '%s\n' ~-
Segera setelah memulai shell atau sebelum pindah ke direktori, OLDPWD mungkin belum ada.
Tautan simbolik dan opsi -L, -P
Pada jalur yang mengandung tautan simbolik, jalur logis yang diingat oleh shell dapat berbeda dengan jalur fisik yang diselesaikan oleh sistem file.
Pertahankan jalur logis dengan -L
-L memproses .. berdasarkan komponen jalur logis dan mempertahankan nama tautan dalam PWD bila memungkinkan. Ini adalah default Bash biasa; opsi shell set -P dapat memilih perilaku fisik, sehingga gunakan opsi eksplisit saat perbedaannya penting.
cd -L /srv/current
pwd
Ini mempertahankan struktur jalur yang dimasukkan oleh pengguna, sehingga mudah dipahami saat bekerja dengan tautan proyek atau tautan rilis saat ini.
Ikuti jalur fisik dengan -P
-P mengartikan tautan simbolik sebagai jalur target fisiknya selama navigasi. Ini digunakan ketika Anda perlu memeriksa lokasi sistem file yang sebenarnya atau memproses .. berdasarkan target tautan.
cd -P /srv/current
pwd -P
Dengan -P, -e menghasilkan kegagalan jika jalur fisik tidak dapat ditentukan setelah perpindahan. Direktori mungkin sudah berubah ketika kegagalan ini terjadi; opsi tersebut tidak menjamin pengembalian otomatis ke lokasi awal.
cd -P -e /srv/current
Mencari lokasi yang sering dikunjungi dengan CDPATH
CDPATH adalah daftar direktori pencarian untuk operand relatif cd. Di Bash, operand absolut serta operand yang diawali komponen . atau .. menghindari pencarian ini. Gunakan ./nama bila direktori harus berasal dari lokasi saat ini.
Contoh pengaturan CDPATH
Coba pengaturan ini dalam shell percobaan dan tutup shell tersebut setelah selesai, agar pengaturan terminal utama tetap terjaga. Direktori sample-app harus ada pada salah satu lokasi pencarian.
CDPATH=.:~/projects:/srv/apps
export CDPATH
cd sample-app
Ini mencari sample-app di setiap lokasi yang dipisahkan oleh titik dua. Entri kosong atau . mewakili direktori saat ini. Untuk memprioritaskan direktori dengan nama yang sama di lokasi saat ini, menempatkan . terlebih dahulu mudah dipahami.
Perhatian saat menggunakan CDPATH
Jika pencarian berhasil melalui entri CDPATH yang tidak kosong, Bash mencetak jalur absolut baru. Entri . juga tidak kosong dan dapat menyebabkan keluaran ini; entri kosong mewakili direktori saat ini tanpa cetakan tambahan tersebut.
Dalam otomatisasi, gunakan jalur absolut atau jalur relatif yang jelas, dan jika perlu, hilangkan pengaruh jalur pencarian pada perintah dengan CDPATH=.
CDPATH= cd -- ./build
Jalankan perintah berikut hanya jika perubahan berhasil
Jika cd gagal tetapi perintah berikut tetap berjalan, itu dapat membuat atau menghapus file di direktori yang tidak diinginkan. Akan lebih aman untuk mengaitkan status sukses dengan operator logika.
Untuk latihan berikut, ganti /srv/app dengan jalur direktori uji yang sudah ada dan dapat ditulis. Blok ini membuat task.sh yang hanya mencetak lokasi. noclobber mencegah penimpaan file biasa yang sudah ada; jangan gunakan direktori aplikasi produksi untuk latihan.
(
set -o noclobber
cd /srv/app && {
cat > task.sh <<'EOF' || exit 1
#!/usr/bin/env bash
printf 'Direktori=%s\n' "$PWD"
EOF
chmod u+x task.sh || exit 1
./task.sh
}
)
Dalam skrip multi-baris, keluar secara eksplisit atau tangani kesalahan jika terjadi kegagalan.
cd /srv/app || {
printf '%s\n' 'Tidak dapat masuk ke direktori kerja.' >&2
exit 1
}
./task.sh
Simpan blok kedua sebagai run-task.sh dan jalankan dengan bash run-task.sh, menggunakan direktori uji yang sama. Hasil sukses berupa Direktori=...; jika perpindahan gagal, tugas tidak dijalankan. Karena menggunakan exit, jalankan sebagai skrip terpisah dan jangan muat dengan source.
Jika Anda menggunakan titik koma seperti cd path; command, perintah berikut akan dieksekusi terlepas dari apakah perubahan berhasil.
Menggunakan cd dalam skrip dan subshell
Mengapa skrip tidak dapat mengubah lokasi shell induknya
Sebuah skrip shell yang dijalankan secara normal berjalan dalam proses terpisah, sehingga cd di dalam skrip hanya mempengaruhi proses tersebut dan anak-anaknya. Setelah skrip selesai, direktori kerja terminal yang memanggilnya tetap tidak berubah.
Siapkan contoh lengkap berikut di direktori uji yang belum memiliki change-directory.sh. Skrip mencetak lokasi setelah pindah ke HOME; pwd terakhir menunjukkan bahwa shell pemanggil tetap di lokasi semula.
(
set -o noclobber
cat > change-directory.sh <<'EOF' || exit 1
#!/usr/bin/env bash
cd -- "$HOME" || exit 1
printf 'Direktori skrip=%s\n' "$PWD"
EOF
chmod u+x change-directory.sh || exit 1
./change-directory.sh
)
pwd
Baris berikut memuat file yang sama dengan source sehingga shell pemanggil sendiri berpindah. Gunakan shell percobaan, periksa dengan pwd dan kembali dengan cd - jika OLDPWD tersedia. File yang dimuat juga dapat mengubah variabel, opsi, atau mengakhiri sesi; baca isinya terlebih dahulu.
source ./change-directory.sh
Sebuah Subshell yang Menjaga Lokasi Aslinya Setelah Operasi
Untuk bekerja di direktori tertentu sambil menjaga lokasi shell pemanggil, Anda dapat membuat subshell menggunakan tanda kurung.
(
cd /srv/app && ./task.sh
)
Perubahan direktori di dalam tanda kurung akan hilang ketika subshell berakhir. Untuk berpindah dan kembali di shell saat ini, Anda juga dapat menggunakan pushd dan popd alih-alih langsung menyimpan jalur yang ada.
Mengapa sudo cd Tidak Berfungsi
sudo cd /root umumnya tidak dapat digunakan. cd adalah perintah bawaan dari shell saat ini, dan proses yang dimulai oleh sudo tidak dapat mengubah direktori kerja dari shell induk.
Jika Anda memerlukan shell administrator itu sendiri, Anda dapat memulai shell login baru sesuai dengan kebijakan izin seperti ini.
sudo -i
Dua baris berikut adalah pola alternatif untuk maintenance.sh yang benar-benar ada, sudah ditinjau, dan terlindung dari perubahan yang tidak sah. Keduanya tidak diperlukan untuk latihan navigasi. Pola pertama memerlukan pengguna saat ini dapat masuk ke direktori; pola kedua berpindah dalam shell baru yang dijalankan sudo sesuai kebijakan izin.
cd /srv/app && sudo ./maintenance.sh
sudo sh -c 'cd /srv/app && ./maintenance.sh'
Gunakan hak istimewa administrator hanya jika diperlukan dan pastikan bahwa jalur serta executable dapat dipercaya.
Perbandingan antara cd, pushd, dan popd
| Perintah | Penggunaan utama | Fitur |
|---|---|---|
cd |
Berpindah ke direktori yang ditentukan. | Anda dapat kembali ke lokasi sebelumnya menggunakan OLDPWD. |
pushd |
Berpindah sambil menyimpan lokasi saat ini di tumpukan direktori. | Berguna saat berpindah antara beberapa lokasi, dan Bash mengelola tumpukan. |
popd |
Tanpa argumen, menghapus bagian teratas tumpukan lalu pindah ke bagian teratas yang baru. | Dipadukan dengan pushd; opsi seperti -n dapat mengubah tumpukan tanpa berpindah. |
dirs |
Memeriksa tumpukan direktori saat ini. | Anda bisa menampilkan hanya keadaan tumpukan tanpa berpindah. |
Perintah pindah yang sering digunakan
| Perintah | Deskripsi |
|---|---|
cd |
Berpindah ke direktori home pengguna saat ini. |
cd ~ |
Berpindah ke direktori home menggunakan ekspansi tilde. |
cd .. |
Pindah ke direktori induk. |
cd ../.. |
Pindah ke direktori dua tingkat di atas. |
cd - |
Kembali ke direktori kerja sebelumnya. |
cd / |
Pindah ke direktori root dari sistem file. |
cd ~/projects |
Pindah ke direktori projects di bawah direktori home. |
cd -P path |
Berpindah mengikuti jalur fisik yang dihasilkan dari tautan simbolik. |
Ringkasan opsi
| Opsi | Deskripsi |
|---|---|
-L |
Menggunakan jalur logis dan memungkinkan nama tautan simbolik tetap terjaga. Default ini dapat dipengaruhi pengaturan fisik shell. |
-P |
Menafsirkan tautan simbolik sebagai jalur target fisik dan pindah ke sana. |
-e |
Digunakan dengan -P, mengembalikan status gagal jika tidak dapat menentukan jalur fisik saat ini setelah berpindah. |
-@ |
Pada sistem yang didukung, menampilkan atribut tambahan dari file seolah-olah mereka adalah direktori. Ini mungkin tidak didukung di lingkungan Linux biasa. |
-- |
Menunjukkan akhir dari opsi dan digunakan saat memperlakukan nama direktori yang diawali dengan tanda hubung sebagai argumen. |
Kesalahan Umum
Tidak ada file atau direktori seperti itu
Jalur mungkin tidak ada, atau Anda mungkin salah menafsirkan lokasi saat ini. Periksa lokasi dasar dengan pwd dan periksa sensitivitas huruf besar/kecil serta spasi dalam jalur.
pwd
ls -ld -- "target path"
Izin ditolak
Anda mungkin tidak memiliki izin eksekusi pada direktori tujuan atau direktori perantara manapun dalam jalur tersebut. Anda memerlukan izin eksekusi pada setiap direktori yang membentuk jalur untuk dapat masuk ke direktori.
namei -l /path/to/directory
Sebelum secara sembarangan meningkatkan izin, verifikasi apakah pengguna perlu mengakses jalur ini dan periksa kebijakan grup atau ACL yang sesuai.
Bukan direktori
Komponen terakhir atau komponen perantara dari jalur mungkin adalah file biasa. Periksa jenisnya dengan file dan ls -ld.
file -- "target path"
ls -ld -- "target path"
FAQ
Apakah normal jika tidak ada keluaran saat mengeksekusi perintah cd?
Ya, itu normal. cd yang berhasil ke jalur normal tidak menghasilkan output. Anda dapat memeriksa lokasi Anda saat ini dengan pwd, dan jalur yang ditemukan menggunakan cd - atau CDPATH mungkin mencetak jalur baru saat berhasil.
Bagaimana cara pindah dua tingkat ke direktori induk?
Gunakan cd ../... Setiap .. mewakili satu tingkat induk, dihubungkan dengan garis miring.
Bisakah saya mengubah direktori terminal saat ini menggunakan skrip?
Skrip yang dijalankan secara normal tidak dapat mengubah direktori shell induk. Gunakan fungsi shell atau source untuk memengaruhi shell saat ini, dengan kode tepercaya karena perubahan lain juga dapat terjadi.




