50 câu hỏi và câu trả lời phỏng vấn về Shell Scripting (2024)

Dưới đây là các câu hỏi và câu trả lời phỏng vấn Shell Scripting dành cho những ứng viên mới ra trường cũng như có kinh nghiệm để có được công việc mơ ước của họ.

 

Câu hỏi và câu trả lời phỏng vấn về Linux Shell Scripting

1) Vỏ là gì?

Shell là giao diện giữa người dùng và kernel. Mặc dù chỉ có thể có một kernel; một hệ thống có thể có nhiều shell chạy đồng thời. Vì vậy, bất cứ khi nào người dùng nhập lệnh thông qua bàn phím, shell sẽ giao tiếp với kernel để thực thi lệnh đó và sau đó hiển thị đầu ra cho người dùng.

👉 Tải xuống bản PDF miễn phí: Câu hỏi và câu trả lời phỏng vấn Shell Scripting


2) Tập lệnh Shell là gì?

Shell Scripting là một chương trình máy tính mã nguồn mở được thiết kế để chạy trên nền Unix/Linux. Shell Scripting là chương trình viết một loạt lệnh để shell thực thi. Nó có thể kết hợp các chuỗi lệnh dài và lặp đi lặp lại thành một tập lệnh đơn giản và duy nhất có thể được lưu trữ và thực thi bất cứ lúc nào, điều này làm giảm nỗ lực lập trình.

Câu hỏi phỏng vấn Shell Scripting


3) Các loại shell thường được sử dụng trên hệ thống Linux điển hình là gì?

csh,ksh,bash,Bourne. Shell tiên tiến và được sử dụng phổ biến nhất hiện nay là “Bash”.


4) Tương đương với lối tắt tệp mà chúng ta có một cửa sổ trên hệ thống Linux là gì?

Các phím tắt được tạo bằng cách sử dụng “liên kết” trên Linux. Có hai loại liên kết có thể được sử dụng là “liên kết mềm” và “liên kết cứng”.


5) Sự khác biệt giữa liên kết mềm và liên kết cứng là gì?

Liên kết mềm là liên kết đến tên tệp và cũng có thể nằm trên các hệ thống tệp khác nhau; tuy nhiên các liên kết cứng là liên kết đến nút của tệp và phải nằm trên cùng hệ thống tệp với tệp của tệp. Xóa file gốc khiến link mềm không hoạt động (link hỏng) nhưng không ảnh hưởng đến link cứng (Link cứng vẫn truy cập được bản sao của file)


6) Bạn sẽ chuyển và truy cập các đối số vào một tập lệnh trong Linux như thế nào?

Các đối số có thể được thông qua như sau:

scriptName “Arg1” “Arg2″….”Argn” và có thể được truy cập bên trong tập lệnh dưới dạng $1 , $2 .. $n


7) Sự khác biệt giữa $* và $@ là gì?

$@ coi mỗi đối số được trích dẫn là các đối số riêng biệt nhưng $* sẽ coi toàn bộ tập hợp các tham số vị trí là một chuỗi duy nhất.


8) Sử dụng lệnh sed để thay thế nội dung của tệp (giả lập lệnh tac)

Ví dụ:

if cat fille
ABCD
EFGH

Sau đó O/p phải là

EFGH
ABCD

sed '1! G; h;$!d' file1

Ở đây lệnh G sẽ thêm vào không gian mẫu,

lệnh h sao chép bộ đệm mẫu để giữ bộ đệm

và lệnh d xóa không gian mẫu hiện tại.


9) Cho một tập tin, thay thế tất cả các lần xuất hiện của từ “ABC” bằng “DEF” từ 5th dòng cho đến khi kết thúc chỉ trong những dòng có chứa từ “MNO”

sed –n '5,$p' file1|sed '/MNO/s/ABC/DEF/'

10) Cho một file, viết một chuỗi lệnh để tìm số đếm của mỗi từ.

tr –s  "(backslash)040" <file1|tr –s  "(backslash)011"|tr "(backslash)040 (backslash)011" "(backslash)012" |uniq –c
where "(backslash)040" is octal equivalent of "space"

“(dấu gạch chéo ngược)011” là số bát phân tương đương với “ký tự tab” và

“(dấu gạch chéo ngược)012” là số bát phân tương đương với ký tự dòng mới.


11) Làm thế nào bạn sẽ tìm thấy số 99?th dòng của tệp chỉ sử dụng lệnh tail và head?

đuôi +99 tập tin1|đầu -1


12) In số 10th dòng mà không sử dụng lệnh tail và head.

sed –n '10p' file1

13) Trong bash shell của tôi, tôi muốn lời nhắc của mình có định dạng '$”Thư mục làm việc hiện tại”:”tên máy chủ”> và tải một tệp chứa danh sách các hàm do người dùng xác định ngay khi tôi đăng nhập, bạn sẽ tự động hóa việc này như thế nào ?

Trong bash shell, chúng ta có thể tạo tệp “.profile” tự động được gọi ngay khi tôi đăng nhập và viết cú pháp sau vào đó.

export PS1='$ `pwd`:`hostname`>' .File1

Ở đây File1 là tệp chứa các hàm do người dùng xác định và “.” gọi tập tin này trong shell hiện tại.


14) Giải thích về bit quyền “s” trong một tập tin?

Bit “s” được gọi là bit “đặt id người dùng” (SUID).

Bit “s” trên một tệp khiến tiến trình có các đặc quyền của chủ sở hữu tệp trong phiên bản của chương trình.

Ví dụ: thực thi lệnh “passwd” để thay đổi mật khẩu hiện tại sẽ khiến người dùng ghi mật khẩu mới vào tệp tin ẩn mặc dù nó có “root” là chủ sở hữu.


15) Tôi muốn tạo một thư mục sao cho bất kỳ ai trong nhóm đều có thể tạo tệp và truy cập tệp của bất kỳ người nào trong đó nhưng không ai có thể xóa tệp khác ngoài tệp do chính họ tạo.

Chúng ta có thể tạo thư mục cấp quyền đọc và thực thi cho mọi người trong nhóm và đặt bit “t” cố định của nó như sau:

mkdir direc1
 
chmod g+wx direc1
 
chmod +t direc1

16) Làm thế nào bạn có thể biết hệ thống đã chạy được bao lâu?

Chúng ta có thể tìm thấy điều này bằng cách sử dụng lệnh “uptime”.


17) Làm thế nào bất kỳ người dùng nào có thể tìm ra tất cả thông tin về một người dùng cụ thể như shell mặc định, tên thật, thư mục mặc định, anh ta đã sử dụng hệ thống khi nào và bao lâu?

ngón tay “loginName” …trong đó loginName là tên đăng nhập của

người dùng có thông tin được mong đợi.


18) Sự khác biệt giữa $$ và $! là gì?

$$ cung cấp id tiến trình của quy trình hiện đang thực thi trong khi $! Hiển thị id tiến trình của tiến trình gần đây đã chạy ở chế độ nền.


19) Quá trình zombie là gì?

Đây là những tiến trình đã chết nhưng trạng thái thoát của chúng vẫn chưa được tiến trình cha chọn. Các quy trình này ngay cả khi không hoạt động vẫn có mục nhập id quy trình trong bảng quy trình.


20) Bạn sẽ sao chép một tập tin từ máy này sang máy khác bằng cách nào?

Chúng ta có thể sử dụng các tiện ích như “ftp,” “scp” hoặc “rsync” để sao chép một tập tin từ máy này sang máy khác.

Ví dụ: Sử dụng ftp:

Tên máy chủ FTP

> đặt tập tin1

>tạm biệt

Các bản sao ở trên, gửi tệp file1 từ hệ thống cục bộ đến hệ thống đích có tên máy chủ được chỉ định.


Câu hỏi và câu trả lời phỏng vấn Shell Scripting dành cho người có kinh nghiệm

21) Tôi muốn theo dõi tệp nhật ký cập nhật liên tục, lệnh nào có thể được sử dụng để đạt được điều này một cách hiệu quả nhất?

Chúng ta có thể sử dụng tên tệp tail –f. Điều này sẽ khiến chỉ có 10 dòng cuối cùng mặc định được hiển thị trên std o/p, liên tục hiển thị phần cập nhật của tệp.


22) Tôi muốn kết nối với máy chủ từ xa và thực hiện một số lệnh, làm cách nào để đạt được điều này?

Chúng ta có thể sử dụng ssh để làm điều này:

tên người dùng ssh@serverIP -p sshport

Ví dụ

ssh root@122.52.251.171 -p 22

Khi lệnh trên được thực thi, bạn sẽ được yêu cầu nhập mật khẩu


23) Tôi có 2 tệp và tôi muốn in các bản ghi chung cho cả hai.

Chúng ta có thể sử dụng lệnh “comm” như sau:

comm -12 file1 file2 … 12 sẽ chặn nội dung

duy nhất cho 1st và 2nd tập tin tương ứng.


24) Viết script in 10 phần tử đầu tiên của dãy Fibonacci.

  
#!/bin/sh
a=1
b=1
echo $a
echo $b
for I in 1 2 3 4 5 6 7 8
do
c=a
b=$a
b=$(($a+$c))
echo $b
done

25) Bạn sẽ kết nối với máy chủ cơ sở dữ liệu từ Linux bằng cách nào?

Chúng ta có thể sử dụng tiện ích isql đi kèm với trình điều khiển máy khách mở như sau:

isql –S serverName –U tên người dùng –P mật khẩu


26) 3 luồng tiêu chuẩn trong Linux là gì?

0 – Đầu vào tiêu chuẩn1 – Đầu ra tiêu chuẩn2 – Lỗi tiêu chuẩn


27) Tôi muốn đọc tất cả đầu vào của lệnh từ file1, chuyển tất cả đầu ra sang file2 và lỗi sang tệp 3, làm cách nào tôi có thể đạt được điều này?

yêu cầu tệp1 1>tệp2


28) Điều gì sẽ xảy ra với quy trình hiện tại của tôi khi tôi thực thi lệnh bằng exec?

“exec” chồng quy trình mới được phân nhánh lên quy trình hiện tại; vì vậy khi tôi thực thi lệnh bằng exec, lệnh sẽ được thực thi trên shell hiện tại mà không tạo bất kỳ quy trình mới nào.

Ví dụ: Thực thi "exec ls" trên dấu nhắc lệnh sẽ thực thi ls và khi ls thoát, quá trình sẽ tắt


29) Bạn sẽ mô phỏng wc –l bằng awk như thế nào?

awk 'END {print NR} fileName'


30) Cho một tập tin, tìm số dòng chứa từ “ABC”.

grep –c “ABC” tập tin1


31) Sự khác biệt giữa grep và egrep là gì?

egrep là grep mở rộng hỗ trợ các tính năng grep bổ sung như “+” (1 lần xuất hiện trở lên của ký tự trước),”?”(0 hoặc 1 lần xuất hiện của ký tự trước) và “|” (kết hợp thay thế)


32) Làm thế nào để thiết lập một mảng trong Linux?

Cú pháp trong ksh:

Set –A arrayname= (element1 element2 ….. element)
In bash
A=(element1 element2 element3 …. elementn)

33) Viết cú pháp vòng lặp “for”

Cú pháp:

for  iterator in (elements)
do
execute commands
done

34) Làm thế nào bạn có thể tìm thấy tổng dung lượng ổ đĩa được sử dụng bởi một người dùng cụ thể?

du -s /home/user1 ….trong đó user1 là người dùng cần tìm tổng dung lượng ổ đĩa.


35) Viết cú pháp câu điều kiện “if” trong Linux?

cú pháp

If  condition is successful
then
execute commands
else
execute commands
fi

36) Ý nghĩa của $ là gì?

Lệnh $? đưa ra trạng thái thoát của lệnh cuối cùng được thực thi.


37) Làm cách nào để xóa tất cả các dòng trống trong một tập tin?

sed  '^ [(backslash)011(backslash)040]*$/d' file1

trong đó (dấu gạch chéo ngược)011 là số bát phân tương đương với khoảng trắng và

(dấu gạch chéo ngược)040 là số bát phân tương đương với tab


38) Làm cách nào để chèn một dòng “ABCDEF” ở mỗi 100th dòng của một tập tin?

sed '100i\ABCDEF' tập tin1


39) Viết chuỗi lệnh để tìm tất cả các tệp được sửa đổi trong vòng chưa đầy 2 ngày và in số lượng bản ghi của từng tệp.

tìm thấy . –mtime -2 –exec wc –l {} \;


40) Làm cách nào tôi có thể đặt quyền rwx mặc định cho tất cả người dùng trên mọi tệp được tạo trong shell hiện tại?

Chúng ta có thể sử dụng:

umask 777

Điều này sẽ đặt quyền rwx mặc định cho mọi tệp được tạo cho mọi người dùng.


41) Làm cách nào chúng ta có thể tìm thấy tên quy trình từ id quy trình của nó?

Chúng ta có thể sử dụng "ps –p ProcessId"


42) Bốn thành phần cơ bản của mọi hệ thống tệp trên Linux là gì?

Bootblock, super block, inode block và Datablock là các thành phần cơ bản của mọi hệ thống tệp trên Linux.


43) Khối khởi động là gì?

Khối này chứa một chương trình nhỏ có tên là “Bản ghi khởi động chính” (MBR) để tải kernel trong quá trình khởi động hệ thống.


44) Siêu khối là gì?

Siêu khối chứa tất cả thông tin về hệ thống tệp như kích thước của hệ thống tệp, kích thước khối được sử dụng bởi số lượng khối dữ liệu miễn phí và danh sách các nút và khối dữ liệu miễn phí.


45) Khối inode là gì?

Khối này chứa inode cho mọi tệp của hệ thống tệp cùng với tất cả các thuộc tính của tệp ngoại trừ tên của nó.


46) Làm thế nào để gửi email có đính kèm tệp nén?

file zip1.zip file1|mailx –s “subject” Email của người nhận ID

Nội dung email

EOF


47) Làm cách nào để tạo bí danh lệnh trong shell?

alias Aliasname=”Lệnh có bí danh được tạo”.


48) Trường quyền “c” và “b” của tệp là gì?

“c” và “b” trường quyền thường được liên kết với một tập tin thiết bị. Nó chỉ định xem một tệp là tệp ký tự đặc biệt hay tệp khối đặc biệt.


49) Công dụng của dòng shebang là gì?

Dòng Shebang ở đầu mỗi tập lệnh xác định vị trí của công cụ được sử dụng để thực thi tập lệnh.

Những câu hỏi phỏng vấn này cũng sẽ giúp ích cho bài thi viva(orals) của bạn