Điểm:1

Gặp khó khăn trong việc hiểu các biến và lệnh cơ bản do hiểu biết của tôi về môi trường Linux

lá cờ cn

Tôi đang gặp khó khăn trong việc hiểu một số khái niệm cơ bản về Linux. Và ảnh hưởng của một số biến đối với các khái niệm đó.

Những khái niệm cơ bản đó là môi trường Virtuel, shell, tty.

Các biến: $PS1 $LANG

Các lệnh:

export (xuất biến từ shell này sang shell khác? Điều này cũng hoạt động với môi trường tty và ảo? Nếu tôi mở một tab mới trong Ubuntu (tty? terminal?) thì nó không xuất sang tab kia?

vi-tôi?

Tôi nghĩ rằng tất cả những vấn đề này đều liên quan đến hiểu biết cơ bản của tôi về shell, môi trường ảo và tty.

Điều đó không tốt vào lúc này.

Vì vậy, tôi hy vọng ai đó sẽ tử tế để giải thích điều này cho tôi?

Artur Meinild avatar
lá cờ vn
Chào mừng! Để tạo một bài Q&A hay, Bạn chỉ nên tập trung câu hỏi của mình vào một chủ đề. Ngoài ra, bạn có thể đi một chặng đường dài bằng cách tìm kiếm trên internet một số câu hỏi của mình - câu trả lời luôn có sẵn.
Satoshi Nakamoto avatar
lá cờ lc
`tty` không phải là trình bao mà là một dạng giao tiếp giống như telnet.
Satoshi Nakamoto avatar
lá cờ lc
https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con
Satoshi Nakamoto avatar
lá cờ lc
Tôi phải gắn cờ câu hỏi này, (sau khi tôi đã bình chọn), vì hầu hết các câu hỏi của bạn (bạn đã thực hiện 6 câu hỏi), đều đã bị trùng lặp.Bạn nên nghiên cứu trước trong Stack tất cả những câu hỏi đó để tìm câu trả lời cho mình trước khi đặt câu hỏi mới. Câu hỏi của bạn phải mới (hoặc nếu vấn đề của bạn không thể giải quyết được và nó cụ thể, thì đó phải là một câu hỏi khác)
Điểm:1
lá cờ cn

Các vỏ bọc là trình thông dịch dòng lệnh dịch các lệnh do người dùng nhập vào thành các hành động được thực hiện bởi hệ điều hành. Trình bao có thể được bắt đầu theo cách tương tác (nơi người dùng có thể nhập và thực thi lệnh) hoặc theo cách không tương tác (được phân nhánh bởi tập lệnh hoặc chương trình như crontab, vân vân.).

Các trình bao tương tác được bắt đầu trong trình giả lập thiết bị đầu cuối, đề cập đến các ứng dụng GUI như thiết bị đầu cuối gnome, xterm, v.v. hoặc trong TTY đề cập đến bảng điều khiển văn bản ảo. Các TTY có thể truy cập bằng tổ hợp phím Điều khiển thay thế F1-9. Trong các bản phân phối máy tính để bàn của Linux, môi trường máy tính để bàn đang chạy trong một trong các TTY này.

Người giới thiệu:

Bất kể đó là trình giả lập thiết bị đầu cuối hay TTY, bạn đều có khả năng thực hiện những điều tương tự với trình bao chạy bên trong.


Shell của người dùng mặc định trong Ubuntu là Bash. Có một tệp khởi tạo được gọi là .bashrc được đặt trong thư mục chính của người dùng. Tệp này (cùng với một số tệp khởi tạo hệ thống khác như /etc/bash.bashrc) Là có nguồn gốc khi người dùng mở một shell tương tác mới. Do đó, môi trường mặc định của người dùng được tạo.

Theo nghĩa đen bằng cách tìm nguồn cung ứng .bashrc một số biến môi trường nhận được các giá trị nhất định. Các biến môi trường như vậy là:

Vì vậy, nếu bạn muốn thay đổi vĩnh viễn một số biến môi trường (trong trình bao Bash của người dùng), bạn có thể sửa đổi (hoặc đặt) giá trị của nó trong .bashrc. Nếu không, thay đổi sẽ chỉ có hiệu lực đối với phiên bản hiện tại của trình bao.

Ví dụ: mở một thiết bị đầu cuối mới và gõ PS1='prompt_changed->' và lời nhắc của bạn sẽ được thay đổi thành chuỗi đó. Sau đó, tiếp tục mở cửa sổ đầu cuối đó và mở một thiết bị đầu cuối mới - bạn sẽ thấy thay đổi này không được áp dụng ở đó. Để khôi phục thiết bị đầu cuối đầu tiên, bạn có thể lấy nguồn thủ công .bashrc tập tin bằng lệnh . ~/.bashrc.


Khi bạn sử dụng xuất khẩu lệnh bạn đang xuất một biến sang vỏ con được rẽ nhánh từ hệ vỏ hiện tại (hệ vỏ con), không phải với các hệ vỏ (anh chị em) khác được tạo bởi các tiến trình cha của hệ vỏ hiện tại.Đây là một ví dụ:

user@host:~$ VAR='Xin chào!' # Xác định một biến gọi là VAR
user@host:~$ echo $VAR # Xuất giá trị của biến
Xin chào!
user@host:~$ export VAR # Xuất biến
user@host:~$ bash # Ngã ba vỏ bash mới
user@host:~$ echo $VAR # Xuất giá trị của biến đã xuất
Xin chào!
user@host:~$ exit # Thoát sang trình bao chính
user@host:~$ sh # Ngã ba vỏ sh (dấu gạch ngang) mới
$ echo $VAR # Xuất giá trị của biến đã xuất
Xin chào!

Lệnh env được sử dụng để thay đổi môi trường thực thi lệnh hoặc tập lệnh. Dưới đây là một vài dòng từ người đàn ông ghen tị:

env - đặt môi trường cho lệnh gọi. Các env tiện ích sẽ có được môi trường hiện tại, sửa đổi nó theo các đối số của nó, sau đó gọi tiện ích được đặt tên bởi toán hạng tiện ích với môi trường đã sửa đổi.

-tôi Gọi tiện ích với chính xác môi trường được chỉ định bởi các đối số; môi trường kế thừa sẽ bị bỏ qua hoàn toàn.

Lệnh sau: env -i PATH=/mybin mygrep xyz myfile gọi lệnh mygrep với một cái mới CON ĐƯỜNG value là mục nhập duy nhất trong môi trường của nó. Trong trường hợp này, CON ĐƯỜNG được sử dụng để xác định vị trí mygrep, mà sau đó phải nằm trong /mybin.

env thường được sử dụng ở phần đầu của tập lệnh (trong cái gọi là shebang) để tăng tính di động của chúng. Đây là hai chủ đề bao gồm việc sử dụng này:

Khi chạy mà không có đối số, env lệnh xuất ra một danh sách các biến môi trường.


Một lần nữa, các .bashrc tệp trong thư mục chính tùy chỉnh các tính năng của trình bao, chẳng hạn như tạo hoặc sửa đổi các biến và bí danh cũng như xác định các hàm.

Ví dụ, hãy xác định chức năng sau ở dưới cùng của .bashrc tập tin.

xin chào() { echo "Xin chào, ${USER^}!"; }

Sau khi lưu tệp, bạn có thể lấy nguồn hoặc mở một phiên bản thiết bị đầu cuối mới và nhập xin chào.

spa@host:~$ xin chào
Xin chào các Spa!

Vì vậy, chúng ta có thể thấy chức năng này (hoặc biến hoặc bí danh) có sẵn trong trình bao hiện tại. Ở giai đoạn này nó được gọi là địa phương chức năng (hoặc biến hoặc bí danh), vì vậy nếu chúng ta kiểm tra môi trường bằng cách vi | xin chào chức năng của chúng tôi sẽ không có ở đó. Các biến cục bộ chỉ tồn tại trong trình bao hiện tại và không thể ảnh hưởng đến các lệnh hoặc ứng dụng khác.

Sau khi định nghĩa một hàm (biến, bí danh) trong .bashrc chúng ta có thể xuất nó để làm cho nó có sẵn cho các trình bao phụ (các lệnh hoặc tập lệnh) được rẽ nhánh từ trình bao hiện tại - do đó, nó trở thành toàn cầu hoặc môi trường chức năng (biến, bí danh).

xin chào() { echo "Xin chào, ${USER^}!"; }
xuất -f xin chào
spas@host:~$ source ~/.bashrc # trong bash 'source' là bản tóm tắt của '.'
spas@host:~$ env | grep 'hello' # parse 'hello' trong đầu ra của 'env'
BASH_FUNC_hello%%=() { echo "Xin chào, ${USER^}!"
spas@host:~$ bash -c 'hello' # fork một shell phụ không tương tác
Xin chào các Spa! # và thực hiện chức năng bên trong

Hãy nhớ rằng các trình bao không tương tác, trong hầu hết các trường hợp, không cung cấp nguồn theo mặc định cho các tệp khởi tạo dưới dạng .bashrc, vì vậy môi trường của chúng bị hạn chế hơn so với môi trường của các shell tương tác.

Ví dụ: khi bạn thiết kế một tập lệnh sẽ được sử dụng bởi crontab bạn phải sử dụng đường dẫn đầy đủ đến các lệnh hoặc đảm bảo rằng nó có môi trường cần thiết.

Satoshi Nakamoto avatar
lá cờ lc
Câu trả lời của bạn không trả lời "Tôi không hiểu shell trong tty's..." nhưng trả lời "Tôi không hiểu .. ($PS1, export, env, $LANG)", sau đó tôi đã nâng cấp nhưng câu hỏi này cần phải hãy tập trung, đã có câu trả lời cho tty ở đây trong Stack.
Satoshi Nakamoto avatar
lá cờ lc
Anh ấy đã đưa ra 6 câu hỏi khác nhau: 1. Mục đích của PS1 là gì (thực sự có rất nhiều chi tiết kỹ thuật về chủ đề này) 2. bắt đầu một trình bao ảo thứ hai trong cùng một tty? 3. Tôi có thể xuất các biến sang các shell khác trong shell đầu tiên 4. Bạn có thể sử dụng lệnh env để đặt $LANG... 5. Env -i thực sự làm gì? 6. hiểu biết cơ bản về shell và tty's

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.