(+84) 236.3827111 ex. 402

Chống ghi đè lên file trong Linux với tùy chọn noclobber BASH Shell


Chống ghi đè lên file trong Linux với tùy chọn noclobber BASH Shell

Việc ghi đè lên file thường được thực thi bởi 1 trong 2 cách sau:

command > output.txt

command > /dev/device

Và chúng ta có thể sẽ ghi đè lên tập tin vô tình sử dụng cú pháp using > operator. Ví dụ như:

$ ls -l *.c > output.txt

Nếu file output.txt tồn tại và là một tập tin thông thường nó sẽ được ghi đè. Nếu với user root mà bạn đã gõ "command > /etc/passwd" thay vì "command < /etc/passwd". Điều này có thể là một thảm họa cho file /etc/passwd. Có lần tôi đã sử dụng > khi tôi có nghĩ là đang sử dụng >> (append).

Làm thế nào để tránh vô tình ghi đè lên của một tập tin trên shell bash?

Bạn có thể nói với bash shell không xóa tập tin dữ liệu/nội dung bởi sai lầm bằng cách thiết lập biến noclobber. Nó có thể giữ bạn vô tình xóa các tập tin hiện tại của bạn bằng cách chuyển hướng đầu vào trên một tập tin đã tồn tại.

Làm thế nào để thiết lập tùy chọn noclobber để tránh ghi đè lên các tập tin trên shell bash?

Mở Terminal và gõ lệnh sau:

$ set -o noclobber

Tạo 1 file test như sau:

$ echo "foo bar"> output.txt

Và hãy thực thi một lệnh ghi đè lên file output.txt

$ cat > output.txt

OR

ls -l > output.txt

Sample outputs:

bash: output.txt: cannot overwrite existing file

Add set -o noclobber to your ~/.bashrc file:

$ echo 'set -o noclobber' >> ~/.bashrc

Làm thế nào để tắt noclobber trên shell bash?

Gõ lệnh sau đây:

$ set +o noclobber

Using + rather than - causes these flags to be turned off.

Làm thế nào để tạm thời tắt noclobber trên shell bash?

Đôi khi bạn chỉ cần tắt noclobber cho hoạt động đơn lẻ. Sử dụng >| để bắt buộc ghi đè vô điều kiện. Ví dụ:

$ ls /etc >| output.txt

$ less output.txt

Nguồn: http://www.cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html