Trik keselamatan baris perintah [ditutup]

34

Baris perintah dan skrip berbahaya. Buat kesalahan ketik kecil dengan rm -rf dan Anda berada di dunia yang terluka. Bingung prod dengan tahap atas nama database saat menjalankan skrip impor dan Anda boned (jika mereka berada di server yang sama, yang tidak baik, tetapi terjadi). Sama untuk mengetahui terlambat bahwa nama server di mana Anda sshed bukan apa yang Anda pikir setelah bersenang-senang beberapa perintah. Anda harus menghormati Hole Hawg .

Saya punya beberapa ritual kecil sebelum menjalankan perintah berisiko - seperti melakukan triple take check dari server yang saya gunakan. Berikut ini adalah artikel menarik tentang keamanan rm .

Ritual, alat, dan trik kecil apa yang membuat Anda tetap aman di baris perintah? Dan maksud saya hal-hal obyektif, seperti "jalankan pertama ls foo *, lihat output dari itu dan gantikan ls dengan rm -rf untuk menghindari menjalankan rm -rf foo * atau sesuatu seperti itu", tidak "pastikan Anda tahu apa perintah akan dilakukan ".

deadprogrammer
sumber
3
+1 untuk referensi "In the Beginning was the Command Line" cryptonomicon.com/command.zip
Avery Payne
Bukankah ini pertanyaan wiki komunitas? Tidak akan ada satu jawaban yang otoritatif atau lengkap.
Bill Weiss

Jawaban:

45

Salah satu yang bekerja dengan baik adalah menggunakan warna latar belakang yang berbeda pada shell Anda untuk server prod / staging / test.

andyhky
sumber
6
Ya, dan juga gunakan teriakan merah atau oranye terang setiap kali Anda memiliki root privs.
Adam D'Amico
1
Apakah ada cara untuk secara otomatis mengatur warna terminal mesin jarak jauh menjadi berbeda dengan Anda saat login? Menggunakan Gnome - Mungkin ini harus menjadi pertanyaan terpisah.
Jona
2
Hanya memiliki pernyataan switch yang mengubah variabel PS1 Anda tergantung pada nama host mesin.
Neil
2
Untuk setiap orang Windows, ada permata ini dari Sysinternals yang akan menampilkan info host dengan jelas di wallpaper. technet.microsoft.com/en-us/sysinternals/…
squillman
Ya ya ya - sesi iSeries produksi saya sekarang berwarna putih merah untuk mencegah saya dari: opsi pwrdwnsys (* IMMED) restart (* YA)
Peter T. LaComb Jr.
14

Miliki rencana mundur sebelum Anda mulai.

  • ZIP file / direktori bukan langsung menghapusnya
  • atur router (cisco) untuk reboot dalam jumlah menit 'x' dan jangan langsung 'membungkus'
  • pastikan antarmuka yang Anda ubah bukan yang Anda masuki sistem. Ini bisa berupa antarmuka router yang Anda telnet ke atau port ethernet VNC.
  • jangan pernah login sebagai 'root'
  • buat cadangan. periksa apakah itu baik. buat yang lain.
  • tanya seseorang yang Anda percaya, "Apakah saya akan melakukan sesuatu yang bodoh di sini?"
Peter
sumber
3
+1 cisco ios tidak disimpan sampai yakin itu berfungsi. Sial saya ingat hari-hari Amiga ketika semua dialog OS memiliki "Gunakan", "Simpan" dan "Batal" - di mana "Penggunaan" hanya akan menerapkan pengaturan tetapi tidak menyimpannya untuk reboot berikutnya. Itu sangat berguna!
Oskar Duveborn
Solusi yang lebih baik hari ini saya kira adalah membatalkan yang tidak terbatas untuk semua perubahan sistem sebagai gantinya - dengan begitu Anda jauh lebih aman. Tentu saja, jika pengaturan yang Anda ubah membuat fitur fitur undo sistem tidak dapat digunakan, Anda tetap akan kacau .. hmm ^^
Oskar Duveborn
1
+1 untuk "memuat ulang 5". Menyimpan pantat saya lebih dari beberapa kali ketika perubahan ACL mengunci saya dari router / switch jarak jauh.
Greg Work
+1 untuk poin terakhir - cek kewarasan. Mudah dilakukan, dan setidaknya Anda punya dua orang yang memiliki kepentingan untuk memperbaiki masalah yang terjadi;)
Ashley
10

Saya memiliki solusi berteknologi rendah untuk beberapa di antaranya.

Saya telah mengembangkan kebiasaan untuk melakukan hal berikut (ketika berencana untuk bekerja sebagai root):

  • Pertama, masuk sebagai pengguna normal, lalu gunakan sudo su - rootuntuk beralih ke root. Saya melakukan ini sebagai persiapan mental, pengingat bagi saya bahwa saya telah secara mental berjalan ke daerah yang sangat berbahaya dan bahwa saya harus waspada dan waspada setiap saat. Lucu kedengarannya, ritual kecil ini saja telah menyelamatkan saya banyak kesedihan hanya dengan memperkuat bahwa saya tidak bisa gegabah .
  • Setiap perintah diketik tetapi tombol [Kembali] tidak pernah ditekan. Tidak pernah .
  • Tidak ada perintah yang pernah dijalankan tanpa memahami persis apa yang dilakukannya. Jika Anda melakukan ini tanpa mengetahui apa fungsinya, Anda bermain roulette Rusia dengan sistem Anda.
  • Sebelum menekan tombol [Kembali], perintah yang dibenturkan pada CLI diperiksa dengan cermat oleh mata. Jika ada keraguan, ada tanda-tanda masalah potensial, itu diperiksa kembali. Jika keraguan itu tetap ada, perintah dibiarkan di telepon dan saya alt-F2 ke konsol lain untuk berkonsultasi halaman manual, dll. Jika dalam sesi grafis, saya meluncurkan browser dan melakukan pencarian.
  • Tidak ada pengguna biasa yang pernah menyerahkan sudosistem saya, bukan karena saya seorang BOFH , tetapi karena tanpa persiapan dan pelatihan, ini seperti memberikan pistol yang dimuat ke monyet. Ini lucu dan menyenangkan pada awalnya, sampai monyet melihat ke bawah laras dan meremas ...

Saat menggunakan rm, saya selalu cdke direktori terlebih dahulu, kemudian menggunakan awalan ./untuk memastikan bahwa direktori sudah benar, yaitu

cd /usr/some/directory ; rm ./targetfile

atau saya menentukan seluruh path file

rm /usr/some/directory/targetfile

yang merupakan PITA tapi ... lebih baik aman daripada menyesal.

Avery Payne
sumber
1
Saya hanya memberikan sudo untuk daftar perintah yang dipilih sebelumnya, seperti apache2 reload. Jika tidak, pengguna harus melalui saya. Ini menyebalkan, tapi itu pertahanan terbaik untuk menjalankan devbox untuk 15 orang.
Artem Russakovskii
2
"Tapi karena tanpa persiapan dan pelatihan, ini seperti memberikan pistol yang dimuat ke monyet. Awalnya lucu dan menyenangkan, sampai monyet melihat ke bawah laras dan meremas ..." Sebenarnya, masih lucu setelah titik itu. .. hanya agak berantakan
Mikeage
Anda harus menggunakan sudo -i daripada sudo su, dan umumnya menggunakan sudo untuk menjalankan perintah tertentu sedikit lebih aman.
LapTop006
Bagaimana Anda menjalankan perintah jika Anda TIDAK PERNAH menekan tombol kembali?
g.
1
&& adalah temanmu! Daripada melakukan cd / usr / some / direktori; rm ./targetfile Anda harus cd / usr / some / direktori && rm ./targetfile Dengan cara itu Anda tidak akan pernah berakhir rm'ing targetfile di direktori asli Anda jika cd gagal. Namun, melakukan path lengkap rm lebih baik.
Mike G.
10

Yang ini khusus untuk Windows Powershell.

Sebagai kebijakan kami menambahkan berikut profil mesin.ps1 pada setiap server. Ini memastikan bahwa yang berikut ini benar:

  1. Admin powershell windows konsol memiliki warna latar belakang merah gelap
  2. Administrator ditambahkan ke judul
  3. Pesan "Peringatan: Powershell berjalan sebagai Administrator." ditulis pada saat startup
  4. Bilah judul diawali dengan "Administrator:"
  5. Utilitas standar (seperti skrip shell perusahaan, vim dan infozip) ada di jalurnya.
$ currentPrincipal = Keamanan Objek Baru.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity] :: GetCurrent ())
& {
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: Administrator))
    {
        (get-host) .UI.RawUI.Backgroundcolor = "DarkRed"
        tuan rumah yang jelas
        host-host "Peringatan: PowerShell berjalan sebagai Administrator.`n"
    }

    $ utilities = $ null
    if ([IntPtr] :: size * 8 -eq 64)
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x64)" 
        $ utilities = "$ {env: programfiles (x86)} \ Utilities"
    }
    lain
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x86)"
        $ utilities = "$ {env: programfiles} \ Utilities"
    }
    if ((Test-Path $ utilities) -and! ($ env: path -match $ utilities. Ganti ("\", "\\")))
    {
        $ env: path = "$ utilities; $ {env: path}"
    }
}

fungsi Prompt
{
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: Administrator))
    {
        if (! $ host.UI.RawUI.WindowTitle.StartsWith ("Administrator:"))
        {$ Host.UI.RawUI.WindowTitle = "Administrator:" + $ host.UI.RawUI.WindowTitle}
    }
    'PS' + $ (if ($ nestedpromptlevel -ge 1) {'>>'}) + '>'
}
Brian Reiter
sumber
Itu keren - Saya berharap Anda dapat dengan mudah melakukan hal seperti itu di linux di semua server Anda.
Jason Tan
1
Dalam powershell ini dilakukan dengan mengedit $ pshome / profile.ps1 (profil mesin). Mengapa Anda tidak dapat melakukan sesuatu yang setara di Linux di /etc/.bash_profile?
Brian Reiter
2
Juga berguna untuk mengubah $ ConfirmPreference ke "sedang" (default ke tinggi), dan lebih banyak hal akan meminta konfirmasi.
Richard
6

Saya bisa setuju dengan semua jawaban di atas tetapi saya harus menekankan tip yang sangat, sangat penting ini:

Ketahui kapan harus menghindari multitasking.

ojblass
sumber
5

Saya memastikan nama host dari sistem yang saya gunakan ada di bash (atau shell lain) prompt. Jika saya chroot, saya memastikan itu juga ada di sana.

Saya pernah menginstal sistem Gentoo dari dalam distro Linux langsung lain dan secara tidak sengaja menjalankan perintah yang agak merusak (tidak dapat mengingat apa itu ATM - beberapa varian rm) di shell yang salah, menyebabkan banyak hal pada sistem live menjadi dihapus, bukan hal-hal dari dalam chroot. Sejak saat itu, saya selalu melakukannya

export PS1="(chroot) $PS1"

setiap kali saya bekerja di chroot.

Tim
sumber
1
+1 - juga, saya merasa terbantu memiliki direktori kerja saat ini (atau lapisan n terakhir darinya, jika Anda bekerja di filesystem yang sangat bersarang) di prompt.
Murali Suriar
buku pegangan resmi Gentoo menyarankan hal itu, ketika melakukan chroot dari CD langsung ke Gentoo yang baru dibuat!
cd1
CD1: ya, tetapi panduan instalasi cepat x86 ( gentoo.org/doc/en/gentoo-x86-quickinstall.xml ) tidak, dan itulah yang saya gunakan saat itu. Tapi sekarang saya melakukannya secara refleks :)
Tim
5

Ada beberapa hal penting yang harus diperhatikan sebelum membuat perubahan server:

  • Pastikan saya berada di server yang benar

  • Waspadai ** berapa banyak orang yang akan terpengaruh oleh tindakan ini * (jika Anda melakukan kesalahan atau tidak)

  • Sebelum mengetik kunci 'enter', perhatikan kemungkinan untuk membatalkan

  • Tanyakan pada diri Anda apakah perintah ini berpotensi memutuskan sesi Anda (aturan fw, shutdown yang buruk, dll ...). Pastikan Anda memiliki kegagalan untuk kembali (khususnya jika Anda di luar kantor)

l0c0b0x
sumber
4

Jika Anda belum melakukannya alias rm to rm -i

trent
sumber
7
Tidak tidak tidak tidak. Ini adalah salah satu hal terburuk yang dapat Anda lakukan. Suatu hari Anda akan menemukan diri Anda pada sebuah kotak yang tidak memilikinya alias atau Anda entah bagaimana menghancurkan env kami. Belajarlah untuk menggunakan rm -i sebagai gantinya.
olle
Tidak tidak tidak tidak. Lakukan ini. Suatu hari Anda secara tidak sengaja akan melakukan hal yang salah dan menyelamatkan diri. Lebih sering daripada Anda akan lupa untuk meletakkan -i di telepon dan mengacaukan dan menghapus hal yang salah.
Jerub
Saya tidak akan melakukannya jika saya pernah bekerja pada lebih dari satu mesin ... Bekerja dengan mesin baru sampai set-up adalah tantangan besar.
slovon
Yang mengerikan adalah bahwa @olle dan @Jerub benar. Mungkin akan lebih pintar untuk memasang beberapa, mungkin diwarnai, bendera di PS1 yang menunjukkan 'safety off' / 'safety on' ...
ikso
4

Aturan 1 - buat cadangan

Aturan 2 - JANGAN PERNAH menambahkan pembungkus "molly guard" ke perintah standar, buat versi Anda sendiri, tentu saja, tetapi jangan mengambil alih namanya, itu hanya akan menggigit Anda saat Anda menggunakan sistem yang tidak Anda atur.

Trik cepat seperti warna yang berbeda untuk root dan pohon direktori (parsial) sangat membantu, tetapi sekali lagi, pastikan Anda dapat bekerja tanpa mereka.

LapTop006
sumber
Apa itu "penjaga molly" Saya belum pernah mendengar istilah itu sebelumnya?
Jason Tan
4

Ini mungkin tampak kontra-intuitif dan tidak terlalu sulit, tetapi tip keamanan baris perintah terbaik yang saya miliki adalah: Jika alternatif mode GUI tersedia dan praktis, maka GUNAKAN .

Mengapa? Cukup sederhana. GUI-mode biasanya memiliki jaring pengaman built-in, dalam bentuk "peringatan - Anda akan meringkuk freeblefrop, apakah Anda yakin ingin melakukan ini?" Bahkan jika tidak, itu memperlambat Anda, memberi lebih banyak ruang untuk waktu berpikir. Ini memungkinkan Anda memeriksa opsi lebih mudah sebelum berkomitmen, Anda dapat tangkapan layar sebelum dan sesudah menyatakan, melindungi Anda dari kesalahan ketik; semua hal baik, bermanfaat dan bermanfaat.

Dalam kasus klasik "rm -rf" yang ditakuti, apakah Anda pikir lebih mudah untuk secara tidak sengaja mengeluarkannya dari GUI atau CLI?

Pada akhirnya, tidak ada salahnya menggunakan GUI. Itu tidak akan sempurna mencegah bencana besar; sangat mungkin untuk menjadi pemicu-senang dalam GUI seperti halnya dalam CLI; tetapi jika itu menyelamatkan Anda setelah itu terbukti bermanfaat.

Maximus Minimus
sumber
3

Gunakan akal sehat, dan jangan jalankan perintah yang tidak Anda mengerti. Itu semua saran bagus. Jika Anda ingin menyakiti diri sendiri dengan menuliskan jalur absolut dari semua yang Anda sampaikan kepada rm, atau menjalankan apa pun melalui sudo, jangan ragu. Saya lebih suka su-c kalau begitu. Setidaknya itu tidak men-cache kata sandi. Saya tidak akan merasa nyaman dengan pengguna biasa yang diizinkan menjalankan sesuatu dengan hak akses root tanpa verifikasi kata sandi.

Ada beberapa hal yang dapat Anda letakkan di ~ / .bashrc Anda untuk membuat segalanya lebih aman, seperti:

alias srm='rm -i'

Memungkinkan Anda memiliki alternatif rm yang aman, ...

Tetapi pada akhirnya, Anda bisa dan akan selalu mengacau. Suatu hari saya memiliki skrip konfigurasikan chown yang tidak berfungsi pada seluruh folder / usr / bin saya, memecahkan beberapa hal. Ya, 'instal' sederhana dari semua jenis perangkat lunak dengan bug di dalamnya, dapat merusak sistem Anda. Anda TIDAK PERNAH aman, apa pun yang Anda lakukan. Yang saya maksudkan adalah, hal yang PALING penting:

Simpan cadangan secara teratur.

jns
sumber
2
Lagi- JANGAN PERNAH ALIAS "rm". Anda AKAN dikacaukan olehnya, pada akhirnya, ketika Anda bekerja pada sistem yang tidak memilikinya alias.
SilentW
Sebuah sangat ide yang buruk. Jika Anda pernah menemukan diri Anda pada Mac OS X (mungkin platform lain?) srmAdalah aman menghapus !
Morgant
3

Daripada aliasing rm ke rm -i, bukankah lebih baik untuk mengatakan untuk menghapus atau lebih aman (dan gunakan itu sebagai alat penghapusan pilihan Anda). Kemudian ketika Anda menggunakan kotak yang belum memiliki pengaturan ini, tidak ada kerusakan yang terjadi.

DBMarcos99
sumber
2

Pastikan Anda tidak pernah menjalankan perintah yang Anda temukan online kecuali Anda sepenuhnya memahami apa yang mereka lakukan.

Sistem Anda mungkin berbeda dari poster, dan itu bisa menyebabkan dunia terluka.

jjnguy
sumber
2

Yang jelas untuk keamanan baris perintah dari perspektif Unix / Linux adalah penggunaan akun root yang tepat.
Rm -rf sebagai root umumnya lebih berbahaya daripada sebagai pengguna, dan menggunakan hal-hal bawaan seperti sudo daripada masuk sebagai root sangat penting. Whoami sederhana yang bagus biasanya akan membantu untuk skizofrenia atau kepribadian ganda.

Itu dan menambahkan gema ke perintah pengubahan file, terutama jika Anda ingin memastikan bahwa Anda mendapatkan glob atau regex yang cocok dengan benar.

Andy
sumber
2

Memiliki koneksi sekunder ke dalam mesin yang sedang Anda kerjakan dapat berguna jika Anda membunuh sesi utama Anda, atau melakukan sesuatu yang konyol yang menguncinya ... proses yang berat dll.

Dengan begitu Anda masih memiliki akses ke mesin dan dapat membunuh sesi utama Anda.

Sebagian besar komentar di atas merujuk ke rm, tetapi saya telah melakukan beberapa hal bodoh dengan perintah lain juga ...

ifconfig untuk menghapus jaringan - aduh, itu membutuhkan kehadiran fisik untuk memperbaikinya.

Sedangkan untuk scripting saya biasanya bekerja di dua jendela. Yang pertama saya gunakan untuk menulis skrip, yang kedua untuk menguji setiap baris saat saya menulisnya. Berjalan perlahan dan hati-hati saya dapat memastikan bahwa setiap baris berfungsi seperti yang saya harapkan saat saya menulis kode, berhati-hati untuk menjaga variabel yang sama, dll.

Secara pribadi, saya tidak menemukan petunjuk tambahan untuk hal-hal seperti rm -saya sangat membantu. Saya membuat sebagian besar kesalahan saya ketika v. Lelah, stres dll, yang merupakan saat-saat ketika saya hanya akan memukul dan mengabaikan prompt. Praktek yang buruk mungkin.

Alex
sumber
2

Jika Anda menggunakan bash, coba ini:

TMOUT=600

di /root/.bashrcatau serupa Anda. Ini mengeluarkan Anda secara otomatis setelah 10 menit, mengurangi kemungkinan bahwa Anda akan beralih ke terminal root yang secara tidak sengaja Anda biarkan terbuka dan mengetik sesuatu yang bodoh.

Ya, saya tahu Anda harus menggunakan sudo untuk menjalankan perintah root - ini hanya jaring pengaman ekstra jika Anda memutuskan untuk memainkannya berisiko suatu hari.

Andrew Ferrier
sumber
2
# Allow only UPDATE and DELETE statements that specify key values
alias mysql="mysql --safe-updates"`

Alias ​​yang sangat disarankan untuk ada jika Anda pernah menggunakan CLI mysql.

jldugger
sumber
1

Alih-alih saya menggunakan gema sehingga saya bisa melihat perintah lengkap setelah shell telah memperluas segalanya. Selain itu, selalu gandakan variabel kutipan yang mewakili file sehingga barang Anda bekerja dengan nama file yang mungkin memiliki tab atau spasi.

Kyle Brandt
sumber
1

Saya menghindari *gumpalan sebagai argumennya sendiri jika memungkinkan. Bahkan jika saya benar-benar bermaksud "menghapus semua yang ada di direktori ini" saya mencoba untuk lebih spesifik, yaitu. rm *.php. Ini adalah preemptive damage control jika saya tidak sengaja menjalankan perintah yang sama dari sejarah di direktori lain.

Annika Backstrom
sumber
Saya belajar untuk tidak pernah "cd dir; rm -rf *", tetapi selalu "rm -rf dir", sespesifik mungkin.
slovon
1

Cara terbaik untuk membuat Anda berpikir tentang apa yang Anda lakukan adalah menambahkan sesuatu seperti ini ke bashrc root (cshrc, apa pun):

unset PATH

Dengan begitu, Anda harus melakukan / bin / rm bukan hanya "rm". Karakter ekstra itu mungkin membuat Anda berpikir.

Bill Weiss
sumber
OK, di mana perintah ini saya ingin jalankan? which $COMMANDtidak lagi berfungsi.
Kevin M
/ usr / bin / cari $ PERINTAH?
Bill Weiss
Bahkan lebih baik, / usr / bin / temukan -r / $ PERINTAH $
Bill Weiss
1

Untuk regex yang kompleks, terutama perintah 'find', letakkan gema di depan dan tangkap di file. Kemudian Anda dapat memeriksa apakah Anda benar-benar menghapus / memindahkan / etc apa yang Anda pikirkan sebelum menjalankan file dengan 'sumber'.

Ini juga berguna untuk secara manual menambahkan tepi case yang tidak diambil regex.

Martin Beckett
sumber
1

Sedikit meta untuk beberapa postingan lain: Saya menggunakan langkah-langkah echo / ls yang disarankan pertama kali, untuk memastikan bahwa perintahnya memilih set file yang saya inginkan atau ditafsirkan oleh shell sebagaimana dimaksud.

Tapi kemudian saya menggunakan fitur pengeditan histori perintah dari shell untuk mengambil perintah sebelumnya, dan memodifikasi hanya bagian-bagian yang perlu divariasikan.

Sama sekali tidak membantu untuk mengetik setiap perintah ini secara independen ...

$ ls *.bak
$ echo rm *.bak
$ rm * .bak

... karena saya tidak sengaja mengetik spasi di baris terakhir, dan menghapus semua file. Saya akan selalu mengambil baris sebelumnya dan cukup menghapus 'gema'.

Zac Thompson
sumber
1

pengguna root:
Jangan menjadi root kecuali Anda harus.
Jika vendor mengatakan perlu dijalankan sebagai root, beri tahu mereka bahwa Anda adalah pelanggan dan Anda ingin menjalankannya sebagai non-root.
Berapa banyak paket perangkat lunak yang ingin di-root 'hanya karena lebih mudah'?

kebiasaan:
tidak pernah menggunakan '*' dengan menghapus tanpa melihatnya tiga kali. Yang terbaik adalah membangun kebiasaan menggunakan ls-l TargetPattern , kemudian gunakan 'rm! $'. Ancaman terbesar adalah tidak berada di tempat yang menurut Anda. Saya hampir mengetik 'hostname' sesering 'ls'!

kruk:
prompt standar membantu banyak, seperti halnya alias seperti "alias rm = 'rm -i'", tapi saya sering tidak memiliki kendali penuh atas mesin yang saya gunakan sehingga saya menggunakan skrip pembungkus harapan hanya untuk mengatur jalur Anda , prompt, dan alias dengan '-i'

menemukan masalah:
menggunakan path lengkap membantu, tetapi dalam kasus di mana itu tidak mungkin, cd ke lokasi yang lebih aman dan JUGA menggunakan '&&' untuk memastikan bahwa 'cd' berhasil sebelum Anda menemukan, menghapus, tar, untar, dll:
contoh: cd /filesystema && tar cf - | ( cd /filesystemb && tar vxf -)
penggunaan '&&' dapat mencegah file tar diekstraksi dengan sendirinya dalam kasus ini (meskipun dalam kasus ini 'rsync' akan lebih baik)

menghapus:
tidak pernah menghapus secara rekursif jika Anda dapat membantu, terutama dalam skrip. temukan dan hapus dengan -type f dan -nama 'pattern' Saya masih hidup karena takut memberi makan 'nothing' to xargs ... tar dan untar untuk memindahkan barang-barang (gunakan rsync sebagai gantinya)

ericslaw
sumber
1

Jika Anda menggunakan beberapa varian dari sistem operasi, menjadi sangat menyadari perbedaan dalam sintaks; apa yang cukup aman pada satu varian unix sangat berbahaya di varian lain.

Contoh: killall

Linux / FreeBSD / OSX - membunuh semua proses yang cocok dengan parameter yang diteruskan. mis: "killall apache" membunuh semua apache, membiarkan semua proses lainnya sendirian.

Solaris - membunuh semua proses. Tidak benar-benar. Dari halaman manual : killall digunakan oleh shutdown (1M) untuk mematikan semua proses aktif yang tidak terkait langsung dengan prosedur shutdown.

Greg Work
sumber
Saya belajar bahwa di server cadangan majikan sebelumnya. Sementara itu sedang menjalankan rekaman malam itu. Ow
Bill Weiss
1
Anda bisa menggunakan pkill sebagai gantinya yang bekerja pada solaris dan linux.
Jason Tan
0

Dari pada

rm foo*

menggunakan

rm -i foo*

Ini praktis dengan beberapa file, tetapi tidak dengan, katakanlah, seluruh tarball. Itu sebabnya aliasing rmakan menghalangi Anda.

Gbarry
sumber
itulah tujuan dari -f switch: mengganti semua -i switch sebelumnya. Jika Anda memasukkan ini ke dalam skrip inisialisasi .bash_profile atau sejenisnya, Anda tidak perlu khawatir. Pastikan Anda ingin melakukan itu, tetapi sudah dikatakan sebelumnya, dan lebih fasih.
Kevin M
0

Menjalankan perintah dengan echo terlebih dahulu adalah ide yang bagus, tetapi masih rentan terhadap kesalahan ketik.

Coba gunakan dengan ekspansi seperti! $.

echo foo*
rm -rf !$

$! Diperluas ke kata terakhir dari perintah terakhir, jadi itu setara dengan

echo foo*
rm -rf foo*

Ada juga! *, Yang memperluas semua argumen ke perintah terakhir.

Memang, Anda bisa melakukannya dengan cara ini jika Anda mau

echo rm -rf foo*
!*

(Jika Anda menggunakan ksh, bukan bash, Anda dapat mengetik Esc + periode untuk memasukkan kata terakhir.)

Mikel
sumber
Esc +. bekerja di bash juga.
olle
0

Dalam hal sesuatu seperti:

ls * .php
echo rm * .php
rm * .php

Anda dapat menggunakan operator substitusi, seperti ini:
$ ls * .php
<dir listing>

$ ^ ls ^ echo rm (ini menggantikan ls di perintah sebelumnya dengan echo rm, menjaga sisa baris perintah sama)

$ ^ echo rm ^ rm (ganti echo rm hanya dengan rm, jadi Anda tidak perlu mengetik ulang * .php dan melempar spasi pada waktu yang salah)

^ = shift-6, bagi yang belum terbiasa.

Red Five
sumber
Ya Saya lebih suka menggunakan tombol panah saya dan mengedit baris sebelumnya. Dengan begitu saya bisa melihat perintah apa yang akan dijalankan ketika saya menekan Enter, bukannya membabi buta percaya diri untuk mendapatkan pola substitusi yang benar.
Marius Gedminas
Misalnya, setelah "echo rm * .php" Anda melakukan <Up><Home> <Alt-D> dan kemudian <Enter>.
Marius Gedminas
0

Gunakan bash dan atur PS1 = '\ u @ \ h: \ w>'. Ini diperluas ke nama pengguna @ hostname: / full / working / direktori / path> Seperti yang disebutkan dalam jawaban lain, Anda dapat menggunakan harapkan untuk mengatur lingkungan setiap kali Anda login jika Anda tidak dapat memperbarui file .profile atau .bash_profile. Mengganti warna latar adalah jawaban yang paling mudah :-)

dr-jan
sumber
-1

Ah iya. Trik lama mengirim seseorang file melalui IRC bernama "-rf" sehingga berakhir di direktori ~ mereka. Satu "rm-rf" kecil kemudian (alih-alih "rm --rf") dan banyak tawa terjadi ketika mereka belajar pelajaran keras tentang tidak menjalankan IRC sebagai root.

x0n
sumber
+1 untuk faktor rofl
David Z
Jadi bagaimana "rm -rf" seharusnya bisa melukaimu, eh?
kubanczyk
Mungkin file itu sebenarnya bernama "-rf *"?
Marius Gedminas
-1

Alih-alih menggunakan rm -rf <dir>menempatkan -rfdi akhir seperti: rm <dir> -rf. Anggap itu sebagai menghapus keselamatan setelah Anda mengarahkan dan sebelum Anda menembak. Dengan begitu Anda terlindungi jika Anda memiliki slip pada tombol enter saat mengetik nama direktori (atau menggunakan penyelesaian tab) dan memiliki direktori yang bernama sama.

Bintang laut
sumber