<Trước | Nội dung | Tiếp theo>
rm: loại bỏ thư mục `lưu trữ '? y
Chúng ta sẽ thảo luận về cách đặt tùy chọn này làm mặc định trong Chương 7, thảo luận về việc tùy chỉnh môi trường shell của bạn.
3.3.3. Tìm tệp
3.3.3.1. Sử dụng các tính năng của shell
Trong ví dụ về di chuyển tệp, chúng ta đã thấy cách trình bao có thể thao tác nhiều tệp cùng một lúc. Trong ví dụ đó, shell tự động tìm ra ý của người dùng bằng các yêu cầu giữa dấu ngoặc vuông "[" và "]". Shell có thể thay thế các dải số và ký tự viết hoa hoặc viết thường như nhau. Nó cũng thay thế bao nhiêu ký tự tùy thích bằng dấu hoa thị và chỉ một ký tự bằng dấu chấm hỏi.
Tất cả các loại thay thế có thể được sử dụng đồng thời; vỏ rất hợp lý về nó. Ví dụ, Bash shell không có vấn đề gì với các biểu thức như ls dirname / * / * / * [2-3].
Trong các trình bao khác, dấu hoa thị thường được sử dụng để giảm thiểu nỗ lực nhập: mọi người sẽ nhập cd dir * thay vì cd thư mục. Tuy nhiên, trong Bash, điều này là không cần thiết vì trình bao GNU có một tính năng được gọi là hoàn thành tên tệp. Nó có nghĩa là bạn có thể nhập một vài ký tự đầu tiên của lệnh (ở bất kỳ đâu) hoặc tệp (trong thư mục hiện tại) và nếu không có sự nhầm lẫn nào có thể xảy ra, trình bao sẽ tìm ra ý bạn muốn nói. Ví dụ
trong một thư mục chứa nhiều tệp, bạn có thể kiểm tra xem có tệp nào bắt đầu bằng chữ A hay không chỉ bằng cách gõ ls A và nhấn nút Tab phím hai lần, thay vì nhấn đăng ký hạng mục thi. Nếu chỉ có một tệp bắt đầu bằng "A", tệp này sẽ được hiển thị dưới dạng đối số cho ls (hoặc bất kỳ lệnh shell nào, cho vấn đề đó) ngay lập tức.
3.3.3.2. Cái nào
Một cách rất đơn giản để tra cứu tệp là sử dụng cái nào , để tìm tệp được yêu cầu trong các thư mục được liệt kê trong đường dẫn tìm kiếm của người dùng. Tất nhiên, vì đường dẫn tìm kiếm chỉ chứa các đường dẫn đến các thư mục chứa các chương trình thực thi, cái nào không hoạt động đối với các tệp thông thường. Các cái nào lệnh rất hữu ích khi khắc phục sự cố "Không tìm thấy lệnh". Trong ví dụ dưới đây, người dùng tina không thể sử dụng acroread trong khi đồng nghiệp của cô ấy không gặp rắc rối nào trên cùng một hệ thống. Vấn đề tương tự như PATH vấn đề ở phần trước: Đồng nghiệp của Tina nói với cô ấy rằng anh ấy có thể xem chương trình được yêu cầu trong
/ opt / acroread / bin, nhưng thư mục này không có trong đường dẫn của cô ấy:
tina: ~> viết tắt nào
/ usr / bin / which: no acroread in (/ bin: / usr / bin: / usr / bin / X11)
tina: ~> viết tắt nào
/ usr / bin / which: no acroread in (/ bin: / usr / bin: / usr / bin / X11)
Vấn đề có thể được giải quyết bằng cách cung cấp đường dẫn đầy đủ cho lệnh để chạy hoặc bằng cách xuất lại nội dung của
Biến PATH:
tina: ~> xuất PATH = $ PATH: / opt / acroread / bin
tina: ~> echo $ PATH
/ bin: / usr / bin: / usr / bin / X11: / opt / acroread / bin
tina: ~> xuất PATH = $ PATH: / opt / acroread / bin
tina: ~> echo $ PATH
/ bin: / usr / bin: / usr / bin / X11: / opt / acroread / bin
Sử dụng cái nào lệnh cũng kiểm tra xem một lệnh có phải là bí danh cho một lệnh khác hay không:
chuột nhảy: ~> cái nào -a ls
ls được đặt bí danh là `ls -F --color = auto 'ls là / bin / ls
chuột nhảy: ~> cái nào -a ls
ls được đặt bí danh là `ls -F --color = auto 'ls là / bin / ls
Nếu điều này không hoạt động trên hệ thống của bạn, hãy sử dụng bí danh chỉ huy:
tille @ www: ~ / mail $ bí danh ls
bí danh ls = 'ls --color'
tille @ www: ~ / mail $ bí danh ls
bí danh ls = 'ls --color'
3.3.3.3. Tìm và xác định vị trí
Đây là những công cụ thực sự, được sử dụng khi tìm kiếm các đường dẫn khác bên cạnh những đường dẫn được liệt kê trong đường dẫn tìm kiếm. Các tìm , được biết đến từ UNIX, rất mạnh mẽ, có thể là nguyên nhân của một cú pháp hơi khó hơn. GNU tìmtuy nhiên, giải quyết các vấn đề về cú pháp. Lệnh này không chỉ cho phép bạn tìm kiếm tên tệp mà còn có thể chấp nhận kích thước tệp, ngày thay đổi lần cuối và các thuộc tính tệp khác làm tiêu chí tìm kiếm. Việc sử dụng phổ biến nhất là để tìm tên tệp:
tìm -Tên
Điều này có thể được hiểu là "Tìm trong tất cả các tệp và thư mục con chứa trong một đường dẫn nhất định, và in tên các tệp chứa chuỗi tìm kiếm trong tên của chúng" (không có trong nội dung của chúng).
Một ứng dụng khác của tìm là để tìm kiếm các tệp có kích thước nhất định, như trong ví dụ bên dưới, nơi người dùng peter
muốn tìm tất cả các tệp trong thư mục hiện tại hoặc một trong các thư mục con của nó, lớn hơn 5 MB:
peter: ~> tìm thấy . -kích thước + 5000k
Psychotic_chaos.mp3
peter: ~> tìm thấy . -kích thước + 5000k
Psychotic_chaos.mp3
Nếu bạn tìm hiểu các trang người đàn ông, bạn sẽ thấy rằng tìm cũng có thể thực hiện các hoạt động trên các tệp được tìm thấy. Một ví dụ phổ biến là xóa tệp. Tốt nhất là thử nghiệm đầu tiên mà không có -Exec tùy chọn rằng các tệp chính xác được chọn, sau đó lệnh có thể được chạy lại để xóa các tệp đã chọn. Dưới đây, chúng tôi tìm kiếm các tệp kết thúc bằng .tmp:
peter: ~> tìm thấy . -name "* .tmp" -exec rm {} \;
peter: ~>
peter: ~> tìm thấy . -name "* .tmp" -exec rm {} \;
peter: ~>
Tối ưu hóa!
Lệnh này sẽ gọi rm bao nhiêu lần khi một tệp trả lời các yêu cầu được tìm thấy. Trong trường hợp xấu nhất, điều này có thể là hàng nghìn hoặc hàng triệu lần. Đây là một tải khá nặng trên hệ thống của bạn.
Một cách làm việc thực tế hơn sẽ là sử dụng một đường ống (|) và xargs công cụ với rm như một lập luận. Theo cách này, rm lệnh chỉ được gọi khi dòng lệnh đầy, thay vì cho mọi tệp. Xem Chương 5 để biết thêm về cách sử dụng chuyển hướng I / O để dễ dàng thực hiện các công việc hàng ngày.
Sau đó (vào năm 1999 theo trang man, sau 20 năm tìm), xác định vị trí đã được phát triển. Chương trình này dễ sử dụng hơn, nhưng bị hạn chế hơn tìm, vì đầu ra của nó dựa trên cơ sở dữ liệu chỉ mục tệp chỉ được cập nhật một lần mỗi ngày. Mặt khác, tìm kiếm trong xác định vị trí cơ sở dữ liệu sử dụng ít tài nguyên hơn tìm và do đó hiển thị kết quả gần như ngay lập tức.
Hầu hết các bản phân phối Linux đều sử dụng định vị ngày nay, tính năng định vị được tăng cường bảo mật, phiên bản hiện đại của xác định vị trí điều đó ngăn người dùng nhận được đầu ra mà họ không có quyền đọc. Các tệp trong nguồn gốcthư mục chính của là một ví dụ như vậy, chúng thường không thể truy cập được đối với công chúng. Người dùng muốn tìm ai đó biết về C shell có thể ra lệnh xác định vị trí .cshrc, để hiển thị tất cả người dùng có tệp cấu hình tùy chỉnh cho C shell. Giả sử người dùng nguồn gốc và xe cần trục đang chạy C shell, sau đó chỉ có tệp
/home/jenny/.cshrc sẽ được hiển thị, và không phải là một trong nguồn gốcthư mục chính của. Trên hầu hết các hệ thống,
định vị là một liên kết tượng trưng đến chương trình slocate:
billy: ~> ls -l / usr / bin / định vị
lrwxrwxrwx 1 root slocate 7 tháng 28 14 18:XNUMX / usr / bin / location -> slocate *
billy: ~> ls -l / usr / bin / định vị
lrwxrwxrwx 1 root slocate 7 tháng 28 14 18:XNUMX / usr / bin / location -> slocate *
người sử dang tina có thể đã sử dụng xác định vị trí để tìm ứng dụng cô ấy muốn:
tina: ~> xác định vị trí acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/ usr / local / bin / acroread
/ usr / local / Acrobat4 / Reader / intellinux / bin / acroread
/ usr / local / Acrobat4 / bin / acroread
tina: ~> xác định vị trí acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/ usr / local / bin / acroread
/ usr / local / Acrobat4 / Reader / intellinux / bin / acroread
/ usr / local / Acrobat4 / bin / acroread
Thư mục không chứa tên bin không thể chứa chương trình - chúng không chứa các tệp thực thi. Có ba khả năng còn lại. Tệp trong / usr / local / bin là người tina sẽ muốn: nó là một liên kết đến tập lệnh shell khởi động chương trình thực tế:
tina: ~> file / usr / local / bin / acroread
/ usr / local / bin / acroread: liên kết tượng trưng tới ../Acrobat4/bin/acroread
tina: ~> file / usr / local / Acrobat4 / bin / acroread
/ usr / local / Acrobat4 / bin / acroread: Bourne shell script text thi hành được
tina: ~> file / usr / local / Acrobat4 / Reader / intellinux / bin / acroread
/ usr / local / Acrobat4 / Reader / intellinux / bin / acroread: ELF 32-bit LSB thực thi, Intel 80386, phiên bản 1, được liên kết động (sử dụng
tina: ~> file / usr / local / bin / acroread
/ usr / local / bin / acroread: liên kết tượng trưng tới ../Acrobat4/bin/acroread
tina: ~> file / usr / local / Acrobat4 / bin / acroread
/ usr / local / Acrobat4 / bin / acroread: Bourne shell script text thi hành được
tina: ~> file / usr / local / Acrobat4 / Reader / intellinux / bin / acroread
/ usr / local / Acrobat4 / Reader / intellinux / bin / acroread: ELF 32-bit LSB thực thi, Intel 80386, phiên bản 1, được liên kết động (sử dụng
chia sẻ lib), không tước Để giữ cho đường dẫn càng ngắn càng tốt, để hệ thống không phải tìm kiếm quá lâu mỗi khi người dùng muốn thực hiện một lệnh, chúng tôi thêm / usr / local / bin đến đường dẫn chứ không phải các thư mục khác,
chỉ chứa các tệp nhị phân của một chương trình cụ thể, trong khi / usr / local / bin chứa hữu ích khác
các chương trình.
Một lần nữa, mô tả về các tính năng đầy đủ của tìm và xác định vị trí có thể được tìm thấy trong các trang Thông tin.
3.3.3.4. Lệnh grep
3.3.3.4.1. Lọc dòng chung
Một chương trình đơn giản nhưng mạnh mẽ, grep được sử dụng để lọc các dòng đầu vào và trả về các mẫu nhất định cho đầu ra. Thực sự có hàng nghìn ứng dụng cho grep chương trình. Trong ví dụ dưới đây, jerry sử dụng grep để xem anh ấy đã làm điều đó như thế nào với tìm:
jerry: ~> grep -a tìm .bash_history
tìm thấy . -name userinfo man find
tìm ../ -name common.cfg
jerry: ~> grep -a tìm .bash_history
tìm thấy . -name userinfo man find
tìm ../ -name common.cfg
Lịch sử tìm kiếm
Cũng hữu ích trong những trường hợp này là chức năng tìm kiếm trong bash, được kích hoạt bằng cách nhấn Ctrl+R ngay lập tức, chẳng hạn như trong ví dụ mà chúng tôi muốn kiểm tra cách chúng tôi đã làm điều đó lần trước tìm lần nữa:
thomas ~> ^R
(ngược-i-search) `find ': find` / home / thomas` -name * .xml
thomas ~> ^R
(ngược-i-search) `find ': find` / home / thomas` -name * .xml
Nhập chuỗi tìm kiếm của bạn tại dấu nhắc tìm kiếm. Bạn nhập càng nhiều ký tự, tìm kiếm càng bị hạn chế. Điều này đọc lịch sử lệnh cho phiên trình bao này (được viết cho
.bash_history trong thư mục chính của bạn khi bạn thoát khỏi phiên đó). Lần xuất hiện gần đây nhất của chuỗi tìm kiếm của bạn được hiển thị. Nếu bạn muốn xem các lệnh trước đó chứa cùng một chuỗi, hãy nhập Ctrl+R một lần nữa.
Xem các trang Thông tin trên bash để biết thêm.
Tất cả các UNIX chỉ cần chỉnh sửa một chút đều có từ điển trực tuyến. Linux cũng vậy. Từ điển là danh sách các từ đã biết trong một tệp có tên từ, nằm ở / usr / share / dict. Để nhanh chóng kiểm tra chính tả chính xác của một từ, không cần ứng dụng đồ họa:
william: ~> grep pinguin / usr / share / dict / words
william: ~> grep penguin / usr / share / dict / words
chim cánh cụt chim cánh cụt
william: ~> grep pinguin / usr / share / dict / words
william: ~> grep penguin / usr / share / dict / words
chim cánh cụt chim cánh cụt
Từ điển so với danh sách từ
Một số bản phân phối cung cấp mệnh lệnh lệnh, cung cấp nhiều tính năng hơn là chỉ đơn giản là tìm kiếm các từ trong danh sách.
Ai là chủ sở hữu của thư mục chính bên cạnh tôi? Này, có số điện thoại của anh ấy!
lisa: ~> grep gdbruyne / etc / passwd
gdbruyne: x: 981: 981: Guy Debruyne, tel 203234: / home / gdbruyne: / bin / bash
lisa: ~> grep gdbruyne / etc / passwd
gdbruyne: x: 981: 981: Guy Debruyne, tel 203234: / home / gdbruyne: / bin / bash
Và địa chỉ E-mail của Arno một lần nữa là gì?
serge: ~ / mail> grep -i arno *
thư đã gửi: Đến:[email được bảo vệ]>
thư đã gửi: Thứ Hai, ngày 24 tháng 2001 năm XNUMX, [email được bảo vệ] đã viết:
serge: ~ / mail> grep -i arno *
thư đã gửi: Đến:[email được bảo vệ]>
thư đã gửi: Thứ Hai, ngày 24 tháng 2001 năm XNUMX, [email được bảo vệ] đã viết:
tìm và định vị thường được sử dụng kết hợp với grep để xác định một số truy vấn nghiêm trọng. Để biết thêm thông tin, hãy xem Chương 5 về chuyển hướng I / O.
3.3.3.4.2. Ký tự đặc biệt
Các ký tự có ý nghĩa đặc biệt đối với lớp vỏ phải là trốn thoát. Ký tự thoát trong Bash là dấu gạch chéo ngược, như trong hầu hết các shell; điều này làm mất đi ý nghĩa đặc biệt của ký tự sau đây. Shell biết về một số ký tự đặc biệt, trong số các ký tự phổ biến nhất /,.,? và *. Danh sách đầy đủ có thể được tìm thấy trong các trang Thông tin và tài liệu cho trình bao của bạn.
Ví dụ: giả sử bạn muốn hiển thị tệp "*" thay vì tất cả các tệp trong một thư mục, bạn sẽ phải sử dụng
ít \*
<Trước | Nội dung | Tiếp theo>