Câu trả lời:
touch
Trước tiên, tệp xác nhận rằng bạn thực sự có khả năng tạo tệp, thay vì lãng phí thời gian trong trình chỉnh sửa chỉ để biết rằng hệ thống tệp chỉ đọc hoặc một số vấn đề khác.
:w
đầu tiên sau khi bắt đầu vi
mặc dù. (và :chmod +x %
nếu bạn muốn làm cho nó có thể thực thi được)
touch
có thể thất bại ở đâu vi
's :w!
sẽ thành công mặc dù (ví dụ nếu file
tồn tại nhưng bạn không phải chủ sở hữu của nó và không có quyền ghi vào nó, trong khi bạn có quyền ghi vào thư mục hiện hành). Ngược lại, touch
có thể thành công nhưng vi
's :w
hoặc :w!
có thể thất bại nếu bạn là chủ sở hữu của tập tin, nhưng không có quyền ghi vào nó cũng không vào thư mục hiện (bạn có thể làm việc xung quanh nó với :!chmod +w %
(một số vi
triển khai như vim
có thể làm tự động khi :w!
)).
"foo" [readonly]
. Và một lần nữa khi vào chế độ chèn:Warning: Changing a readonly file.
Ngoài các câu trả lời đã cho, một ưu điểm của cảm ứng là bất kỳ người dùng / thiết bị đầu cuối nào khác chỉnh sửa cùng một tệp trong khi bạn chạm vào nó, sẽ nhận được cảnh báo khi họ cố gắng lưu bất kỳ thay đổi nào.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Điều này sẽ cảnh báo họ ngay cả khi bạn không thực hiện bất kỳ thay đổi nào và chỉ chạm vào tệp.
Ngoài câu trả lời được chấp nhận:
Điều đáng chú ý touch
là được sử dụng để cập nhật dấu thời gian của tệp. Nếu bạn sử dụng touch
trên một tệp tồn tại, thì nó sẽ cập nhật dấu thời gian của tệp thành ngày và giờ hiện tại. Nếu tệp không tồn tại, nó sẽ tạo một tệp trống với ngày và giờ hiện tại là dấu thời gian.
vi
mặt khác, không tạo một tệp mới trừ khi bạn ghi vào nó.
Ví dụ, nếu tôi gõ vi test.txt
, gõ một số ghi chú, sau đó gõ :q!
; test.txt
sẽ không tồn tại
Nếu không touch
, một tập tin mới sẽ không tồn tại cho đến khi bạn yêu vi
cầu viết nó.
Hãy xem xét một hệ thống nhiều người dùng (có lẽ bạn đang ở trên một hệ thống tệp gắn trên mạng được chia sẻ bởi nhiều hệ thống, mỗi hệ thống có nhiều người dùng). Chạy touch
sẽ đảm bảo bạn có tệp (và bạn có thể ghi vào tệp đó) và thậm chí cập nhật dấu thời gian. Một người dùng khác muốn tạo một tệp như vậy sẽ thấy rằng bạn sở hữu nó. Nếu nó đã tồn tại và một người dùng khác muốn xóa hoặc thay thế nó, họ sẽ thấy rằng nó đã được sửa đổi gần đây và có thể suy nghĩ hai lần.
Không có lợi ích để touch
ing đầu tiên; vi
sẽ tạo tập tin nếu nó không tồn tại.
Câu trả lời được chấp nhận cho biết nó kiểm tra xem bạn có thể viết ở đó trước khi lãng phí thời gian trong trình chỉnh sửa hay không. Đúng, nhưng bây giờ bạn sẽ lãng phí thời gian gõ touch
mỗi lần. Không thể viết ở đâu đó là khá đặc biệt so với tần suất nó sẽ hoạt động (miễn là bạn nhớ sudo
các tệp bên ngoài thư mục chính của bạn hoặc /tmp
, hoặc đăng nhập dưới dạng root).
Chỉ cần mở trình chỉnh sửa và làm những gì bạn muốn, sau đó cố gắng lưu tệp. Nếu nó không hoạt động, ngay cả với :w!
, hãy lưu nó ở nơi khác ( :w ~/asdf
) và khắc phục sự cố. Khi nó được sửa, bạn có thể sao chép nội dung tệp từ tệp tạm thời sang bản gốc : cat ~/asdf > /mnt/example.txt && rm ~/asdf
. Lý do chúng tôi sử dụng cat
thay vì mv
hoặc cp
là để sử dụng quyền của đích và các thuộc tính khác.
Ngoài ra, đối với một số cách sử dụng dòng lệnh nâng cao hơn, bạn có thể làm nền vi
với Ctrl+ Ztrong khi bạn khắc phục sự cố (hoặc sử dụng :suspend
hoặc :sus
) và cuối cùng fg
là chạy lại lệnh ghi.
Chỉnh sửa: bài đăng được cải thiện để phản hồi bình luận của / u / G-Man . Cảm ơn!
/mnt/example.txt
không được cho là có thể đọc được trên thế giới, nhưng ô của bạn được đặt ở mức cho phép như 22, thì /tmp/asdf
sẽ có thể đọc được trên thế giới. Nếu có người khác trên hệ thống, họ có thể đọc bản sao tạm thời của tệp. (2) Tệp /mnt/example.txt
có thể không được ghi trên thế giới, nhưng, nếu có người độc hại trên hệ thống, họ có thể đọc bản sao tạm thời của tệp và thay thế bằng phiên bản sửa đổi trước khi bạn di chuyển / sao chép nó trở lại đúng vị trí Tiết (Cont'd)
/tmp
có thể ngăn chặn điều này.) (3) Lệnh mv /tmp/asdf /mnt/example.txt
sẽ phá hủy hoàn toàn dòng điện /mnt/example.txt
và thay thế nó bằng /tmp/asdf
. Bạn muốn thay thế nội dung của /mnt/example.txt
với nội dung của /tmp/asdf
. Bằng cách sử dụng mv
, bạn thiết lập /mnt/example.txt
để có các thuộc tính giống như /tmp/asdf
- có thể thuộc sở hữu của bạn và có thể đọc được trên thế giới. Nó có thể tốt hơn cp /tmp/asdf /mnt/example.txt
hoặc thậm chí cat /tmp/asdf > /mnt/example.txt
. Tiết kiệm PS (4) Bạn có thể tạm dừng vi
bằng cách gõ :suspend
(hoặc :sus
viết tắt là).
/tmp
, nhưng không có lý do gì để không viết thư ~/
thay thế. Tôi cũng đã không nghĩ rằng nó sẽ thay thế các thuộc tính. Tôi sẽ chỉnh sửa bài viết của mình, cảm ơn :)
vi
là một trình soạn thảo văn bản trực quan (vi = visual) Dù sao nó cũng được so sánh với "ed", nó chỉ cho phép bạn xem và thay đổi một dòng văn bản một lúc.
Các touch
lệnh cập nhật các dấu thời gian trên một tập tin hiện có, hoặc tạo ra một tập tin mới nếu tập tin không tồn tại. Nó tốt cho việc kiểm tra những thứ phụ thuộc nhiều vào dấu thời gian.
Bây giờ nếu tệp của bạn là tệp văn bản hoặc chưa tồn tại, hãy mở tệp đó bằng vi, sau đó ban hành lệnh :wq
cho vi, sẽ có kết quả tương tự như chạm vào tệp đó. Đó là cách duy nhất hai lệnh tương tự nhau.
Cụ thể để sử dụng với vi
, không cần phải tạo tệp trước khi bạn chỉnh sửa tệp: vi
có thể được sử dụng để tạo và lưu tệp mới. Tuy nhiên, có các bối cảnh gọi nơi tập tin cần tồn tại. Ví dụ: trên hệ thống của tôi (OS X), tôi có thể khởi chạy trình chỉnh sửa GUI thích hợp (được xác định theo loại tệp) như sau:
open foo.txt
Điều này sẽ mở foo.txt
trong TextEdit hoặc trong emacs hoặc bất cứ điều gì tôi đã chỉ định làm trình soạn thảo lựa chọn cho các tệp văn bản và tách quy trình để tôi nhận lại lời nhắc ngay lập tức. ( open bar.py
có thể mở nó trong IDLE, trình soạn thảo python; v.v.) Hoặc tôi có thể yêu cầu rõ ràng emacs:
open -a emacs foo.txt
Nhưng open
yêu cầu tập tin tồn tại, nếu không nó sẽ gây ra lỗi. Vì vậy, tôi phải xác định emacs
là hàm shell sau, cho phép tôi viết emacs foo
để khởi chạy emacs
GUI ngay cả khi foo
không tồn tại.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
vi được sử dụng để chỉnh sửa một tệp như người dùng, trong khi cảm ứng có thể đặt dấu thời gian trên đó và chủ yếu được sử dụng trong các tập lệnh và như vậy.
Một cách khác để tạo một tập tin là:
>newfile.txt
zsh
, nó giống hệt cat >newfile.txt
và cần bạn nhấn Ctrl + D.
Theo trang của người đàn ông, công việc chính của anh ta là thay đổi dấu thời gian của tệp.
Ofc cũng đang tạo tệp với dấu thời gian hiện tại và sau đó bạn có thể chỉnh sửa tệp.
VI là trình soạn thảo văn bản thực hiện những gì nó nói chỉnh sửa văn bản mở, lưu, chỉnh sửa tệp, v.v ...
Tất cả là hương vị của người dùng và hợi: chạm vào vi hoặc vi file.txt cùng màu khác nhau.
touch
cho phép bạn thực hiệnchmod +x
sau đó, trước khi chỉnh sửa, điều này sẽ có ý nghĩa nếu bạn đang viết một#!/bin/bash
kịch bản shell.