Thứ Năm, 19 tháng 1, 2017

[Linux]Bài 2: Công cụ soạn thảo văn bản và chuyển hướng kết xuất trong Linux

1. Cách dùng gedit
 Gõ lệnh gedit để chuyển sang màn hình của phần mềm soạn thảo gedit

2. Cách dùng nano
Nano được dùng nhiều do dễ sử dụng, gọn nhẹ.
Cài đặt nano 
yum install nano
Bắt đầu làm việc với nano
nano file_name

Tiến hành sử dụng nano với các chú thích
Chú ý:  ^ là tương ứng Ctrl ở dưới màn hình.
Một số lệnh quen thuộc
Ctr+O : Lưu thay đổi
Ctr+X: Thoát khỏi nano
Ctr+K: Cắt một dòng
Ctr+U: Paste dòng đó
Alt+A hoặc Ctrl+6: Lựa chọn nhiều dòng
Ctr+W: Tìm kiếm
Ctr+c: Hiển thị dòng hiện tại

3.Cách dùng vi
vi là một phần mềm soạn thảo nổi tiếng nhất của hệ điều hành linux. Tuy khó sử dụng nhưng đây là một công cụ rất mạnh để soạn thảo văn bản. Trong vi có 2 chế độ làm việc là comand mode và insert mode. Để thêm dữ liệu hay gõ thêm dữ liệu thì dùng insert mode còn comand mode dùng để chỉnh sửa file một cách nhanh tróng.
Cách dùng
- Mở file, tạo file bằng vi

   vi file_name ( Chỉnh sửa 1 file đã có sẵn)
    vi  new_file_name (Tạo mới một file)

- Thêm text 

     i        Thêm text vào bên trái của con trỏ
     a        Thêm text vào bên phải của con trỏ

- Di chuyển con trỏ trên màn hình
 
     h     Di chuyển con trỏ sang trái
     j      Di chuyển con trỏ xuống dưới
     k     Di chuyển con trỏ lên trên
     l      Di chuyển con trỏ sang phải

Ngoài ra có thể dùng phím lên xuống của bàn phím có sẵn

- Lệnh chỉnh sửa thường dùng

      x            Xóa ký tự. Gõ lệnh ở bên trái ký tự
     nx           Xóa n ký tự . Gõ lệnh ở bên trái ký tự đầu tiên
     X            Xóa ký tự nằm bên trái con trỏ
     dw          Xóa một từ. Gõ lệnh ở bên trái của từ cần xóa
     ndw        Xóa n từ . Gõ lệnh ở bên trái của từ đầu tiên.
     dd           Xóa một dòng.
     ndd         Xóa n dòng từ dòng chứa con trỏ xuống.
     D            Xóa toàn bộ ký tự từ con trỏ tới cuối của file.
     r              Thay thể từ đang được con trỏ trỏ tới.
     cw           Thay thế 1 từ.
     ncw         Thay thế n từ
     C              Thay thế toàn bộ ký tự từ con trỏ tới cuối cùng của file
     o               Chèn một khoảng trắng xuống dưới để chuyển đến dòng mới tiếp theo
     O              Chèn một khoảng trắng lên trên để bắt đầu dòng mới trên dòng chứa con trỏ
     u               Undo thay đổi gần nhất
     U              Undo thay đổi dòng hiện tại
     yy             Copy 1 dòng
     p                Paste

- Di chuyển trong file 

  w                Di chuyển qua từng từ
  b                 Di chuyển trở lại theo từng từ
  $                 Cuối của dòng
  O                Bắt đầu một dòng
  H                Trở về dòng đầu tiên của màn hình
  L                 Dòng ở giữa màn hình
  G                 Dòng cuối cùng của file
  1G              Dòng đầu tiên của file
   nG              Dòng thứ n của file
 n |                 Cột thứ n của file
? key              Tìm kiếm key

- Đóng file

ZZ             Save và quit
:w               Save file
:q!               Không lưu thay đổi và quit

4.Chuyển hướng nhập, xuất

       Ngoài việc dùng nhập thông tin từ bàn phím và hiển thị thông tin bằng màn hình thì có thể sử dụng file để lấy dữ liệu hay xuất dữ liệu ra do đó cần có sự chuyển đổi hướng nhập, xuất.

a. stdin

  Ký hiệu:  <
  Dùng để thay đổi đầu vào từ chế độ gõ từ bàn phím thành chế độ nhập bằng file.
  VD:  cd < home.txt

b.stdout

  Ký hiệu: >   hoặc 1>
  Dùng để thay đổi đầu ra là từ chế độ hiển thị ra màn hình thành lưu kết quả ra file. File đã tồn tại thì file đó sẽ bị xóa hết nội dung rồi mới ghi vào, nếu chưa tồn tại file được tạo mới
 
  Ký hiệu: >> hoặc 1>>
  Dùng để thay đổi đầu ra là từ chế độ hiển thị ra màn hình thành lưu kết quả ra file. File đã tồn tại thì sẽ ghi nội dung sau nội dung đã có, nếu chưa tồn tại tạo file mới

Ký hiệu: |
Thay đổi đầu ra là chế độ mặc định sang là đầu vào của stdin
c.stderr

  Ký hiệu: 2>
  Dùng để in thông báo lỗi thay vì ra màn hình như mặc định thì thông báo sẽ được lưu vào file. File đã tồn tại thì file đó sẽ bị xóa hết nội dung rồi mới ghi vào, nếu chưa tồn tại file được tạo mới.

 Ký hiệu: 2>>
 Dùng để in thông báo lỗi thay vì ra màn hình như mặc định thì thông báo sẽ được lưu vào file. File đã tồn tại thì thông báo sẽ được ghi vào sau nội dung đã có, nếu chưa tồn tại file được tạo mới.

 Ký hiệu: 2>&1
Thay stderr chuẩn thành stdout




5. Thực hành

Bài 1: Thực hành nano

Tạo file /tmp/diem.txt có tối thiểu 20 dòng với các yêu cầu sau:
Mỗi dòng có 5 trường thể hiện các nội dung về (Tên, Giới tính, Điểm 1, Điểm 2, Điểm Tổng)
Tổng = Điểm 1 + Điểm 2 (các giá trị này là nguyên dương)
Tên không giống nhau với mỗi dòng và không bao gồm dấu cách.
Lưu ý, Tên chứ không phải Họ và Tên . Mỗi trường cách nhau bằng đúng một dấu cách, mỗi dòng có đúng 4 dấu cách . Giới tính có hai loại là nam và nữ . Tất cả các ký tự trong file đều là chữ thường, không có dấu.   Copy file /root/install.log thành file /tmp/nano.txt Sử dụng lệnh nano thực hiện 1 số thao tác soạn thảo file trên, di chuyển trong nội dung file, ghi file sau khi soạn thảo, sau đó ghi thành file mới có tên /tmp/vi.txt

Bài làm


nano /tmp/diem.txt
Gõ  vào các dòng: như theo yêu cầu
Ctrl+O
Ctrl+X

cp /root/install.log /tmp/nano.txt
nano /tmp/nano.txt
Ctrl+O
Thay đổi tên thành /tmp/vi.txt
Ctrl+X

Bài 2: Thực hành vi 

Chạy lệnh vi, sau đó mở file /tmp/vi.txt của bài trước.
Di chuyển đến đầu/cuối file, sau đó di chuyển đến dòng thứ 234 tính từ đầu file, rồi tiếp tục di chuyển đến dòng có vị trí khoảng 70%.

Tìm từ “lib” đầu tiên trong file, sau đó tìm lên trên 3 từ rồi tìm ngược lại 1 từ. Thay thế tất cả các từ “rpm” thành RPM.

Ghi file đang soạn thảo thành file /tmp/mcedit.txt

Bài làm
vi /tmp/vi.txt
H  : di chuyển đến đầu file
G  : di chuyển đên cuối file
234G: di chuyển đến dòng thứ 234 
70%: di chuyển đến dòng thứ 70%
/lib
N N N
n
:%s/rmp/RPM/g
:w /tmp/mcedit.txt

Bài 3: Thực hành mcedit

Chạy lệnh mcedit /tmp/mcedit.txt để mở file đã tạo trước đó. Thực hiện đánh dấu 1 khối từ dòng 30 đến dòng 35. Copy khối 3 lần tại chỗ sau đó di chuyển tới dòng cuối cung và di chuyển khối đang đánh dấu đến đó. Hủy đánh dấu khối. Ghi lại file thành /tmp/end.txt
Bài làm

mcedit /tmp/mcedit.txt

Bài 4:

Chạy lệnh sau cat > /tmp/new.txt gõ một số đoạn ký tự có xuống dòng rồi nhấn Ctrl+D để kết thúc nhập. Giải thích các thao tác trên

Tạo file sum.sh có nội dung như sau:

echo –n “Nhap A: ”; read A

echo –n “Nhap B: ”; read B

echo “A + B = $(($A + $B))";

Sau đó thực hiện các lệnh sau để chạy file mới tạo

chmod a+x sum.sh

./sum.sh


Nhập A, B bằng bàn phím để tính A + B. Sau đó tạo file input.txt có nội dung như sau (lưu ý có 3 dòng, dòng thứ 3 trống)

16

27

Sau đó chạy lệnh sau để kiểm tra chuyển hướng đầu vào (stdin)

./sum.sh < input.txt

Bài làm

cat >/tmp/new.txt 
Sẽ lấy dữ liệu nhập ở màn hình lưu vào file new.txt ở thư mục tmp
Lệnh Ctrl+D để thoát chế độ nhập

touch sum.sh   Tạo file sum.sh

Bài 5: Thực hành chuyển hướng kết xuất (2) 

Chạy lệnh sau để đảm bảo không có file nofile rm –f nofile sau đó lần lượt chạy các lệnh sau

cat nofile > output.txt 2>&1

cat nofile 2>&1 > output.txt

Hãy giải thích các hiện tượng diễn ra trên màn hình và nội dung file output.txt
Bài làm

cat nofile>output.txt 2>&1 
Câu lệnh này không in ra màn hình mà cả STDOUT và STDERR đều được đưa vào file output.txt
Còn câu lệnh 
cat nofile 2>&1 >output.txt 
chỉ in ra màn hình .Cụ thể STDOUT  tới output.txt trước ra màn hình rồi sau đó mới STDERR cái vừa STDOUT vào file output.txt, 

Bài 6:  Thực hành chuyển hướng kết xuất (3) 

Sử dụng lệnh adduser test để tạo người dùng test, hãy kết hợp hai lệnh echo và passwd để thay đổi mật khẩu của người dùng này chỉ cần 1 lần nhấn Enter

Biết A là biến chứa một số nguyên dương. Hãy kết hợp giữa hai lệnh head và tail để hiện thị dòng thứ A trong file /var/log/messages (không cần kiểm tra A có lớn hơn số dòng trong file không)

Hãy hiển thị tất cả các dòng không có từ nologin trong /etc/passwd

Bài làm
adduser test
passwd
 nhập password mới vào
tail -n $A /var/log/messages
grep -v "nologin" /etc/passwd



Bài 7: Thực hành chuyển hướng kết xuất (4)

Hiển thị danh sách trong file /tmp/diem.txt theo thứ tự tăng dần của Tên

Hiển thị danh sách trên theo tứ tự tăng dần của Tổng điểm

Đếm số bạn nam, nữ trong file

Tạo thêm file /tmp/ds.txt có hai trường Tên, Ngày sinh có số dòng và Tên như trong file /tmp/diem.txt. Hãy tạo file /tmp/full.txt chứa nội dung hai file trước nhưng cột Ngày sinh nằm sau cột Giới tính

Bài làm
cat diem.txt | sort -n -k 1
cat diem.txt | sort -n -k 5
cat diem.txt | grep ' nu ' | wc -l
cat diem.txt | grep ' nam ' | wc -l
join -1 1 -o 1.1 1.2 1.3 1.4 1.5 diem.txt ds.txt >full.txt


Bài 8: Thực hành chuyển hướng kết xuất (5)

Sử dụng lệnh sed để thay đổi các từ Install trong file /tmp/mcedit.txt thành INSTALL

Tạo file /tmp/backup là nội dung file /etc/passwd nhưng tất cả các chữ thường đã được chuyển thành chữ hoa.


Bài làm

sed 's/Install/INSTALL' /tmp/mcedit.txt
sed -e 's/\(.*\)/\U\1/' /tmp/diem.txt >/tmp/backup.txt
 tr tranform
cat /tmp/backup | tr  a-z A-Z

Bài 9: Thực hành chuyển hướng kết xuất (6)

Biết lệnh ps sẽ hiển thị các tiến trình trong bộ nhớ, hãy hiển thị một danh sách 10 tiến trình chiếm nhiều CPU nhất theo dạng 2 cột (PID, %CPU) và sắp xếp theo thứ tự giảm dần của CPU.

Thực hiện như trên nhưng thay tỷ lệ dùng CPU thành tỷ lệ dùng RAM

Bài làm


Tham khảo thêm:
http://thuthuatvietnam.com/huong-dan-su-dung-text-editor-vi-trong-linux.html
https://www.washington.edu/computing/unix/vi.html
http://uet.vnu.edu.vn/~thanhld/lects/netos/Tuan%203%20-%20editor%20&%20io%20redirect_new.html
http://www.tranngocquan.tk/2011/07/su-dung-lenh-tr-va-uniq-trong-linux.html


[Linux]Sửa lỗi Another app is currently holding the yum lock; waiting for it to exit...

Khi sử dụng Linux nếu các bạn đang gặp lỗi như vậy thì có nghĩa đang có một tiến trình khác giữ quyền kiểm soát tài nguyên là lệnh yum và bạn không thể sử dụng lệnh yum để cài đặt các ứng dụng khác khi tiến trình trước chưa chạy xong. Vậy lý do tại sao và làm như thế nào để tiếp tục sử dụng được lệnh yum chúng ta cùng tìm hiểu nhé.👉😓


Một chương trình chạy trong Linux đều tạo ra một file pid ( process id) với mục đích:

  • Là tín hiệu cho những tiến trình khác hoặc người dùng hệ thống.
  • Là dấu hiệu để kiểm tra tiến trình đang chạy  hay đã kết thúc. 
  • Là cách để biết những chương trình trước đó thoát không thành công.
Như những gì đã biết ở trên thì ta thấy lỗi "Another app is currently holding the yum lock; waiting for it to exit..." là  một lỗi do tiến trình khác thoát ra không thành công nên file yum.pid vẫn lưu id của tiến trình đó. Do đó lệnh yum vẫn được kiểm soát bởi tiến trình trước. Để xử lý lỗi này ta có 2 cách:


Cách 1:
Hủy tiến trình bằng cách tìm id của tiến trình được thông báo và hủy nó. Cách này phải chờ hệ thống cập nhật nên hơi lâu.
ps -aux | grep yum
kill id_of_process pid
Cách 2:
Tìm xóa file yum.pid trong thư mục /var/run
rm /var/run/yum.id

Chúc các bạn thành công!! 😆😝

Thứ Tư, 18 tháng 1, 2017

[Serie học Linux từ đầu ] _ Bài 1: Các lệnh cơ bản trong linux

 Bài 1: Các lệnh cơ bản trong linux
1.Tổng quan về lệnh trong linux
  • Cấu trúc lệnh trong linux gồm 3 phần: <comand>[options][argument]
    • Comand (Lệnh):
      •  Là tên file chứa mã lệnh. Thường là 1 động từ hoặc viết tắt đại diện cho chức năng của lệnh.
      • Tên lệnh phân biệt viết hoa và viết thường. 
                             VD: ls khác Ls
      • Mỗi lệnh kết thúc bởi phím Enter.
      • Dùng dấu ;  để phân cách 2 lệnh trên 1 dòng. Dùng |  nếu có gắn kết dữ liệu đầu vào.
                            VD:        cd /home; ls -l
                                           printenv | grep HOME
      • Dùng \ và phím enter để viết lệnh trên nhiều dòng. 
    • Options ( Tùy chọn)
      • Là tập ký tự định nghĩa trước để điều khiển lệnh theo ý muốn người dùng.
      • Không phân biệt thứ tự tham số. VD: ls -l -a tương đương ls -a -l
      • Gồm 2 loại:
        • Đơn ký tự: Đi ngay sau dấu "-"  lệnh sẽ tách các ký tự sau dấu "-" thành tham số.Dùng trong gõ lệnh nhanh.  VD: ls -la   tương đương ls -l -a
        • Đa ký tự: Đi ngay sau dấu "--" dùng để diễn giải ý nghĩa việc sự lựa chọn tùy chọn của người dùng.
    • Arguments ( Tham số) 
      • Là các từ ngữ có ý nghĩa nhưng chưa xác định khi lập trình, dùng để điều khiển lệnh nhừ options.
      • VD: cd /HOME  thì /HOME chính là tham số.
  • Đường dẫn:
    • Đường dẫn tuyệt  đối:
      • Là đường dẫn duy nhất tính từ thư mục gốc đến nó thông qua các thư mục trung gian.
    • Đường dẫn tương đối: 
      • Là đường dẫn khi kết hợp với thư mục hiện hành thành đường dẫn tuyệt đối:
        • Absolute Path = Working Dir + [ / ] + Relative Path
  • Cách gõ nhanh:
    • Dùng <TAB>. VD: Muốn gõ lệnh ls thì ta gõ l rồi gõ <TAB>
2. Các lệnh cơ bản trong linux
Để kiểm tra thông tin của các lệnh trong terminal ta có thể dùng một vài câu lệnh sử dụng thư viện sau:
  • man Tên_Lệnh .             VD man ls
  • Tên_Lệnh --help: more. VD: ls --help:more
  • info Tên_Lệnh                VD: info ls
  • whatis Tên_Lệnh             VD: whatis ls
Sau đây là một số lệnh thường dùng trong linux:
     1. useradd
    •  Tạo một người dùng mới
    • Vd: useradd linux
     2.su 
    • Chuyển người dùng từ user sang root hoặc từ root sang người dùng
    • VD: su  ( chuyển từ user sang tài khoản root sau khi nhập đúng password)
    • su linux  ( chuyển từ root sang user có tên là linux)
     3.ls
    • Liệt kê tên các thư mục, tập tin
    • VD: ls
    4.mkdir
    • Tạo thư mục mới 
    • VD: mkdir linux


   5.rmdir
    • Xóa thư mục có trong thư mục hiện tại
    • VD: rmdir linux

   6.rm

    • Xóa tập tin hoặc thư mục bất kỳ chỉ cần gõ đúng đường dẫn. 
    • rm <tên tập tin> _ Xóa tập tin
    • rm -r <thư mục> _ Xóa thư mục
    • rm -rf <thư mục > _ Xóa các file có bên trong thư mục
   7.cp 

    • cp <nguồn> <đích>
    • Sao chép tập tin/ thư mục 
    • Sử dụng cp -r <thư mục nguồn> <thư mục đích> để sao chép tất cả file bên trong thư mục
   8.mv

    • mv <nguồn><đích>
    • Di chuyển file/ thư mục từ vị trí này sang vị trí khác.
    • Dùng để đổi tên nếu nguồn và đích giống nhau.
    • VD: mv linux window

   9.pwd
    • Hiển thị thư mục hiện tại 
    • VD: pwd
  10.cd
    • Mở thư mục.
    • VD: cd /Desktop 
   11. cat

    • cat <tên tập tin>
    • Xem tập tin
    • VD: cat hello.php
   12. tail 

    • tail <tên tập tin> 
    • Mặc định in ra 10 dòng tập tin đó. 
    • Sử dụng tail -n N <tên tập tin> . N là số dòng cần in.
13. less

    • less <tên tập tin>
    • In toàn bộ tập tin với nhiều trang.
14. grep 

    • grep <từ khóa> <tên file>
    • Dùng để tìm từ khóa cần tìm trong 1 file
    • grep -i <từ khóa > <tên file> tìm phân biệt hoa thường
    • grep -r <từ khóa><tên file> tìm kiếm tất cả trong file

15 .du -sh

    • du -sh <tên file> : Kiểm tra kích thước  của file
    • du -sh *: Liệt kê kích thước tất cả các file trong thư mục
16. find

    • find <thư mục để tìm>  -name<tên file cần tìm> : Tìm file ở trong thư mục
    • thêm -iname để tìm file không phân biệt hoa thường.
17.tar

    • tar -cvf <tên file nén> <file1 <dấu cách> file2>    : nén file
    • tar -tvf <tên file nén.tar>                                        : xem file nén
    • tar -xvf <tên file nén.tar>                                        : giải nén file tar
18. gzip
    • gzip <tên file>  để nén file
    • gzip -d <tên file> : để giải nén file
19. unzip
    • unzip<tên file cần giải nén.zip> để giải nén file zip
    • unzip -l <tên file cần giải nén.zip> để xem file zip mà không cần giải nén
    • zip <tên thư mục nén> <file1 <dấu cách> file2> để nén một file
    • zip <tên thư mục nén> <thư mục nén> để nén thư mục
20.bzip2 
    • Tương tự gzip nhưng dung lượng lớn hơn
21. apropos 
    • whatis là tìm trang hướng dẫn với từ khóa đưa ra. 
    • Còn apropos liệt kê các trang hướng dẫn có chứa từ khóa cần tìm.
22. which
    • Liệt kê các đường dẫn mà câu lệnh thực hiện. 
    • which ls
23. wc
    • print newline, word, and byte counts for each file
24.head
    • Đưa ra phần đầu của file
25.poweroff
    • Tắt máy
3. Thực hành
Bài 1:
Hãy sử dụng những lệnh đã biết ở bài 2 để tạo cấu trúc thư mục sau bằng số lệnh ít nhất có thể, số lần gõ bàn phím ít nhất có thể:
 /-
  |-/lab
    |-/data
    |     |- file1.txt
    |     |- file2.txt
    |-/project
Lưu ý: Các file được tạo có nội dung được chép từ file  /etc/passwd .


Bài làm:


mkdir lab

cd lab

mkdir data project

cd data

cp /etc/passwd file1.txt

cp /etc/passwd file2.txt


Bài 2:
Xóa, di chuyển, sao chép file và thư mục

Hãy sao chép thư mục /lab ở bài 3 thành thư mục /backup (lưu ý thư mục /backup chưa tồn tại) sau đó tạo thêm hai file có nội dung giống như hai file trước có tên là /lab/project/more1.txt và /lab/data/more2.txt . Lại sao chép thư mục /lab ở trên thành thư mục /backup (lưu ý lúc này đã có thư mục này) với yêu cầu là không phải trả lời các câu hỏi có ghi đè không mà ghi đè trực tiếp không hỏi, sau đó xóa thư mục /lab


Bài làm

cp -r /lab /backup

cd /backup/project

cp /etc/passwd more1.txt

cd /backup/data

cp /etc/passwd more2.txt

cp -r /lab/*  /backup

rm /lab

Bài 3:

Tập hợp, nén, giải nén thư mục

Tạo file /root/backup.tar.bz2 là bản backup dạng nén của thư mục backup trong bài 4. Sau đó giải nén file này thành thư mục /lab với cấu trúc thư mục như /backup .

Bài làm

yum install bzip2

tar backup.tar backup && bzip2 backup.tar

mkdir lab

tar -cvf backup.tar -C /lab



Bài 4:


Lọc dữ liệu dạng đơn giản

Sử dụng lệnh ls để liệt kê tất cả các file/thư mục trong hệ thống file tính từ thư mục gốc “/” sau đó dùng lệnh grep để lọc ra tất cả các file có phần đuôi là “.txt”

Cũng yêu cầu trên, làm lại nhưng lọc kết quả là các file có phần đầu là “dat”.

Bài làm

ls / | grep  .txt 

ls / | grep  data*