Chuyển hướng I/O Linux. Cách hiển thị thông tin đầy đủ về máy tính và lưu thông tin này dưới dạng html, pdf. Về loạt bài này

Một trong những chủ đề thú vị và hữu ích nhất dành cho quản trị viên hệ thống và những người dùng mới mới bắt đầu hiểu cách làm việc với thiết bị đầu cuối - đây là sự chuyển hướng các luồng đầu vào/đầu ra của Linux. Tính năng đầu cuối này cho phép bạn chuyển hướng đầu ra của lệnh sang một tệp hoặc nội dung của tệp thành đầu vào lệnh, để kết hợp các lệnh với nhau và tạo thành các đường dẫn lệnh.

Trong bài viết này, chúng ta sẽ xem xét cách thực hiện chuyển hướng luồng I/O trong Linux, những toán tử nào được sử dụng cho việc này và tất cả những điều này có thể được sử dụng ở đâu.

Tất cả các lệnh chúng tôi thực hiện đều trả về cho chúng tôi ba loại dữ liệu:

  • Kết quả của lệnh, thường là dữ liệu văn bản do người dùng yêu cầu;
  • Thông báo lỗi - thông báo về quá trình thực hiện lệnh và các tình huống bất ngờ phát sinh;
  • Mã trả về là một con số cho phép bạn đánh giá xem chương trình có hoạt động chính xác hay không.

Trong Linux, tất cả các chất đều được coi là tệp, bao gồm cả luồng đầu vào/đầu ra linux - tệp. Mỗi bản phân phối có ba tệp luồng chính mà các chương trình có thể sử dụng, chúng được xác định bởi shell và được xác định bằng số mô tả tệp của chúng:

  • STDIN hoặc 0- tệp này được liên kết với bàn phím và hầu hết các lệnh đều nhận dữ liệu để hoạt động từ đây;
  • STDOUT hoặc 1- đây là đầu ra tiêu chuẩn; chương trình sẽ gửi tất cả kết quả công việc của nó ở đây. Nó được kết nối với màn hình, hay nói chính xác hơn là với thiết bị đầu cuối nơi chương trình đang chạy;
  • STDERR hoặc 2- tất cả các thông báo lỗi đều được xuất ra tệp này.

Chuyển hướng I/O cho phép bạn thay thế một trong các tệp này bằng tệp của riêng bạn. Ví dụ: bạn có thể yêu cầu một chương trình đọc dữ liệu từ một tệp trong hệ thống tập tin, thay vì bàn phím, bạn cũng có thể xuất lỗi ra tệp thay vì ra màn hình, v.v. Tất cả điều này được thực hiện bằng cách sử dụng các ký hiệu "<" ">" .

Chuyển hướng đầu ra sang tập tin

Mọi thứ đều rất đơn giản. Bạn có thể chuyển hướng đầu ra sang một tệp bằng ký hiệu >. Ví dụ: hãy lưu đầu ra của lệnh top:

top -bn 5 > top.log

Tùy chọn -b khiến chương trình chạy ở chế độ hàng loạt không tương tác và n - lặp lại thao tác năm lần để lấy thông tin về tất cả các quy trình. Bây giờ hãy xem điều gì đã xảy ra với con mèo:

Biểu tượng ">" ghi đè thông tin từ một tập tin nếu đã có thông tin gì đó ở đó. Để nối thêm dữ liệu vào mục đích sử dụng cuối cùng ">>" . Ví dụ: chuyển hướng đầu ra sang tập tin linux cũng dành cho hàng đầu:

top -bn 5 >> top.log

Theo mặc định, bộ mô tả tệp được sử dụng để chuyển hướng đầu ra tiêu chuẩn. Nhưng bạn có thể chỉ định điều này một cách rõ ràng. Lệnh này sẽ cho kết quả tương tự:

top -bn 5 1>top.log

Chuyển hướng lỗi sang tập tin

Để chuyển hướng đầu ra lỗi sang một tệp, bạn cần chỉ định rõ ràng bộ mô tả tệp mà bạn sắp chuyển hướng. Đối với lỗi, đây là số 2. Ví dụ: khi cố gắng truy cập vào thư mục superuser, ls sẽ báo lỗi:

Bạn có thể chuyển hướng lỗi tiêu chuẩn sang một tệp như thế này:

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Để nối dữ liệu vào cuối tệp, hãy sử dụng cùng một ký hiệu:

ls -l /root/ 2>>ls-error.log

Chuyển hướng đầu ra tiêu chuẩn và lỗi sang tập tin

Bạn cũng có thể chuyển hướng tất cả đầu ra, lỗi và đầu ra tiêu chuẩn sang một tệp duy nhất. Có hai cách để làm điều này. Cách đầu tiên, cũ hơn là chuyển cả hai tay cầm:

ls -l /root/ >ls-error.log 2>&1

Đầu tiên, đầu ra của lệnh ls sẽ được gửi đến tệp ls-error.log bằng ký tự chuyển hướng đầu tiên. Sau đó tất cả các lỗi sẽ được gửi đến cùng một tập tin. Phương pháp thứ hai đơn giản hơn:

ls -l /root/ &> ls-error.log

Bạn cũng có thể sử dụng tính năng nối thêm thay vì viết lại:

ls -l /root/ &>> ls-error.log

Đầu vào tiêu chuẩn từ tập tin

Hầu hết các chương trình, ngoại trừ dịch vụ, nhận dữ liệu cho công việc của chúng thông qua đầu vào tiêu chuẩn. Theo mặc định, đầu vào tiêu chuẩn yêu cầu đầu vào từ bàn phím. Nhưng bạn có thể buộc chương trình đọc dữ liệu từ một tệp bằng toán tử "<" :

con mèo

Bạn cũng có thể ngay lập tức chuyển hướng đầu ra sang một tệp. Ví dụ: hãy sắp xếp lại danh sách:

loại sắp xếp.output

Do đó, chúng tôi chuyển hướng đầu vào/đầu ra sang linux bằng một lệnh.

Sử dụng đường hầm

Bạn có thể làm việc không chỉ với các tệp mà còn có thể chuyển hướng đầu ra của một lệnh thành đầu vào của lệnh khác. Điều này rất hữu ích để thực hiện các hoạt động phức tạp. Ví dụ: hãy hiển thị năm tệp được sửa đổi gần đây:

ls -lt | đầu -n 5

Với tiện ích xargs, bạn có thể kết hợp các lệnh để đầu vào tiêu chuẩn được truyền dưới dạng tham số. Ví dụ: hãy sao chép một tệp vào một số thư mục:

kiểm tra tiếng vang/tmp/ | xargs -n 1 cp -v testfile.sh

Ở đây, tùy chọn -n 1 chỉ định rằng chỉ nên cung cấp một tham số cho mỗi lệnh và tùy chọn -v cho cp cho phép in thông tin chi tiết về các chuyển động. Một lệnh hữu ích khác trong những trường hợp như vậy là tee. Nó đọc dữ liệu từ đầu vào tiêu chuẩn và ghi vào đầu ra hoặc tập tin tiêu chuẩn. Ví dụ:

echo "Thử nghiệm hoạt động của Tee" | tập tin tee1

Kết hợp với các lệnh khác, chúng có thể được sử dụng để tạo các lệnh đa lệnh phức tạp.

kết luận

Trong bài viết này, chúng tôi đã trình bày các khái niệm cơ bản về chuyển hướng luồng I/O của Linux. Bây giờ bạn đã biết cách chuyển hướng đầu ra sang tệp linux hoặc đầu ra từ một tệp. Nó rất đơn giản và thuận tiện. Nếu bạn có bất kỳ câu hỏi nào, hãy hỏi trong phần bình luận!

Nếu bàn phím của bạn được đánh dấu bằng tiếng Latin hoặc Cyrillic và bạn phải nhập văn bản bằng ngôn ngữ khác, đặc biệt là sử dụng các tập lệnh phức tạp, không phải chữ cái, thì lưu ý này về hệ thống nhập liệu trong Linux (đơn giản là “bố cục bàn phím”) có thể khiến bạn quan tâm .


Tôi xin lỗi trước vì thuật ngữ không rõ ràng và không giả vờ mô tả kỹ thuật đầy đủ. Mục đích chính của bài viết là mô tả các khả năng chứ không phải cách thực hiện.

Phương thức nhập

Phương thức nhập chính (IM) trong Linux là XKB, nó được cài đặt theo mặc định và được kích hoạt ngay sau khi cài đặt hệ điều hành. XKB được thiết kế để hoạt động với các chữ cái và không thể xử lý các chữ viết phức tạp như ký tự tiếng Trung hoặc âm tiết của Ấn Độ và Châu Phi. Hệ thống có thể được cấu hình để hoạt động với không quá 4 bố cục. Giới hạn cuối cùng có thể được khắc phục bằng cách sử dụng phím nóng để gọi lệnh với sự kết hợp các tham số cần thiết cho từng ngôn ngữ.


Nếu cần linh hoạt hơn thì bạn nên chuyển sang các khung phương thức nhập liệu. Đại diện chính của các hệ thống như vậy trong Linux: IBus, SCIM, Fcitx. Bản thân khung không thể nhập văn bản và các tập lệnh khác nhau phải được kết nối dưới dạng plugin (công cụ). Từ kinh nghiệm sử dụng IBus và Fcitx, tôi có thể nói rằng cả hai hệ thống đều hỗ trợ số lượng plugin gần như nhau. Thông thường, đây có thể là các plugin gần như giống nhau. Ví dụ: phương thức nhập Bính âm cho tiếng Trung được triển khai dưới dạng thư viện libpinyin độc lập và cung cấp các khả năng giống hệt nhau khi được kết nối qua IBus hoặc Fcitx.



Đầu tiên, IBus có thể sử dụng một cách minh bạch xkb và tất cả các khả năng của nó. Vấn đề duy nhất là IBus không thể tự động tạo cấu hình XKB. Phổ biến nhất trong số chúng được đăng ký trước trong tệp /usr/share/ibus/comComponent/simple.xml, tệp này có thể được thay đổi và bổ sung khi cần thiết. (Khi cập nhật IBus, tệp sẽ được thay thế bằng tệp tiêu chuẩn.)


Ví dụ: bố cục của Nga được mô tả như sau:


xkb:ru::rus ru GPL Bành Hoàng ru tiếng Nga tiếng Nga bàn phím ibus 99

Ngoài bố cục, bạn có thể chỉ định bố cục_variant; các tham số setxkbmap khác không có sẵn, bao gồm bố cục kiểu chữ nổi tiếng của Ilya Birman, được đặt trong xkb thông qua đối số misc:typo. Để khắc phục hạn chế này hoặc đơn giản là tạo bố cục cho mục đích riêng của bạn, bạn cần mô tả đầy đủ về nó. Để thực hiện việc này, bạn cần tạo một tệp tùy chỉnh trong thư mục /usr/share/X11/xkb/symbols (nếu bạn thêm vào các tệp hiện có, chúng sẽ bị ghi đè khi cập nhật hệ thống) và đặt cấu hình bố cục. Ví dụ: tiếng Nga có sự bổ sung của Ilya Birman:


một phần chữ và số_keys xkb_symbols "ru-typo" ( include "ru(winkeys)" include "typo(base)" include "level3(ralt_switch)" // Phím hàng bàn phím thứ 1 ([Không có ký hiệu, không có ký hiệu, U0301, không có ký hiệu]); // "~" );

Trong đó các dòng bao gồm thu thập cấu hình từ các mẫu tạo sẵn. Theo đó, phiên bản bố cục tiếng Nga “winkeys” được lấy từ tệp “ru”. Sau đó, nó được bổ sung bố cục “cơ sở” từ tệp “lỗi đánh máy” và công tắc lớp thứ ba AltGr được thiết lập (xem tệp “level3”), tương tự như lệnh:


setxkbmap -layout ru -variant winkeys -option lv3:ralt_switch,misc:typo

Nếu muốn, bạn có thể thực hiện những thay đổi của riêng mình. Trong ví dụ trên, dấu trọng âm "U+0301" (Kết hợp dấu cấp tính) được đặt trên tổ hợp AltGr+~. Các vị trí trong đó NoSymbol được chỉ định sử dụng các định nghĩa từ các mẫu trước đó: "ё" và "Ё" từ "winkeys", "≈" từ "typo":


chìa khóa ( [ Cyrillic_io, Cyrillic_IO, NoSymbol, NoSymbol ] ); // phím winkeys ( [ Không có ký hiệu, không có ký hiệu, không có ký hiệu, xấp xỉ ] ); // phím đánh máy ([Không có ký hiệu, không có ký hiệu, U0301, không có ký hiệu]); // phong tục

xkb:ru:lỗi đánh máy:rus ru tùy chỉnh, chúng tôi lỗi đánh máy, Tiếng Nga (có lỗi đánh máy) Tiếng Nga (có lỗi đánh máy) bàn phím ibus 1

Trong đó custom là tên của tệp từ thư mục /usr/share/X11/xkb/symbols và ru-typo trỏ đến bố cục chứa trong đó. Bố cục bổ sung của chúng tôi được chỉ định để các phím nóng (Ctrl+C, Ctrl+V, v.v.) hoạt động chính xác. Sau khi khởi động lại IBus (khởi động lại ibus), bố cục mới "Tiếng Nga (có lỗi đánh máy)" sẽ xuất hiện trong cài đặt.


Phương thức nhập thứ hai - m17n. Đây là thư viện bố cục bàn phím khá phong phú dành cho nhiều loại script khác nhau. IBus có phương thức nhập tương tự riêng bảng ibus, được mô tả là có "khả năng kém hơn một chút". Tôi đã phải sử dụng cái sau để tạo bố cục có sự tương ứng một-một giữa các chữ cái Latinh và các chữ cái trong bảng chữ cái bắt buộc mà không liên quan đến logic phức tạp, vì vậy tôi không thể đánh giá hệ thống nào trong hai hệ thống có nhiều chức năng và biểu cảm hơn - mô tả về bố cục ở định dạng m17n hoặc ibus-table. Phương thức bảng ibus bao gồm bố cục "LaTeX" gây tò mò để nhập các ký tự theo ký hiệu thích hợp: "\Delta" cho "Δ", "\ge" cho " ≥", v.v.


Phương thức nhập liệu phổ biến tiếp theo là KMFL. Đây là phương thức nhập Keyman cho Windows. Không phải là IM phổ biến hỗ trợ các tập lệnh hiếm nhất. Không giống như Keyman ban đầu được cho là có thể nhập hơn 1.000 tập lệnh, KMFL không tiên tiến bằng nhưng vẫn có thể hữu ích. Định dạng mô tả bố cục là văn bản; có một chương trình tạo chúng cho Ms Windows. Tôi đang sử dụng bố cục EuroLatin, chuyển đổi văn bản "2//3" thành phân số "⅔" và chuỗi "-a" thành macron "ā". Gợi nhớ đến phím Soạn trong xkb, nhưng không yêu cầu công cụ sửa đổi riêng - KMFL tự nhận dạng các chuỗi trong khi nhập.


Các kiểu nhập còn lại dành riêng cho từng chữ viết riêng: “ibus-libpinyin” cho tiếng Trung, “ibus-unikey” cho tiếng Việt, v.v. Cài đặt cho các plugin này cũng nằm trong /usr/share/ibus/comComponent/ . Các tệp tương ứng có thể cần được đặt thành bố cục bàn phím cơ bản, nếu không chúng sẽ không hoạt động khi chuyển từ bố cục không phải tiếng Latinh. Ví dụ: trong libpinyin.xml, bạn cần tìm tham số “layout” và nhập “us” cho bàn phím QWERTY hoặc “fr” cho AZERTY, v.v.


chúng ta

Chuyển đổi bố cục

Hầu hết thời gian tôi làm việc với các cặp ngôn ngữ: Nga-Anh, Trung-Tây Ban Nha, v.v. Do đó, tôi thích có một phím nóng để chuyển đổi giữa hai bố cục cuối cùng (CapsLock) và bản thân các bố cục này được chuyển đổi bằng các phím nóng riêng biệt (Win + 1...9 trên bàn phím số). Vì vậy, trước tiên tôi đặt bố cục làm việc, Win+1 (en) và Win+2 (ru), sau đó chuyển đổi giữa chúng bằng CapsLock (en<->ru).


Trong IBus, bạn có thể đặt hai phím nóng: một phím để duyệt qua danh sách bố cục, phím thứ hai dành cho hai bố cục cuối cùng. Bạn cũng có thể chọn bố cục mong muốn thông qua bảng điều khiển và theo đó, gán tập lệnh cho một phím nóng.


Xin lưu ý rằng sẽ không thể gán lại CapsLock bằng xmodmap vì IBus đặt lại các cài đặt đó. Do đó, tôi thích ghi đè toàn cầu CapsLock là F14 thông qua udev (tệp /etc/udev/hwdb.d/90-custom-keyboard.hwdb):


evdev:input:b0003v1A2Cp0E24* # id bàn phím của tôi KEYBOARD_KEY_70039=f14 # liên kết mũ khóa với f14

Và sử dụng F14 làm phím nóng trong IBus. Theo kinh nghiệm của tôi, điều này cung cấp cấu hình ổn định nhất.


Để biết thêm thông tin về cách thiết lập udev, hãy xem phần cuối bài viết.

Bàn phím ảo

Bàn phím được sản xuất thương mại, được đánh dấu bằng một tập lệnh cụ thể, chỉ dành cho các ngôn ngữ có số lượng người dùng lớn - ví dụ: dành cho tiếng Nga (YTSUKEN). Cả ở Armenia và Georgia, bạn đều không thể mua được bàn phím có các phím được dán nhãn các chữ cái trong bảng chữ cái quốc gia. Tương tự, ở Kazakhstan và Uzbekistan, họ sử dụng bàn phím tiếng Nga-Anh và buộc phải tìm hiểu vị trí của các chữ cái không có trong bảng chữ cái Latinh hoặc Cyrillic tiêu chuẩn.


Nếu bạn đang học cách bố cục mới, tôi khuyên bạn nên sử dụng bàn phím ảo. Tôi thích Onboard vì nó tự động điều chỉnh theo bố cục đang hoạt động và cập nhật khi bạn chuyển sang bố cục khác. Nhưng điều này chỉ hoạt động với xkb (cả khi sử dụng xkb qua IBus).


Onboard rất thuận tiện để kiểm tra bố cục xkb và cho phép bạn xem các ký hiệu được chỉ định trên tất cả các lớp (AltGr, v.v.).

Phần kết luận

Không phải tất cả các chương trình đều hỗ trợ chính xác khung ngôn ngữ. Đặc biệt, Sublime Text 3 chỉ hoạt động với SCIM và sử dụng IBus, bất kể bố cục được chọn là gì, nó sẽ in độc quyền các chữ cái Latinh.


Tôi đã sử dụng IBus được một thời gian và kiến ​​thức của tôi về các hệ thống khác rất sơ sài. Theo các đánh giá trên Internet, Fctix được mô tả là có nhiều chức năng hơn và thích ứng tốt hơn để nhập văn bản tiếng Trung. Trong mọi trường hợp, tôi hoàn toàn hài lòng với IBus khi làm việc với các văn bản tiếng Trung và sự khác biệt không phải là cơ bản. Lần cuối cùng tôi phải sử dụng Fctix (2 năm trước), khung không cho phép tôi chuyển đổi bố cục trừ khi con trỏ ở trong trường văn bản. Tôi hy vọng lỗi này đã được sửa chữa ngay bây giờ.


Một trợ giúp khác để làm việc với nhiều loại tập lệnh là vỏ bàn phím silicon. Các thị trường trực tuyến Trung Quốc cung cấp lớp phủ (保护膜 hoặc 键盘膜) cho Bàn phím Apple Magic cho nhiều loại tập lệnh. Ví dụ về một nhà phân phối không phải người Trung Quốc. Nhưng hãy nhớ rằng ba thế hệ Apple Magic đã được sản xuất (và mỗi thế hệ đều được sửa đổi cho Hoa Kỳ, Châu Âu và Nhật Bản) và các bản sao của Trung Quốc khác nhau về kích thước tuyến tính và bố cục phím. Đôi khi, tôi rất tiếc vì không có một tiêu chuẩn chung nào cho bàn phím máy tính.


Tham khảo nhanh về chuyển đổi tín hiệu nhấn phím

Mã kỹ thuật số của phím được nhấn sẽ thay đổi giá trị của nó nhiều lần.

  1. mã quét: Khi nhấn một phím, bàn phím (hoặc trình điều khiển?) sẽ gửi tới nhân Linux mã quét.
  2. mã khóa: Tiếp theo trong kernel mã quét chuyển đổi thành mã khóa(Hệ thống con API đầu vào Linux). Bạn có thể kiểm soát việc chuyển đổi bằng các chương trình udev, keyfuzz, setkeycodes.
  3. keyym: Hệ thống X Window nhận từ kernel mã khóa và phát sóng nó tới keysym- đây là ký tự cuối cùng mà chương trình khách sẽ nhận làm đầu vào. Việc chuyển đổi được định cấu hình thông qua XKB hoặc xmodmap (không được dùng nữa).

Từ trình tự trên, rõ ràng việc gán lại các phím ở giai đoạn mã quét > mã khóa thích hợp hơn vì nó không gây nhiễu cho KXB.


hướng dẫn thiết lập udev

Phát tin mã quét V. mã khóađược thực hiện độc lập cho từng thiết bị đầu vào, vì vậy trước tiên bạn cần tìm ra mã nhận dạng duy nhất của bàn phím (trên thực tế, evdev cũng hoạt động với một lượng lớn thiết bị ngoại vi có nút - từ chuột đến máy in và webcam). Người dùng Arch Linux có thể sử dụng tập lệnh sau (đối với các bản phân phối khác, đường dẫn có thể cần được điều chỉnh):


#!/bin/sh cho THIẾT BỊ trong /dev/input/by-id/*; làm echo $(basename $DEVICE) DEVID=$(basename $(readlink $DEVICE)) printf "evdev:input:b%sv%sp%se%s*\n\n" \ `cat /sys/class/input /$DEVID/device/id/bustype` \ `cat /sys/class/input/$DEVID/device/id/vendor` \ `cat /sys/class/input/$DEVID/device/id/product` \ ` cat /sys/class/input/$DEVID/device/id/version` đã xong

Cùng một thiết bị có thể được trình bày trong hệ thống thành nhiều bản sao dưới các tên khác nhau, nhưng mã nhận dạng sẽ giống nhau. Ví dụ: bàn phím của tôi được xác định là hai thiết bị:


usb-SEM_USB_Keyboard-event-if01 evdev:input:b0003v1a2cp0e24e0110* usb-SEM_USB_Keyboard-event-kbd evdev:input:b0003v1a2cp0e24e0110*

Lưu ý: mã định danh có thể được rút ngắn (ví dụ: thành b0003v1a2cp0e24*), điều này có thể hữu ích khi tạo quy tắc thống nhất cho một loạt mô hình cùng loại. Dấu hoa thị “*” ở đây đóng vai trò là ký tự đại diện.


Bây giờ bạn cần tạo một tệp 90-custom-keyboard.hwdb trong /etc/udev/hwdb.d/ với nội dung sau (ví dụ: xem /usr/lib/udev/hwdb.d/60-keyboard.hwdb) :


evdev:input:b0003v5c0ap0003e0110* # ID của bạn KEYBOARD_KEY_70039=f14 # gán lại khóa

Dòng KEYBOARD_KEY bắt đầu bằng dấu cách, điều này rất quan trọng. Cập nhật cấu hình:


sudo udevadm hwdb --update && kích hoạt udevadm

Sau đó, khi thiết bị được khởi động lại hoặc kết nối lại, cấu hình sẽ được cập nhật tự động.


Việc gán lại khóa được chỉ định theo cặp KEYBOARD_KEY_ =. Giá trị mã khóa(bắt buộc bằng chữ thường) được đặt trong /usr/include/linux/input-event-codes.h (đối với Ubuntu 14.04 trong /usr/include/linux/input.h).

Thêm thẻ

Hệ thống vào/ra trong LINUX.

Trong hệ thống I/O, tất cả các thiết bị bên ngoài được coi là các tệp mà trên đó các thao tác tệp thông thường có thể được thực hiện. Tất nhiên, có trình điều khiển thiết bị, nhưng giao diện của chúng được thiết kế để người dùng truy cập một tệp đặc biệt. Các tập tin đặc biệt là phương tiện thống nhất hệ thống đầu vào/đầu ra.

Mỗi thiết bị được kết nối (thiết bị đầu cuối, đĩa, máy in, v.v.) tương ứng với ít nhất một tệp đặc biệt. Hầu hết các tệp đặc biệt này được lưu trữ trong thư mục /dev:
$ cd /dev
$ ls -l
bảng điều khiển hệ thống đế
phần dsk trên đĩa
đĩa mềm fd0 1
bộ nhớ ghi nhớ
máy in lp
cổng song song lр0 0
. . .
phần gốc trên đĩa cho hệ thống tập tin gốc
trao đổi phần trao đổi
tên thay thế syscon cho bảng điều khiển
systty là tên gọi khác của bảng điều khiển hệ thống
thư mục thuật ngữ cho thiết bị đầu cuối
cổng nối tiếp ttyS0 0 (COM1)
. . .

Khi một chương trình ghi vào một tệp đặc biệt như vậy, hệ điều hành sẽ chặn chúng và gửi chúng đến một thiết bị, chẳng hạn như máy in). Khi đọc dữ liệu từ loại tệp này, nó thực sự được nhận từ một thiết bị, chẳng hạn như đĩa. Chương trình không được tính đến các tính năng vận hành của thiết bị đầu vào/đầu ra. Với mục đích này, các tệp (trình điều khiển) đặc biệt được sử dụng, đóng vai trò là giao diện giữa các thành phần của nhân hệ điều hành và các chương trình ứng dụng có mục đích chung.

Hệ thống chỉ phát hiện sự khác biệt giữa một tệp thông thường và một tệp đặc biệt sau khi nó đã phân tích inode tương ứng được tham chiếu bởi mục nhập thư mục.
Inode tệp đặc biệt chứa thông tin về loại, loại và số thiết bị. Lớp thiết bị định nghĩa cả thiết bị dựa trên ký tự và dựa trên khối. Một ví dụ về thiết bị theo từng ký tự là bàn phím. Các tệp đặc biệt cung cấp khả năng liên lạc với các thiết bị thuộc loại này được gọi là định hướng byte. Các thiết bị khối được đặc trưng bởi việc trao đổi các khối thông tin lớn, điều này tăng tốc độ trao đổi và làm cho nó hiệu quả hơn. Tất cả các thiết bị đĩa đều hỗ trợ trao đổi khối và các tệp đặc biệt phục vụ chúng được gọi là hướng khối. Các tệp đặc biệt không chứa bất kỳ thông tin tượng trưng nào, vì vậy độ dài của chúng không được chỉ định trong danh sách thư mục.

Loại và số lượng thiết bị cũng là đặc điểm chính của các tệp đặc biệt (số chính và số bổ sung của thiết bị tương ứng được đặt trong trường độ dài). Cái đầu tiên trong số chúng xác định loại thiết bị, cái thứ hai xác định nó trong số các thiết bị tương tự. Hệ điều hành có thể phục vụ đồng thời hàng chục, thậm chí hàng trăm thiết bị đầu cuối. Mỗi người trong số họ phải có tệp đặc biệt của riêng mình, vì vậy sự hiện diện của số chính và số bổ sung cho phép bạn thiết lập sự tương ứng cần thiết giữa thiết bị và tệp đó.

Bạn có thể tạo nhiều hệ thống tập tin trên một đĩa. Một số hệ thống sử dụng một hệ thống tệp trên mỗi đĩa, trong khi những hệ thống khác sử dụng nhiều hệ thống. Một hệ thống tệp mới có thể được tạo bằng lệnh mkfs (tạo hệ thống tệp). Ví dụ: biểu thức # /sbin/mkfs /dev/dsk/fl1 512 có nghĩa là: tạo một đĩa mềm b: có kích thước 512 khối.

Theo tùy chọn, bạn có thể chỉ định kích thước của hệ thống tệp theo khối và số lượng nút i (nghĩa là số lượng tệp tối đa có thể được lưu trữ trong hệ thống tệp). Theo mặc định, số lượng nút i bằng số khối chia cho bốn. Số lượng nút i tối đa trên mỗi hệ thống tệp là 65.000. Nếu vì lý do nào đó bạn cần nhiều hơn 65.000 nút i trên một đĩa, bạn phải tạo hai hoặc nhiều hệ thống tệp trên đĩa đó.

Bất kỳ hệ thống tập tin nào cũng có thể được đính kèm (gắn kết) vào cây thư mục dùng chung tại bất kỳ điểm nào trong đó. Ví dụ: thư mục / là thư mục gốc của hệ thống, ngoài ra, nó còn là cơ sở của hệ thống tập tin, luôn được gắn kết. Thư mục /usr1 nằm trong thư mục /, nhưng trong trường hợp này, nó là một hệ thống tệp riêng biệt với hệ thống tệp gốc, vì tất cả các tệp trong đó đều nằm trên một phần riêng biệt của đĩa hoặc trên một đĩa riêng biệt hoàn toàn. Hệ thống tập tin /usr1 là hệ thống tập tin được gắn kết - gốc tại điểm tồn tại thư mục /usr1 trong hệ thống phân cấp tổng thể (Hình 1 và 2).

Cơm. 1. Hệ thống tập tin trước
đang gắn/dev/dsk/os1

Cơm. 2. Hệ thống tập tin sau
gắn kết /dev/dsk/os1 dưới dạng /usr/

Để gắn hệ thống tập tin, hãy sử dụng lệnh /sbin/mount. Lệnh này cho phép hệ thống tệp đã cho được đặt ở bất kỳ đâu trong cấu trúc thư mục hiện có:
#/sbin/mount/dev/dsk/osl/usr1 gắn kết /dev/dsk/osl vào /usr1
#/sbin/mount/dev/dsk/flt/a gắn kết /dev/dsk/flt vào /a

Nếu bạn muốn gắn một hệ thống tệp vào các đĩa cần được bảo vệ chống ghi để hệ thống ở chế độ chỉ đọc, bạn cần thêm tùy chọn -r vào lệnh /sbin/mount.
Thư mục mà hệ thống tệp đang được gắn vào hiện phải trống, vì nội dung của nó sẽ không thể truy cập được trong khi hệ thống tệp đang được gắn vào.

Để lấy thông tin về các hệ thống tập tin được mount, chẳng hạn như trên hệ thống LINUX, bạn có thể sử dụng lệnh /sbin/mount mà không cần đối số (Hình 3).

Cơm. 3.

Lệnh này in thư mục nơi hệ thống tập tin (ví dụ usrl) được gắn kết, thiết bị /dev mà nó được bật cũng như ngày và giờ nó được gắn kết. Để ngắt kết nối hệ thống tệp, hãy sử dụng lệnh /sbin/umount, lệnh này có tác dụng ngược lại với lệnh mount. Nó giải phóng hệ thống tệp và đưa nó hoàn toàn ra khỏi cấu trúc thư mục, do đó tất cả các tệp và thư mục của chính nó không thể truy cập được:
# /sbin/umount /b
# /sbin/umount /dev/dsk/0s2

Hệ thống tập tin gốc không thể được ngắt kết nối. Ngoài ra, lệnh umount sẽ không thành công nếu ai đó đang sử dụng một tệp từ hệ thống tệp mà họ đang cố gắng ngắt kết nối (điều này thậm chí có thể đơn giản như việc một trong các thư mục trên hệ thống tệp đang được ngắt kết nối).

Trong lệnh mount và umount, người dùng sử dụng tên viết tắt của các thiết bị đĩa vật lý.
Trong LINUX, các thiết bị đĩa có những ký hiệu riêng. Trong LINUX, người dùng không bao giờ phải đối mặt với vấn đề xác định chính xác thiết bị vật lý chứa thông tin. Trong LINUX, số lượng thiết bị bên ngoài tùy ý có thể rất lớn, do đó, người dùng chỉ xử lý tên của thư mục chứa các tệp mình cần. Tất cả các hệ thống tập tin được gắn kết một lần, thường là khi hệ thống khởi động. Hệ thống tập tin từ máy tính từ xa cũng có thể được gắn vào một số thư mục.

Đối với các thiết bị vật lý trong LINUX, có các thư mục dsk và rdsk chứa các tệp tương ứng với các thiết bị đĩa. Thông thường tên tệp trong các thư mục này giống nhau và điểm khác biệt duy nhất giữa chúng là thư mục rdsk chứa các thiết bị đĩa có quyền truy cập đặc biệt (thô), mà một số thiết bị hệ thống sử dụng để truy cập đĩa nhanh hơn. Một thư mục dsk điển hình chứa các thiết bị sau:
$1 giây /dev/dsk
0s0 1s0 c0t0d0s0 c0tld0s0 f0 f05q f13dt fld8d
0sl 1sl c0t0d0sl c0tld0sl f03d f05qt f13h fld8dt
0s2 1s2 c0t0d0s2 c0tld0s2 f03dt f0d8d f13ht fld8t
. . .
$

Trên hệ thống LINUX, các thiết bị đĩa được chia thành các phần một cách hợp lý, tương tự như các phân vùng được xác định trong Bảng phân vùng MasterBoot MS DOS. Các tệp 0s1, 0s2, 0s3, v.v. tương ứng với các phần một, hai, ba, v.v. của đĩa số 0. Các tệp 1s0, 1sl, 1s2, v.v. tương ứng với các phần một, hai, ba, v.v. . Nếu hệ thống có nhiều đĩa hơn, các phân vùng sẽ được đánh số ns0, nsl, v.v. cho mỗi số đĩa n.

Các hệ thống có số lượng lớn thiết bị đĩa sử dụng hệ thống đánh số sau:
với phần d đĩa điều khiển

trong đó bộ điều khiển là số bộ điều khiển đĩa; đĩa - số đĩa; phần - số phần đĩa.
Do đó, 0s0 thường tương đương với c0t0d0s0 và 0sl đến c0t0d0sl và tên phân vùng ba ký tự chỉ đơn giản là tốc ký cho số bộ điều khiển đĩa 0.

Các tập tin có tên bắt đầu bằng f xác định các loại đĩa mềm khác nhau. Thư mục rmt chứa các tập tin trên thiết bị băng từ:
$1 giây /dev/rmt
c0s0 cls0 c3s0 ntape băng ntapel băng

Các tệp c0s0, cls0, c2s0 và c3s0 xác định bốn thiết bị lưu trữ băng cassette. Các tập tin băng và băng từ xác định các thiết bị lưu trữ từ tính hai cuộn. Các tệp có tên bắt đầu bằng n thuộc cùng một thiết bị, chỉ có băng không tua lại sau khi sử dụng, trong khi việc sử dụng các tệp khác sẽ khiến băng tua lại khi chương trình sử dụng nó chạy xong.

Trên một số hệ thống, các tệp này có tên khác nhau nhưng chúng luôn nằm trong /dev và từ điển thường đi kèm với hệ thống chứa các mô tả chi tiết về thiết bị và các tệp liên quan của chúng.

Hệ thống tệp extX sử dụng bộ đệm dữ liệu cho các hoạt động I/O. Khi đọc một khối thông tin, kernel sẽ gửi yêu cầu I/O tới một số khối liền kề. Những hoạt động như vậy tăng tốc đáng kể việc truy xuất dữ liệu khi đọc các tệp một cách tuần tự. Khi ghi dữ liệu vào một tệp, hệ thống tệp extX, khi ghi một khối mới, sẽ phân bổ trước tối đa 8 khối liền kề gần đó. Phương pháp này cho phép các tệp được đặt trong các khối liền kề, giúp tăng tốc độ đọc của chúng và giúp đạt được hiệu suất hệ thống cao.

Ghi chú: thực tế cho thấy phần cấu hình Kerberos có thể bỏ qua. Có vẻ như Samba sẽ tự cấu hình cấu hình Kerberos. Đủ để gói hàng đứng vững người dùng krb5.

Phụ trách

Thường có nhu cầu đưa máy Linux vào miền Windows hiện có. Ví dụ: để tạo một máy chủ tệp bằng Samba. Điều này rất dễ thực hiện; tất cả những gì bạn cần là một client Kerberos, Samba và Winbind.

Trước khi cài đặt, nên cập nhật:

cập nhật năng khiếu sudo

nâng cấp năng khiếu sudo

Bạn có thể cài đặt tất cả những thứ này bằng lệnh:

sudo aptitude cài đặt krb5-user samba winbind

Bạn cũng có thể cần cài đặt các thư viện sau:

sudo aptitude cài đặt libpam-krb5 libpam-winbind libnss-winbind

Hoặc, nếu bạn đang sử dụng Ubuntu Desktop, các gói tương tự có thể được cài đặt thông qua trình quản lý gói Synaptic.

Tiếp theo, bạn sẽ cần định cấu hình tất cả các công cụ trên để hoạt động với miền của mình. Giả sử bạn muốn đăng nhập vào miền DOMAIN.COM, bộ điều khiển miền của nó là máy chủ dc.domain.com có ​​địa chỉ IP 192.168.0.1. Máy chủ tương tự cũng là máy chủ DNS chính của miền. Ngoài ra, giả sử bạn có bộ điều khiển miền thứ hai 1), còn được gọi là DNS-dc2.domain.com với IP 192.168.0.2. Máy tính của bạn sẽ được gọi là smbsrv01.

Cài đặt DNS

Trước tiên, bạn cần thay đổi cài đặt DNS trên máy của mình, đăng ký bộ điều khiển miền 2 làm máy chủ DNS và miền mong muốn làm miền tìm kiếm.

Nếu bạn có địa chỉ IP tĩnh, thì trong Ubuntu Desktop, việc này có thể được thực hiện thông qua Trình quản lý mạng, trong Ubuntu Server, bạn cần thay đổi nội dung của tệp /etc/resolv.conf thành nội dung như thế này:

tên miền miền.com

tên miền tìm kiếm.com

máy chủ tên 192.168.0.1

máy chủ tên 192.168.0.2

Trong các bản phân phối hiện đại, tệp resolv.conf được tạo tự động và không cần chỉnh sửa thủ công. Để có được kết quả mong muốn, bạn cần thêm những thay đổi cần thiết vào tệp: /etc/resolvconf/resolv.conf.d/head Dữ liệu được thêm vào sẽ tự động được chèn vào tệp /etc/resolv.conf

Nếu địa chỉ IP là động và được chỉ định bởi máy chủ DHCP thì sau khi khởi động lại resolv.conf, một resolv.conf" "không chính xác" có thể được tạo ra, ví dụ: chỉ có một máy chủ tên 192.168.0.1 và tên miền cũng như tìm kiếm không được chỉ định . Bạn cần chỉnh sửa /etc/dhcp/dhclient.conf Để làm cho tên miền và các mục tìm kiếm xuất hiện, bạn cần xóa nhận xét trước dòng tên miền thay thế và nhập tên miền của bạn:

thay thế tên miền "domain.com";

Để thêm một máy chủ tên khác, bạn cần xóa nhận xét trước khi thêm máy chủ tên miền và chỉ định ip máy chủ:

thêm vào trước máy chủ tên miền 192.168.0.2;

Để áp dụng các thay đổi, bạn chỉ cần khởi động lại dịch vụ:

/etc/init.d/khởi động lại mạng

Bây giờ hãy đảm bảo bạn đặt đúng tên máy chủ trong tệp /etc/hostname:

smbsrv01

Ngoài ra, bạn cần chỉnh sửa file /etc/hosts để nó chứa một mục có tên miền đầy đủ của máy tính và luôn là tên máy chủ ngắn, đề cập đến một trong các IP nội bộ:

# Tên của máy tính này

127.0.0.1 máy chủ cục bộ

127.0.1.1 smbsrv01.domain.com smbsrv01

Ngay lập tức, chúng tôi cần kiểm tra xem bộ điều khiển miền của chúng tôi có hoạt động bình thường hay không, sử dụng tên viết tắt và đầy đủ của nó để trong tương lai chúng tôi không nhận được lỗi không tìm thấy bộ điều khiển miền:

ping dc

ping dc.domain.com

Không cần thiết, nhưng nếu bạn thay đổi điều gì đó, hãy khởi động lại máy tính để áp dụng các thay đổi.

N cài đặt đồng bộ hóa thời gian

Tiếp theo, bạn cần cấu hình đồng bộ hóa thời gian với bộ điều khiển miền. Nếu chênh lệch quá 5 phút, chúng tôi sẽ không thể nhận được lá phiếu từ Kerberos. Để đồng bộ hóa một lần, bạn có thể sử dụng lệnh:

sudo net thời gian thiết lập dc

Nếu có một máy chủ thời gian chính xác trên mạng thì bạn có thể sử dụng nó hoặc bất kỳ máy chủ công cộng nào:

ntpdate ntp.mobatime.ru

Đồng bộ hóa tự động được cấu hình bằng ntpd, daemon này sẽ thực hiện đồng bộ hóa theo định kỳ. Đầu tiên bạn cần cài đặt nó:

sudo aptitude cài đặt ntp

Bây giờ hãy chỉnh sửa tệp /etc/ntp.conf để bao gồm thông tin về máy chủ thời gian của bạn:

# Bạn cần nói chuyện với máy chủ NTP hoặc hai (hoặc ba).

máy chủ dc.domain.com

Sau đó khởi động lại daemon ntpd:

sudo /etc/init.d/ntp khởi động lại

Bây giờ là lúc thiết lập tương tác trực tiếp với miền.

Default_realm = DOMAIN.COM

Kdc_timesync = 1

Ccache_type = 4

Có thể chuyển tiếp = đúng

Có thể ủy quyền = đúng

V4_instance_resolve = sai

V4_name_convert = (

Máy chủ = (

Rcmd=máy chủ

ftp = ftp

Đồng bằng = (

Cái gì đó = cái gì đó khác

Fcc-mit-ticketflags = đúng

TÊN MIỀN.COM = (

Kdc = dc

Kdc = dc2

Admin_server = dc

Default_domain = DOMAIN.COM

Tên miền.com = DOMAIN.COM

Tên miền.com = DOMAIN.COM

Krb4_convert = sai

Krb4_get_tickets = sai

Tất nhiên, bạn sẽ cần thay đổi domain.com thành miền của mình và dc và dc2 thành bộ điều khiển miền của bạn. Nhân tiện, bạn có thể cần phải viết tên đầy đủ của bộ điều khiển miền dc.domain.com và dc2.domain.com. Vì tôi đã đăng ký miền tìm kiếm trong DNS nên tôi không cần thực hiện việc này.

Đặc biệt chú ý đến trường hợp viết tên miền – tên miền nào viết hoa thì phải viết hoa. Nếu không, sẽ không có gì có tác dụng kỳ diệu.

Đây không phải là tất cả các tùy chọn cấu hình Kerberos có thể có, chỉ là những tùy chọn cơ bản. Tuy nhiên, chúng thường là đủ.

Bây giờ là lúc kiểm tra xem chúng ta có thể đăng nhập vào miền hay không. Để thực hiện việc này, hãy chạy lệnh

kinit [email được bảo vệ]

Thay vì tên người dùng, bạn nên nhập tên của người dùng tên miền hiện có một cách tự nhiên.

Tên miền phải được viết bằng chữ in hoa!

Nếu bạn không nhận được bất kỳ lỗi nào thì bạn đã định cấu hình mọi thứ chính xác và miền sẽ cung cấp cho bạn một vé Kerberos. Nhân tiện, một số lỗi phổ biến được liệt kê dưới đây.

Bạn có thể xác minh rằng vé đã được nhận bằng cách chạy lệnh

danh sách

Bạn có thể xóa tất cả các vé (bạn hoàn toàn không cần chúng) bằng lệnh

phá hủy

R lỗi kinit thường gặp

kinit(v5): Đồng hồ lệch quá lớn trong khi nhận thông tin xác thực ban đầu

Điều này có nghĩa là thời gian trên máy tính của bạn không được đồng bộ với bộ điều khiển miền (xem bên trên).

kinit(v5): Xác thực trước không thành công khi nhận thông tin xác thực ban đầu

Bạn đã nhập sai mật khẩu.

kinit(v5): Phản hồi của KDC không khớp với mong đợi khi nhận được thông tin xác thực ban đầu

Sai lầm kỳ lạ nhất. Đảm bảo rằng tên miền trong krb5.conf, cũng như tên miền trong lệnh kinit, được nhập bằng chữ in hoa:

TÊN MIỀN.COM = (

# ...

kinit [email được bảo vệ]

kinit(v5): Không tìm thấy ứng dụng khách trong cơ sở dữ liệu Kerberos trong khi nhận thông tin xác thực ban đầu

Người dùng được chỉ định không tồn tại trong miền.

N Thiết lập Samba và đăng nhập tên miền

Để đăng nhập vào miền, bạn cần chỉ định cài đặt chính xác trong tệp /etc/samba/smb.conf. Ở giai đoạn này, bạn chỉ nên quan tâm đến một số tùy chọn trong phần này. Dưới đây là ví dụ về một phần của tệp cấu hình Samba với các nhận xét về ý nghĩa của các tham số quan trọng:

# Hai tùy chọn này phải được viết bằng chữ in hoa và nhóm làm việc không có

# của phần cuối cùng sau dấu chấm và vương quốc là tên miền đầy đủ

Nhóm làm việc = TÊN MIỀN

Vương quốc = DOMAIN.COM

# Hai lựa chọn này có nhiệm vụ ủy quyền thông qua AD

Bảo mật = QUẢNG CÁO

Mã hóa mật khẩu = đúng

#Chỉ quan trọng

Proxy DNS = không

Tùy chọn ổ cắm = TCP_NODELAY

# Đôi khi, nếu bạn không muốn Samba cố gắng trở thành người dẫn đầu trong một miền hoặc nhóm làm việc,

# hoặc thậm chí trở thành Domain Controller thì ghi luôn 5 lựa chọn này vào form này

Chủ tên miền = không

Chủ địa phương = không

Chủ nhân ưa thích = không

Cấp hệ điều hành = 0

Đăng nhập tên miền = không

# Tắt hỗ trợ máy in

Tải máy in = không

Hiển thị trình hướng dẫn thêm máy in = không

Tên printcap = /dev/null

Vô hiệu hóa cuộn = có

Sau khi bạn chỉnh sửa smb.conf hãy chạy lệnh

thử nghiệm

Nó sẽ kiểm tra lỗi cấu hình của bạn và đưa ra bản tóm tắt về nó:

#testparm

Tải tập tin cấu hình smb từ /etc/samba/smb.conf

Đã tải tập tin dịch vụ OK.

Vai trò máy chủ: ROLE_DOMAIN_MEMBER

Nhấn enter để xem kết xuất các định nghĩa dịch vụ của bạn

Như bạn có thể thấy, chúng ta đã thiết lập các thông số chính xác để máy tính của mình trở thành thành viên của miền. Bây giờ là lúc thử đăng nhập trực tiếp vào miền. Để thực hiện việc này, hãy nhập lệnh:

quảng cáo ròng tham gia -U tên người dùng -D MIỀN

Và nếu thành công, bạn sẽ thấy một cái gì đó tương tự như:

# net quảng cáo tham gia -U tên người dùng -D MIỀN

Nhập mật khẩu của tên người dùng:

Sử dụng tên miền ngắn -- DOMAIN

Đã tham gia "SMBSRV01" vào vương quốc "domain.com"

tùy chọn lệnh net được sử dụng

U username%password : Tham số bắt buộc thay vì tên người dùng, bạn phải thay thế tên người dùng bằng quyền quản trị viên tên miền và chỉ định mật khẩu.

D TÊN MIỀN: TÊN MIỀN - chính tên miền, bạn không cần phải chỉ định tên miền, nhưng tốt hơn hết là bạn nên luôn làm điều đó - mọi chuyện sẽ không tệ hơn nữa.

S win_domain_controller: win_domain_controller có thể không được chỉ định, nhưng đôi khi máy chủ không tự động tìm thấy bộ điều khiển miền.

createcomputer="OU/OU/..." : Trong AD, OU (Organizational Unit) thường được sử dụng, có OU = Office trong root domain, trong đó OU = Cabinet nên bạn có thể thêm ngay vào cái bạn muốn cần, bạn có thể chỉ định nó như thế này: sudo net ads join -U username createcomputer="Office/Cabinet".

Nếu không còn tin nhắn nào nữa thì mọi chuyện đều ổn. Hãy thử ping máy tính của bạn theo tên từ một thành viên miền khác để đảm bảo rằng mọi thứ đều được đăng ký trong miền như bình thường.

Bạn cũng có thể gõ lệnh:

thử nghiệm quảng cáo mạng

Nếu mọi thứ đều tốt, bạn có thể thấy:

#net quảng cáo thử nghiệm tham gia

Tham gia là được

Nhưng đôi khi sau thông báo về việc tham gia miền, lỗi như 3) xuất hiện:

Cập nhật DNS không thành công!

Điều này không tốt lắm và trong trường hợp này, bạn nên đọc lại phần thiết lập DNS cao hơn một chút và hiểu mình đã làm gì sai. Sau đó, bạn cần xóa máy tính khỏi miền và thử nhập lại. Nếu bạn chắc chắn rằng mình đã định cấu hình mọi thứ chính xác nhưng DNS vẫn chưa được cập nhật, thì bạn có thể thêm mục nhập cho máy tính của mình vào máy chủ DNS theo cách thủ công và mọi thứ sẽ hoạt động. Tất nhiên là nếu không có lỗi nào khác và bạn đã đăng nhập vào miền thành công. Tuy nhiên, tốt hơn hết bạn nên tìm hiểu lý do tại sao DNS không được cập nhật tự động. Điều này có thể không chỉ do máy tính của bạn mà còn do cài đặt AD không chính xác.

Trước khi tìm hiểu nguyên nhân DNS không được cập nhật, bạn đừng quên khởi động lại máy tính sau khi nhập tên miền nhé! Rất có thể điều này sẽ giải quyết được vấn đề.

Nếu mọi thứ đều không có lỗi thì xin chúc mừng, bạn đã đăng nhập vào miền thành công! Bạn có thể vào AD mà xem. Bạn cũng nên kiểm tra xem bạn có thể xem các tài nguyên trong miền hay không. Để thực hiện việc này, hãy cài đặt smbclient:

sudo aptitude cài đặt smbclient

Bây giờ bạn có thể xem tài nguyên của máy tính miền. Nhưng để làm được điều này, bạn cần phải có vé kerberos, tức là. nếu chúng tôi xóa chúng, chúng tôi sẽ lấy lại chúng thông qua kinit (xem ở trên). Hãy xem những tài nguyên nào được máy tính trạm cung cấp cho mạng:

máy trạm smbclient -k -L

Bạn sẽ thấy danh sách các tài nguyên được chia sẻ trên máy tính này.

Thiết lập Winbind

Ví dụ: nếu bạn cần làm việc bằng cách nào đó với người dùng miền, hãy định cấu hình chia sẻ SMB với kiểm soát truy cập, thì ngoài Samba, bạn cũng sẽ cần Winbind - một daemon đặc biệt dùng để kết nối hệ thống quản lý nhóm và người dùng Linux cục bộ với Active Máy chủ thư mục. Nói một cách đơn giản, Winbind là cần thiết nếu bạn muốn xem người dùng tên miền trên máy tính Ubuntu của mình.

Winbind cho phép bạn ánh xạ tất cả người dùng và nhóm AD vào hệ thống Linux của bạn bằng cách gán ID cho họ từ một phạm vi nhất định. Bằng cách này, bạn có thể chỉ định người dùng trong miền làm chủ sở hữu các thư mục và tệp trên máy tính của mình cũng như thực hiện bất kỳ thao tác nào khác liên quan đến người dùng và nhóm.

Để định cấu hình Winbind, cùng một tệp /etc/samba/smb.conf được sử dụng. Thêm các dòng sau vào phần:

# Tùy chọn khớp người dùng miền và người dùng ảo trong hệ thống thông qua Winbind.

# Phạm vi ID cho người dùng và nhóm ảo.

Idmap uid = 10000 - 40000

Idmap gid = 10000 - 40000

# Không nên tắt các tùy chọn này.

Nhóm enum Winbind = có

Người dùng Winbind enum = có

# Sử dụng tên miền mặc định cho tên người dùng. Nếu không có tùy chọn này, tên người dùng và nhóm

# sẽ được sử dụng với một tên miền, tức là thay vì tên người dùng - DOMAIN\tên người dùng.

# Đây có thể là điều bạn muốn, nhưng việc kích hoạt tùy chọn này thường dễ dàng hơn.

Winbind sử dụng tên miền mặc định = có

# Nếu bạn muốn cho phép người dùng miền sử dụng dòng lệnh thì

# thêm dòng sau, nếu không shell sẽ gọi /bin/false

Vỏ mẫu = /bin/bash

# Để tự động cập nhật ticket Kerberos với module pam_winbind.so, bạn cần thêm dòng

Vé làm mới Winbind = có

Tùy chọn:

idmap uid = 10000 - 40000

idmap gid = 10000 - 40000

trong các phiên bản mới của Samba đã lỗi thời và khi kiểm tra cấu hình samba bằng testparm, một cảnh báo sẽ được đưa ra:

CẢNH BÁO: Tùy chọn "idmap uid" không được dùng nữa

CẢNH BÁO: Tùy chọn “idmap gid” không được dùng nữa

Để xóa cảnh báo, bạn cần thay thế những dòng này bằng dòng mới:

cấu hình idmap *: phạm vi = 10000-20000

cấu hình idmap * : backend = tdb

Bây giờ khởi động lại daemon Winbind và Samba theo thứ tự sau:

sudo /etc/init.d/winbind dừng lại

khởi động lại sudo smbd

sudo /etc/init.d/winbind bắt đầu

Hãy khởi động

kiểm tra sudo

Hãy xem có lỗi hoặc cảnh báo nào không nếu xuất hiện thông báo sau:

"rlimit_max: rlimit_max (1024) dưới giới hạn tối thiểu của Windows (16384)"

Bạn có thể sửa nó mà không cần khởi động lại như thế này:

ulimit -n 16384

Để lưu sau khi khởi động lại, hãy chỉnh sửa tệp /etc/security/limits.conf

# Thêm các dòng sau vào cuối file:

* - số 16384

gốc - nofile 16384

Sau khi khởi động lại, hãy kiểm tra xem Winbind đã thiết lập mối quan hệ tin cậy với AD bằng lệnh:

#wbinfo -t

đã kiểm tra bí mật tin cậy cho miền DCN thông qua cuộc gọi RPC đã thành công

Và Winbind cũng đã thấy người dùng và nhóm từ AD sử dụng lệnh 4):

wbinfo -u

wbinfo -g

Hai lệnh này sẽ liệt kê người dùng và nhóm tương ứng từ miền. Có hoặc không có tiền tố DOMAIN\, tùy thuộc vào giá trị bạn đã chỉ định cho tham số "winbind use default domain" trong smb.conf.

Vì vậy, Winbind hoạt động nhưng chưa được tích hợp vào hệ thống.

D thêm Winbind làm nguồn của người dùng và nhóm

Để Ubuntu của bạn hoạt động minh bạch với người dùng trong miền, đặc biệt là để bạn có thể chỉ định người dùng trong miền làm chủ sở hữu các thư mục và tệp, bạn cần yêu cầu Ubuntu sử dụng Winbind làm nguồn thông tin bổ sung về người dùng và nhóm.

Để thực hiện việc này, hãy thay đổi hai dòng trong tệp /etc/nsswitch.conf:

mật khẩu:tương thích

nhóm: tương thích

thêm winbind vào cuối:

mật khẩu: tương thích winbind

nhóm: tương thích winbind

tập tin: dns mdns4_minimal mdns4

Máy chủ Ubuntu 14.04, tệp /etc/nsswitch.conf không chứa dòng “files: dns mdns4_minimal mdns4” thay vào đó là: “hosts: files mdns4_minimal dns won” Tôi đã chuyển đổi thành: “hosts: dns mdns4_minimal mdns4 files” sau mọi thứ đều hiệu quả

Bây giờ hãy kiểm tra xem Ubuntu có đang hỏi Winbind về thông tin người dùng và nhóm hay không bằng cách chạy

mật khẩu nhận được

nhóm nhận được

Lệnh đầu tiên sẽ trả về toàn bộ nội dung của tệp /etc/passwd, tức là người dùng cục bộ của bạn, cộng với người dùng miền có ID từ phạm vi bạn đã chỉ định trong smb.conf. Thứ hai nên làm tương tự cho các nhóm.

Bây giờ bạn có thể lấy bất kỳ người dùng tên miền nào và đặt anh ta, chẳng hạn như chủ sở hữu của một tệp.

MỘT ủy quyền trong Ubuntu thông qua người dùng tên miền

Mặc dù thực tế là tất cả người dùng miền đã thực sự trở thành người dùng chính thức của hệ thống (có thể được xác minh bằng cách chạy hai lệnh cuối cùng từ phần trước), vẫn không thể đăng nhập vào hệ thống như bất kỳ ai trong số họ. Để kích hoạt khả năng ủy quyền người dùng miền trên máy tính chạy Ubuntu, bạn cần định cấu hình PAM để hoạt động với Winbind.

Đối với Ubuntu 10.04 trở lên, chỉ thêm một dòng vào tệp /etc/pam.d/common-session, vì PAM đã thực hiện tốt công việc ủy ​​quyền:

Đối với Ubuntu 13.10, để trường nhập đăng nhập thủ công xuất hiện, bạn cần thêm dòng bên dưới vào bất kỳ tệp nào từ thư mục /etc/lightdm/lightdm.conf/:

chào-show-manual-login=true

Đối với Ubuntu 9.10 trở xuống, bạn sẽ phải chỉnh sửa một số tệp (nhưng không ai cấm sử dụng phương pháp này trong 10.04 - nó cũng hoạt động):

Trình tự các dòng trong tập tin rất quan trọng!

/etc/pam.d/common-auth

yêu cầu xác thực pam_env.so

xác thực đủ pam_unix.so likeauth nullok try_first_pass

xác thực đủ pam_winbind.so use_first_pass krb5_auth krb5_ccache_type=FILE

yêu cầu xác thực pam_deny.so

/etc/pam.d/common-account

đủ tài khoản pam_winbind.so

yêu cầu tài khoản pam_unix.so

/etc/pam.d/common-session

phiên tùy chọn pam_mkhomedir.so skel=/etc/skel/umask=0077

phiên tùy chọn pam_ck_connector.so nox11

phiên yêu cầu pam_limits.so

phiên yêu cầu pam_env.so

phiên yêu cầu pam_unix.so

/etc/pam.d/common-password

mật khẩu đủ pam_unix.so try_first_pass use_authtok nullok sha512 bóng

đủ mật khẩu pam_winbind.so

yêu cầu mật khẩu pam_deny.so

Và cuối cùng, bạn cần di chuyển việc khởi chạy Winbind khi khởi động hệ thống sau tất cả các dịch vụ khác (theo mặc định, nó bắt đầu ở chỉ số 20). Để thực hiện việc này, hãy chạy lệnh sau trong terminal:

sudo bash -c "for i in 2 3 4 5; do mv /etc/rc$i.d/S20winbind /etc/rc$i.d/S99winbind; xong"

Điều này tương đương với việc chạy lệnh cho từng cấp độ (trong ví dụ là 4):

mv /etc/rc4.d/S20winbind /etc/rc4.d/S99winbind

Trong một số trường hợp, winbind có thể có runlevel khác (ví dụ: S02winbind). Vì vậy, trước tiên hãy kiểm tra tên tệp bằng cách chạy lệnh “ls /etc/rc(2,3,4,5).d/ | grep winbind" (không có dấu ngoặc kép).

Xong, mọi cài đặt đã hoàn tất. Khởi động lại và thử đăng nhập bằng tài khoản người dùng miền.

Tình huống thường xảy ra khi bộ điều khiển miền không khả dụng vì nhiều lý do - bảo trì, mất điện hoặc bạn mang máy tính xách tay về nhà và muốn làm việc. Trong trường hợp này, Winbind có thể được cấu hình để lưu trữ tài khoản người dùng trong miền. Để làm điều này bạn cần phải làm như sau. Thêm các dòng sau vào phần /etc/samba/smb.conf của tệp:

Đăng nhập ngoại tuyến Winbind = có

# Thời gian lưu trữ tài khoản, mặc định là 300 giây

Thời gian bộ đệm Winbind = 300

# Cài đặt tùy chọn, nhưng loại bỏ các khoảng dừng tẻ nhạt, chỉ định bộ điều khiển miền dc,

# bạn cũng có thể chỉ định ip, nhưng đây là dạng xấu

Máy chủ mật khẩu = dc

Thông thường điều này là đủ. Nếu xảy ra lỗi, bạn cần tạo một tập tin /etc/security/pam_winbind.conf với nội dung sau 5 ):

Chú ý! Khi sử dụng các mẹo dưới đây có thể xảy ra lỗi “Xác thực không thành công” hoàn toàn ngẫu nhiên! Vì vậy, mọi việc bạn làm đều có nguy cơ và rủi ro của riêng bạn!

# tập tin cấu hình pam_winbind

# /etc/security/pam_winbind.conf

#bật gỡ lỗi

Gỡ lỗi = không

# yêu cầu đăng nhập vào bộ nhớ đệm nếu có thể

# (cần "winbind đăng nhập ngoại tuyến = có" trong smb.conf)

Đã lưu vào bộ nhớ cache_login = có

# xác thực bằng kerberos

Krb5_auth = có

# khi sử dụng kerberos, hãy yêu cầu loại bộ đệm thông tin xác thực krb5 "FILE"

# (để trống để chỉ xác thực krb5 nhưng không có vé

#sau đó)

Krb5_ccache_type = TỆP

# thực hiện xác thực thành công tùy thuộc vào tư cách thành viên của một SID

# (cũng có thể lấy tên)

;require_membership_of =

Im lặng = có

Tệp /etc/pam.d/gnome-screensaver trong trường hợp này có dạng:

xác thực đủ pam_unix.so nullok_secure

yêu cầu xác thực pam_deny.so

Tệp /etc/pam.d/common-auth cũng bị thay đổi:

xác thực tùy chọn pam_group.so

xác thực đủ pam_unix.so nullok_secure use_first_pass

xác thực đủ pam_winbind.so use_first_pass

yêu cầu xác thực pam_deny.so

  • Dịch

Nếu bạn đã nắm vững kiến ​​thức cơ bản về terminal, bạn có thể sẵn sàng kết hợp các lệnh đã học. Đôi khi việc thực thi từng lệnh shell một lần là đủ để giải quyết một vấn đề nào đó, nhưng trong một số trường hợp, việc nhập hết lệnh này đến lệnh khác là quá tẻ nhạt và phi lý. Trong tình huống như thế này, một số ký hiệu đặc biệt, như dấu ngoặc nhọn, sẽ rất hữu ích.

Đối với shell, trình thông dịch lệnh Linux, những ký tự bổ sung này không gây lãng phí không gian màn hình. Họ là những đội mạnh mẽ có thể gắn kết các phần thông tin khác nhau lại với nhau, tách biệt những gì trước đây là toàn bộ và làm được nhiều hơn thế. Một trong những tính năng đơn giản nhất nhưng mạnh mẽ nhất và được sử dụng rộng rãi của shell là chuyển hướng các luồng đầu vào/đầu ra tiêu chuẩn.

Ba luồng I/O tiêu chuẩn

Để hiểu những gì chúng ta sắp nói ở đây, điều quan trọng là phải biết dữ liệu có thể được chuyển hướng đến từ đâu và đi đâu. Linux có ba luồng I/O tiêu chuẩn.

Đầu tiên là luồng đầu vào tiêu chuẩn. Trong hệ thống, đây là luồng số 0 (vì trong máy tính, việc đếm thường bắt đầu từ số 0). Số luồng còn được gọi là mô tả. Luồng này thể hiện một số thông tin được truyền đến thiết bị đầu cuối, đặc biệt là các hướng dẫn được truyền tới shell để thực thi. Thông thường, dữ liệu sẽ đi vào luồng này khi người dùng nhập nó từ bàn phím.

Luồng thứ hai là luồng đầu ra tiêu chuẩn, được đánh số 1. Đây là luồng dữ liệu mà shell xuất ra sau khi thực hiện một số hành động. Thông thường, dữ liệu này kết thúc trong cùng một cửa sổ đầu cuối nơi nhập lệnh khiến nó xuất hiện.

Và cuối cùng, luồng thứ ba là luồng lỗi tiêu chuẩn, nó có số xử lý 2. Luồng này tương tự như luồng đầu ra tiêu chuẩn, vì thông thường những gì đi vào nó sẽ kết thúc trên màn hình đầu cuối. Tuy nhiên, nó vốn khác với đầu ra tiêu chuẩn và do đó, các luồng này có thể được kiểm soát riêng nếu muốn. Điều này rất hữu ích, ví dụ, trong tình huống sau đây. Có một nhóm xử lý một lượng lớn dữ liệu, thực hiện một thao tác phức tạp và dễ xảy ra lỗi. Bạn muốn tải trọng mà lệnh này tạo ra không bị trộn lẫn với các thông báo lỗi. Điều này đạt được thông qua việc chuyển hướng riêng biệt các luồng đầu ra và lỗi.

Như bạn có thể đã đoán, chuyển hướng I/O có nghĩa là làm việc với các luồng được mô tả ở trên và chuyển hướng dữ liệu đến nơi mà lập trình viên cần. Việc này được thực hiện bằng cách sử dụng các ký hiệu > và< в kết hợp khác nhau, việc sử dụng tùy thuộc vào nơi dữ liệu được chuyển hướng cuối cùng sẽ đi đến đâu.

Chuyển hướng đầu ra tiêu chuẩn

Giả sử bạn muốn tạo một tệp sẽ được ghi vào ngay hiện tại và thời gian. Để làm cho vấn đề dễ dàng hơn, có một lệnh, được đặt tên phù hợp date , sẽ trả về những gì chúng ta cần. Thông thường, các lệnh xuất dữ liệu ra đầu ra tiêu chuẩn. Để dữ liệu này xuất hiện trong tệp, bạn cần thêm ký hiệu > sau lệnh, trước tên tệp đích. Trước và sau > bạn cần đặt một khoảng trắng.

Khi sử dụng chuyển hướng, bất kỳ tệp nào được chỉ định sau > sẽ bị ghi đè. Nếu không có gì có giá trị trong tệp và nội dung của nó có thể bị mất, thì trong thiết kế của chúng tôi, nó được phép sử dụng tập tin hiện có. Thông thường tốt hơn là sử dụng Trường hợp như vậy tên của một tập tin chưa tồn tại. Tập tin này sẽ được tạo sau khi lệnh được thực thi. Hãy gọi nó là date.txt . Phần mở rộng tệp sau dấu chấm thường không quan trọng lắm, nhưng phần mở rộng giúp sắp xếp mọi thứ. Vì vậy, đây là lệnh của chúng tôi:

$date>date.txt
Điều này không có nghĩa là bản thân lệnh này cực kỳ hữu ích, tuy nhiên, dựa vào nó, chúng ta có thể làm được điều gì đó thú vị hơn. Giả sử bạn muốn biết lưu lượng truy cập của mình đang định tuyến lại trên Internet đến một số điểm cuối như thế nào bằng cách ghi lại dữ liệu hàng ngày. Lệnh traceroute sẽ giúp giải quyết vấn đề này, lệnh này báo cáo chi tiết về tuyến đường lưu lượng giữa máy tính của chúng ta và điểm cuối được chỉ định khi gọi lệnh dưới dạng URL. Dữ liệu bao gồm thông tin về tất cả các bộ định tuyến mà lưu lượng truy cập đi qua.

Vì chúng ta đã có một tệp có ngày tháng nên sẽ hoàn toàn hợp lý nếu chỉ cần thêm dữ liệu nhận được từ traceroute vào tệp này. Để thực hiện việc này, bạn cần sử dụng hai ký hiệu >, đặt lần lượt từng ký hiệu. Kết quả là đội mới, chuyển hướng đầu ra sang một tệp, nhưng không ghi đè lên nó mà thêm dữ liệu mới sau dữ liệu cũ, sẽ trông như thế này:

$ traceroute google.com >> date.txt
Bây giờ tất cả những gì chúng ta phải làm là thay đổi tên tệp thành tên nào đó có ý nghĩa hơn bằng cách sử dụng lệnh mv, lệnh này lấy tên tệp gốc làm đối số đầu tiên và tên tệp mới làm đối số thứ hai:

$ mv date.txt trace1.txt

Chuyển hướng đầu vào tiêu chuẩn

Sử dụng một dấu hiệu< вместо >chúng ta có thể chuyển hướng đầu vào tiêu chuẩn bằng cách thay thế nó bằng nội dung của một tệp.

Giả sử chúng ta có hai tệp: list1.txt và list2.txt, mỗi tệp chứa danh sách các chuỗi chưa được sắp xếp. Mỗi danh sách có các thành phần riêng biệt nhưng một số thành phần trong danh sách giống nhau. Chúng ta có thể tìm các dòng nằm trong cả danh sách thứ nhất và thứ hai bằng cách sử dụng lệnh comm, nhưng trước khi sử dụng, danh sách phải được sắp xếp.

tồn tại lệnh sắp xếp, trả về danh sách đã sắp xếp cho thiết bị đầu cuối mà không lưu dữ liệu đã sắp xếp vào tệp mà nó được lấy. Bạn có thể gửi phiên bản đã sắp xếp của từng danh sách tới tập tin mới, sử dụng lệnh >, sau đó sử dụng lệnh comm. Tuy nhiên, cách tiếp cận này sẽ yêu cầu ít nhất hai lệnh, mặc dù điều tương tự có thể được thực hiện trên một dòng mà không tạo ra các tệp không cần thiết.

Vì vậy chúng ta có thể sử dụng lệnh< для перенаправления отсортированной версии каждого файла команде comm . Вот что у нас получилось:

$ liên lạc<(sort list1.txt) <(sort list2.txt)
Các dấu ngoặc đơn ở đây có ý nghĩa tương tự như trong toán học. Shell xử lý các lệnh trong ngoặc đơn trước, sau đó mới đến mọi thứ khác. Trong ví dụ của chúng tôi, các dòng trong tệp trước tiên được sắp xếp, sau đó kết quả được chuyển đến lệnh comm, lệnh này sẽ hiển thị kết quả so sánh các danh sách.

Chuyển hướng luồng lỗi tiêu chuẩn

Cuối cùng, hãy nói về chuyển hướng lỗi tiêu chuẩn. Điều này có thể cần thiết, chẳng hạn như để tạo các tệp nhật ký có lỗi hoặc để kết hợp các thông báo lỗi và dữ liệu được một lệnh nhất định trả về trong một tệp.

Ví dụ: điều gì sẽ xảy ra nếu bạn muốn tìm kiếm thông tin trong toàn bộ hệ thống của mình về các giao diện không dây mà người dùng không có quyền root có thể truy cập được? Để làm điều này, bạn có thể sử dụng lệnh find mạnh mẽ.

Thông thường, khi người dùng bình thường chạy lệnh find trên toàn hệ thống, nó sẽ xuất ra cả dữ liệu hữu ích và lỗi cho terminal. Đồng thời, thường có nhiều cái sau hơn cái trước, điều này gây khó khăn cho việc tìm thấy thứ bạn cần trong đầu ra lệnh. Giải pháp cho vấn đề này khá đơn giản: chỉ cần chuyển hướng luồng lỗi tiêu chuẩn đến một tệp bằng lệnh 2> (hãy nhớ, 2 là mô tả cho luồng lỗi tiêu chuẩn). Kết quả là chỉ những gì lệnh gửi đến đầu ra tiêu chuẩn mới xuất hiện trên màn hình:

$ find / -name wireless 2> bị từ chối.txt
Phải làm gì nếu bạn cần lưu kết quả làm việc của nhóm vào tập tin riêng biệt mà không trộn lẫn dữ liệu này với thông tin lỗi? Vì các luồng có thể được chuyển hướng độc lập với nhau nên chúng ta có thể thêm lệnh để chuyển hướng đầu ra tiêu chuẩn sang một tệp ở cuối cấu trúc của mình:

$ find / -name không dây 2> bị từ chối.txt > Found.txt
Xin lưu ý rằng dấu ngoặc nhọn đầu tiên đi kèm với số - 2> và dấu ngoặc thứ hai không có số đó. Điều này là do đầu ra tiêu chuẩn có số điều khiển 1 và lệnh > nhằm mục đích chuyển hướng đầu ra tiêu chuẩn nếu không chỉ định số điều khiển.

Cuối cùng, nếu bạn muốn mọi thứ mà lệnh xuất ra đều nằm trong một tệp, bạn có thể chuyển hướng cả hai luồng đến cùng một vị trí bằng lệnh &>:

$ find / -name không dây &> results.txt

Kết quả

Ở đây chúng tôi chỉ xem xét những điều cơ bản về cơ chế chuyển hướng luồng trong trình thông dịch dòng lệnh Tuy nhiên, Linux, ngay cả những điều bạn học được ngày hôm nay cũng mang lại cho bạn những khả năng gần như không giới hạn. Và nhân tiện, giống như mọi thứ khác liên quan đến hoạt động trong thiết bị đầu cuối, việc thành thạo việc chuyển hướng luồng cần phải thực hành. Do đó, chúng tôi khuyên bạn nên bắt đầu thử nghiệm của riêng mình với > và< .

Gởi bạn đọc! Bạn có biết không ví dụ thú vị sử dụng tính năng chuyển hướng luồng trong Linux để giúp người mới sử dụng thoải mái hơn với kỹ thuật đầu cuối này?