/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/
Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Basic Shell Script In Linux/Ubuntu/CentOS - P1

Trong windows chúng ta có batch file, trong linux có Shell Script. Nói chung shell là chương trình có thể tương tác người dùng, có thể input dữ liệu, có thể output ra màn hình, có thể tự động thực thi một nhóm lệnh do chúng ta tạo ra theo một lịch trình đã thiết lập.

1. Cách tạo và thực thi một chương trình shell

  • Tạo file hello.sh với nội dung:

#!/bin/bash
echo "hello world"

Giải thích: 
- #!/bin/bash: là shellbang, là dòng bắt buộc trong shell script
- echo "hello world": Khi chạy file hello.sh nó sẽ xuất ra màn hình chữ "hello world"

  • Thiết lập user có quyền (x) được phép thực thi cho file hello.sh
chmod u+x hello.sh


  • Chạy chương trình - file hello.sh vừa tạo

Có thể thực hiện 1 trong 3 cách như dưới
- sh hello.sh
- bash hello.sh
- ./hello.sh

Ví dụ: 

khanhvc@ubutu:~/projects/shell$ sh hello.sh
hello world


2. Shell variables

2.1 Biến của hệ thống: dùng lệnh printenv để in ra các biến đang tồn tại trong hệ thống linux

khanhvc@ubutu:~/projects/shell$ printenv
SHELL=/bin/bash
LC_ADDRESS=vi_VN
LC_NAME=vi_VN
LC_MONETARY=vi_VN
PWD=/home/khanhvc/projects/shell
LOGNAME=khanhvc
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/khanhvc
LC_PAPER=vi_VN
LANG=en_US.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=192.168.0.48 63977 192.168.0.73 22
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
LC_IDENTIFICATION=vi_VN
TERM=xterm
LESSOPEN=| /usr/bin/lesspipe %s
USER=khanhvc
SHLVL=1
LC_TELEPHONE=vi_VN
LC_MEASUREMENT=vi_VN
XDG_SESSION_ID=330
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.0.48 63977 22
LC_TIME=vi_VN
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/0
LC_NUMERIC=vi_VN
OLDPWD=/home/khanhvc/projects
_=/usr/bin/printenv
khanhvc@ubutu:~/projects/shell$

Ví dụ: Tạo file demo.sh để in các thông tin các biến theo yêu cầu dưới:
  • Thông tin version của shell hiện tại
  • Tên của shell
  • Thư mục gốc của user hiện tại
  • Thông tin đường dẫn đã được thiết lập 
Nội dung file demo.sh
#!/bin/bash
echo $BASH_VERSION
echo $BASH
echo $HOME
echo $PATH

Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
5.0.17(1)-release
/bin/bash
/home/khanhvc
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
khanhvc@ubutu:~/projects/shell$


2.2 Biến do người dùng định nghĩa UDV - User Defined variables, biến CÓ phân biệt chữ hoa, chữ thường
  • Cú pháp:
ten_bien=gia_tri

2.2.1 EXPR
  • Ví dụ:
#!/bin/bash
a=6
b=3
expr $a + $b
Kết quả là: 9, vì nó lấy giá trị của a cộng cho giá trị của b

  • Ví dụ khác:
#!/usr/bin/bash
a=6
b=3

tong=$(expr $a + $b)
echo "Ket qua cua a CONG b = " $tong

hieu=$(expr $a - $b)
echo "Ket qua cua a TRU b = " $hieu

thuong=$(expr $a / $b)
echo "Ket qua cua a CHIA b = " $thuong

#phép nhân chúng ta phải thêm dấu "\" trước dấu "*" để thực hiện phép nhân
tich=$(expr $a \* $b)
echo "Ket qua cua a NHAN b = " $tich
Kết quả:
khanhvc@ubutu:~/projects/shell$ sh demo.sh
Ket qua cua a CONG b =  9
Ket qua cua a TRU b =  3
Ket qua cua a CHIA b =  2
Ket qua cua a NHAN b =  18
khanhvc@ubutu:~/projects/shell$

2.2.2 LET

  • Ví dụ 

#!/usr/bin/bash
a=6
let a+=1
echo "a = 6, a + 1 = " ${a}

let b=a+1
echo "b = a + 1 = " $b

let c=a+b
echo "c = a + b = " $c
  • Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
a = 6, a + 1 =  7
b = a + 1 =  8
c = a + b =  15
khanhvc@ubutu:~/projects/shell$


2.2.3 “bc” – An arbitrary precision calculator language”

  • Ví dụ: 

#!/usr/bin/bash
#in ra kết quả của 5 + 3
echo "5 + 3" | bc

#in ra kết quả là giá trị của x + y
x=10
y=20
echo "$x + $y" | bc

#in ra kết quả là giá trị của x + y
bc <<< "$x + $y"
  • Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
8
30
30
khanhvc@ubutu:~/projects/shell$

P/s: Kiểm tra câu lệnh chạy trong linux chúng ta dùng echo $? nếu kết quả số 0 thì câu lệnh kết thúc thành công, ngược lại là lỗi


Xong!

Network Configuration In Linux/Ubuntu >= 17.4

1. Các file cấu hình:

  • Network interface

- Debian-based: /etc/network/interfaces
- Red Hat-based: /etc/sysconfig/network-scripts/
- Ubuntu (>= 17.04): /etc/netplan/

  • DNS server: /etc/resolv.conf
  • /etc/nsswitch.conf
Ví dụ:
  • Kiểm tra thông tin IP hiện tại với lệnh: ip a
khanhvc@ubutu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.73/22 brd 192.168.3.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::9d21:bf12:41f0:7dfb/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.68/22 brd 192.168.3.255 scope global dynamic noprefixroute ens38
       valid_lft 28788sec preferred_lft 28788sec
    inet6 fe80::ba76:35f6:4158:5f73/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

khanhvc@ubutu:~$

Hiện tại trong thiết bị có 3 card mạng (1 lo-loopback, 1 ens33 và ens38) 
  • Để cấu hình IP cho Ubuntu chúng ta có thể thay đổi nội dung file /etc/netplan/01-network-manager-all.yaml bằng lệnh vim

khanhvc@ubutu:~$sudo vim /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
    ethernets:
        ens33:
            dhcp4: true
        ens38:
            addresses: [192.168.0.116/22]
            nameservers:
              addresses: [8.8.8.8]
            dhcp4: no
    version: 2
    renderer: NetworkManager


Cấu hình trên có nghĩa là card mạng ens33 để lấy ip tự động - DHCP, card mạng ens38 đặt ip tĩnh IP là 192.168.0.116/22, DNS là 8.8.8.8
  • nhấn Esc + : wq! -> enter để lưu cấu hình và thoát khỏi vim
  • Thực hiện apply cấu hình vừa thay đổi
 sudo netplan apply

  • Kiểm tra lại thông tin ip address 
khanhvc@ubutu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.73/22 brd 192.168.3.255 scope global dynamic noprefixroute ens33
       valid_lft 3560sec preferred_lft 3560sec
    inet6 fe80::20c:29ff:fe73:8dd0/64 scope link
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.116/22 brd 192.168.3.255 scope global noprefixroute ens38
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe73:8dda/64 scope link
       valid_lft forever preferred_lft forever
khanhvc@ubutu:~$

Chúng ta thấy card ens33 dynamic có nghĩa là đang được cấu hình IP address từ DHCP server

2. Các câu lệnh - commands
  • nmtui: Giao diện đồ họa cơ bản để cấu hình network
  • net-tools package:
- ethtool
- ifconfig
- iwconfig
- route
  • iproute2 package
ip: là câu lệnh phổ biến dần thay thế cho ifconfig


2.1 IP Address:
  • Thêm IP vào interface ens38
sudo ip address add 192.168.0.117/22 dev ens38

  • Xóa IP vào interface ens38
sudo ip address del 192.168.0.117/22 dev ens38

 

  • Xem thông tin IP address bao gồm MAC address
khanhvc@ubutu:~$ ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.73/22 brd 192.168.3.255 scope global dynamic noprefixroute ens33
       valid_lft 24533sec preferred_lft 24533sec
    inet6 fe80::20c:29ff:fe73:8dd0/64 scope link
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.117/22 scope global ens38
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe73:8dda/64 scope link
       valid_lft forever preferred_lft forever
khanhvc@ubutu:~$

  • Hoặc cụ thể một interface
khanhvc@ubutu:~$ ip address show dev ens38
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.117/22 scope global ens38
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe73:8dda/64 scope link
       valid_lft forever preferred_lft forever
khanhvc@ubutu:~$

  • Thiết lập interface up/down
sudo ip link set ens38 down


  • Kiểm tra sau khi thiết lập

khanhvc@ubutu:~$ ip address show dev ens38

4: ens38: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000

    link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ff

khanhvc@ubutu:~$ 


hoặc
sudo ip link set ens38 up

2.2 Routing Table

  • Thiết lập default gateway là 192.168.0.7 thông qua interface ens33
sudo ip route add default via 192.168.0.7 dev ens33

  • Xóa default gateway
sudo ip route del default via 192.168.0.7 dev ens33

  • Kiểm tra bảng route hiện tại
khanhvc@ubutu:~$ ip route show
default via 192.168.0.7 dev ens33 proto dhcp metric 100
192.168.0.0/22 dev ens33 proto kernel scope link src 192.168.0.73 metric 100
khanhvc@ubutu:~$

  • Thêm route tĩnh
sudo ip route add 192.168.100.0/24 via 192.168.0.7 dev ens33

  • Xóa route tĩnh
sudo ip route del 192.168.100.0/24 via 192.168.0.7 dev ens33

  • Kiểm tra packet mà route đi qua. Ví xem để đến ip 8.8.8.8 sẽ đi qua route nào.
khanhvc@ubutu:~$ ip route get 8.8.8.8
8.8.8.8 via 192.168.0.7 dev ens33 src 192.168.0.73 uid 1000
    cache
khanhvc@ubutu:~$ 


  • Kiểm tra bảng ARP 

khanhvc@ubutu:~$ ip neigh
192.168.0.16 dev ens33 lladdr 50:e5:49:a4:01:dd REACHABLE
192.168.0.7 dev ens33 lladdr 00:d7:8f:0d:b8:3f REACHABLE
192.168.0.48 dev ens33 lladdr 94:de:80:a6:fb:30 REACHABLE
khanhvc@ubutu:~$


3. Troubleshooting
  • ping
  • traceroute: ICMP
  • tracepath: UDP
  • host
  • dig
  • nslookup
  • netstat
  • ss
Cài traceroute trên ubuntu
sudo apt-get install traceroute

Cài traceroute trên CentOS
sudo yum install traceroute

Command Giải Thích
ping -c 4 google.com.vn Ping google.com.vn với 4 gói tin
traceroute 8.8.8.8 Kiểm tra để đi đến được google.com.vn thì cần qua những next-hop nào
tracepath google.com.vn Tương tự như traceroute



Xong!

Using Commands Cat, Head, Tail, Less & More In Linux/Ubuntu/CentOS

Mục Lục:

1. Lệnh Cat
2. Lệnh Head
3. Lệnh Tail
4. Lệnh Less
5. Lệnh More

Nội Dung:

1. Lệnh Cat: Dùng để đọc, và xem nội dung của file

Command Giải Thích
cat /etc/passwd Hiển thị nội dung file passwd
cat -n /etc/passwd Hiển thị số dòng và nội dung file passwd
cat file1.txt file2.txt Nối nội dung file1.txt, file2.txt và hiển thị ra màn hình
cat file1.txt file2.txt > file12.txt Nội dung của file1.txt và file2.txt sẽ được copy vào file12.txt
cat file1.txt >> file12.txt Nếu file12.txt có nội dung rồi thì nội dung file1.txt sẽ được chèn vào dưới của nội dung file12.txt
cat > file.txt Tạo ra file.txt và nội dung cho phép nhập từ bàn phím. Nhấn Ctrl + D để kết nhập dữ liệu

2. Lệnh Head: Hiển thị các dòng đầu tiên của file, mặc định hiển thị 10 dòng đầu tiên, tuy nhiên chúng ta có thể tùy chọn thay đổi các tham biến được 

Command Giải Thích
head /etc/passwd Hiển thị 10 dòng đầu tiên của file passwd
head -5 /etc/passwd Hiển thị 5 dòng đầu tiên của file passwd
head -v /etc/passwd Hiển thị 10 dòng đầu tiên của file passwd và có hiển thị tiêu đề
head -c 20 /etc/passwd Hiển thị ra 20 byte(20 ký tự) đầu tiên của file

3. Lệnh Tail: Tương tự head, tuy nhiên tail hiển thị các dòng cuối cùng của file.

Command Giải Thích
tail -5 /etc/passwd Hiển thị 5 dòng cuối cùng của file passwd
tail -c 20 /etc/passwd Hiển thị ra 20 byte(20 ký tự) cuối của file
tail -f logfile.txt Hiển thị 10 dòng cuối cùng của file. Thường áp dụng để xem các file log của hệ thống, nhấn Crtl + C để thoát.

4. Lệnh Less: Với các file lớn nếu dùng lệnh cat để xem nội dung thì tốt rất nhiều bộ nhớ sẽ làm ảnh hưởng đến hệ thống. Với less giúp chúng ta xem 1 phần nội dung của file và chúng ta có thể chuyển chuyển lên xuống để xem nội dung toàn bộ file.

Cú pháp:

less  /etc/passwd

Các file thường sử dụng trong lệnh less:

  • Space: Hiển thị nội dung trang kế tiếp (trang dưới)
  • b: Hiển thị nội dung trang trên
  • G: Hiển thị trang cuối cùng
  • g: Hiển thị trang đầu tiên
  • /{chuỗi cần tìm}: Tìm kiếm nội dung
  • ?{chuỗi cần tìm}: Tìm kiếm nội dung
  • v: Cho phép chỉnh sửa nội dung file hiện tại
  • q: Thoát 


5. Lệnh More: Dùng để mở file và tương tác, tuy nhiên với lệnh more chúng ta KHÔNG thể cuộn lên trang trước như less.

Cú pháp: 

more  /etc/passwd


Xong!

AWK Command In Linux/Ubuntu/CentOS

Command Giải Thích Kết Quả
echo "Linux commands" | awk '{$2="DONG LENH";print $0}' Thay đổi nội dung của cột thứ 2 của chuỗi "Linux command" trong lệnh echo thành "DONG LENH" và in toàn bộ nội của chuỗi sau khi thay đổi Linux DONG LENH
echo 'foo:123:bar:456' | awk -F: '{print $2}' In ra cột thứ 2 trong chuổi 'foo:123:bar:456' (F: có nghĩa căn cứ vào dấu ":" để tách cột). 123
echo 'foo:123:bar:456' | awk -F: '{print $NF}' In ra cột cuối cùng 456
echo 'foo:123:bar:456' | awk -F: '{print $(NF-1)}' IN ra cột trước cột cuối cùng 1 cột bar
awk '{print}' file.txt In toàn bộ nội dung của file.txt
awk '{print $2}' file.txt In ra nội dung của cột thứ 2 trong file.txt
awk -F: '{print $1}' /etc/passwd In ra nội dung của cột thứ nhất trong file passwd
awk '$2 > 300' file.txt In ra nội dung của dòng đó nếu giá trị của cột thứ 2 > 300
awk '{if($2 > 300) print $0 }' file.txt In ra cả dòng nếu giá trị của cột thứ 2 lớn hơn 300
awk '{if($2 > 300) print $2 }' file.txt In ra giá trị của cột thứ 2 nếu giá trị đó lớn hơn 300

Xong!

Sed Command in Linux/Ubuntu/CentOS - Tìm Kiếm & Thay Thế

Mục Lục

1. Cài đặt Sed

2. Ví dụ


Nội Dung:

1. Cài đặt Sed

sudo apt-get install sed

Kiểm tra version sau khi cài đặt

sed --version


2. Ví dụ

Command Giải Thích
sed 1s/thu/THU/g file.txt Tìm chữ "thu" ở dòng thứ 1 của file có tên file.txt, thay thế bằng chữ "THU" và hiển thị nội dung ra của file và thông tin vừa thay đổi ra màn hình
sed 1,5s/thu/THU/g file.txt Tìm chữ "thu" ở dòng thứ 1 đến dòng thứ 5 của file có tên file.txt và thay thế bằng chữ "THU" và hiển thị nội dung ra của file ra màn hình
sed -i 1,5s/thu/THU/g file.txt Tìm chữ "thu" ở dòng thứ 1 đến dòng thứ 5 của file có tên file.txt và thay thế bằng chữ "THU" và lưu file, KHÔNG hiển thị nội dung ra của file ra màn hình
sed -i 1,5s/thu/THU/gc file.txt Hiển thị thông tin yêu cầu xác nhận trước thực hiện thay thế
sed -i '2i NoiDung' file.txt Chèn chữ "NoiDung" vào dòng thứ 2 của file.txt
sed 6,9s/thu/THU/g file.txt >filecp.txt Tìm chữ "thu" ở dòng thứ 6 đến dòng thứ 9 của file.txt, thay thế bằng chữ "THU" và lưu nội dung file và kết quả vừa thay thế vào filecp.txt
sed -n "/THU/p" filecp.txt Hiển thị tất cả các dòng có chứa chữ "THU" trong filecp.txt
sed -n "/1/ s/10/MUOI/p" filecp.txt Tìm trong filecp.txt nếu có "1" và tìm tiếp nếu có "10" thì thay thế bằng "MUOI", và hiển thị ra màn hình của dòng sau khi thay thế
sed -n "2p; 5p" filecp.txt Hiển thị dòng thứ 2 và dòng thứ 5 của filecp.txt
sed "2 s/hai/HAI/" filecp.txt Nếu dòng thứ 2 của filecp.txt có "hai" thì thay bằng "HAI" và hiển thị ra. Nếu không có thì hiển thị nội dung hiện tại
sed -i "s/10/MUOI/" file.txt filecp.txt Tìm "10" trong file.txt và filecp.txt nếu có thì thay bằng "MUOI" và lưu lại
sed "/12/Id" filecp.txt Tìm kiếm trong filecp.txt nếu có "12" thì xóa dòng đó, sau đó hiển thị kết quả sau khi xóa ra màn hình

Xong!

Security Fundamentals In Linux/Ubuntu/CentOS

 

Command Giải Thích
su itsupport Switch user sang user itsupport, vẫn đứng tại thư mục hiện tại
su - itsupport Switch user sang user itsupport, thiết lập các biến môi trường giống như account itsupport login vào hệ thống
exit Sau khi switch muốn trở lại user trước đó gõ exit
sudo super user do, là user root
sudo su Switch to user root
sudo -k Mặt định timestamp_timeout=30 có nghĩa là trong vòng 30 giây nếu thực hiện lênh sudo sẽ không yêu cầu nhập password, nếu muốn không hỏi password nữa chỉnh lại thời gian là timeout=0. Khi gõ sudo -k có nghĩa timeout ngay lập tức.

Basic Regular Expression In Linux/Ubuntu/CentOS

Mục Lục

1. Regular Expression Căn Bản

2. Ví dụ:


Nội dung:

1. Regular Expression Căn Bản

Ký Hiệu Giải Thích
. Bất kỳ ký tự nào
+ MỘT hoặc NHIỀU lần xuất hiện TRƯỚC nó
* Không hoặc NHIỀU lần xuất hiện TRƯỚC nó
? Không hoặc MỘT lần xuất hiện TRƯỚC nó
^ Đại diện cho mẫu ĐỨNG ĐẦU một chuỗi
$ Đại diện cho mẫu KẾT THÚC một chuỗi
[] Tập hợp các ký tự/ khớp với bất kỳ ký tự nào nằm trong trong dấu ngoặc này
() Gom nhóm các mẫu lại với nhau
{n} Tìm chính xác ký tự và n lần xuất hiện của ký tự
{n,m} Khớp với ký tự xuất hiện 'n' lần nhưng không quá 'm'
{n,} Chỉ khớp với ký tự khi nó xuất hiện 'n' lần trở lên
\ Đại diện cho một ký tự đặc biệt
\+ Khớp với một hoặc nhiều lần xuất hiện của ký tự trước
\? Khớp 0 hoặc một lần xuất hiện của ký tự trước

2. Ví dụ:

Commands Giải Thích
cat file.txt | grep a Mở file.txt và tìm chữ 'a' trong file.txt sau đó trả về kết quả.
HOẶC grep a file.txt Tìm chữ 'a' trong file.txt, tuy nhiên với cách tìm kiếm này ít tốn tài nguyên hơn
cat file.txt | grep ^a Tìm chuỗi bắt đầu bằng chữ 'a' trong file.txt
cat file.txt | grep g$ Tìm chuỗi kết thúc bằng chữ 'g' trong file.txt
cat file.txt | grep .a Tìm a và bất kỳ ký tự nào đứng trước a
cat file.txt | grep a. Tìm a và bất kỳ ký tự nào đứng sau a
cat file.txt | grep -E p\{2} Trả về 1 chuỗi nếu trong chuỗi có có chữ 'p' xuất hiện 2 lần
grep -v ^$ /etc/login.defs | grep -v ^\# Hiển thị nội dung file login.defs nhưng không hiển thị các dòng trắng và dòng giải thích (bắt đầu bằng dấu #)

Xong!

File/Directory Permission In Linux/Ubuntu/CentOS

Mục lục

1. File type (căn cứ vào ký tự đầu tiên)
2. Nhóm phân quyền trong Linux - Ownership:
3. Kiểm soát quyền truy cập - Permission:
4. Thay đổi permission - chmod
5. Thay đổi permission - chmod bằng cơ số
6. Defaulf permission - umask


Nội dung

1. File type (căn cứ vào ký tự đầu tiên)


Attribute File type
- Là ký hiệu của file thường
d Ký hiệu của thư mục (Directory)
l Ký hiệu của symbolic link

2. Nhóm phân quyền trong Linux - Ownership:

  • Owner: Mỗi file, thư mục được sở hữu bởi một user nhất định (phân quyền sở hữu)
  • Group: Mỗi file, thư mục được sở hữu bởi một group
  • Others: Quyền truy cập cập các user, group không phải là owner và group
Commands Giải Thích
id Xác định username hiện tại
ls -l Liệt kê các items cung với thông tin owner, group
ls -l file_name.txt Xem file_name.txt đang set những quyền nào
chown thay đổi owner
chgrp Thay đổi group
-R Recursively (đệ qui)
chown: NEW_GROUP == chgrp
chown NEW_USER:NEW_GROUP Thay đổi đồng thời ower và group

  • Cú pháp:
chown option [tên user]:[tên group] [file/folder]

- Option: chủ yếu vẫn dùng với -R 

  • Ví dụ:
Command Giải Thích
chgrp ITadmin file.txt Thiết lập group ITadmin là owner của file.txt
chgrp -R ITadmin folder_name Thiết lập group ITadmin là owner của thư mục có tên folder_name và áp xuống tất cả (đệ quy) các file và thư mục con của folder này.
chown itsupport file.txt Thiết lập owner file.txt là user itsupport
chown khanhvc:root file.txt Thiết lập owner file.txt là user khanhvc và owner group cho file.txt là root
chown -R khanhvc:root folder_name Thiết lập user khanhvc và group root là owner của thư mục có tên folder_name và áp xuống tất cả (đệ quy) các file và thư mục con của folder này.

3. Kiểm soát quyền truy cập - Permission:

Attribute Permission Files Directory
r read Cho phép mở file và đọc cho phép list content của directory nếu thuộc tính x (execute) cũng được set
w write Cho phép ghi vào file hoặc xóa nội dung file, không cho phép xóa hoặc rename. Cho phép xóa, tạo, đổi tên file nếu thuộc tính x cũng được set
x execute Cho phép file được coi như một chương trình có thể thực thi được. Những file được viết bằng scripting language cũng cần có quyền đọc r để có thể thực thi được Cho phép truy cập directory
- Deny Không được phép Không được phép

4. Thay đổi permission - chmod


  • Ký hiệu cho đối tượng
Ký Hiệu Ý Nghĩa
u User/Owner
g Group
o Other or everyone
a All

  • Ký hiệu cho operations
Ký Hiệu Ý Nghĩa
+ Permisssion được add thêm vào/add permission
- Permission bị xóa bỏ/remove permission
= Thay thế toàn bộ quyền hiện tại bằng quyền mới này

  • Ví dụ:
Command Giải Thích
chmod o+w file_name.txt Cho phép user có quyền write trên file file_file.txt
chmod g-w file_name.txt Xóa bỏ quyền write của group trên file file_file.txt
chmod g=rwx file_name.txt Thay thế tất cả các quyền trước đây bằng quyền mới là: read, write và execute trên file file_name.txt

5. Thay đổi permission - chmod bằng cơ số


Octal Permission Ý Nghĩa
0 --- Không có quyền gì cả - none
1 --x Chỉ được quyền thực thi
2 -w- Chỉ được quyền ghi
3 -wx Được phép thi và thực thi
4 r-- Chỉ có quyền đọc
5 r-x Có quyền đọc và thực thi
6 rw- Có quyền đọc và ghi
7 rwx Có quyền đọc, ghi và thực thi
  • Ví dụ:
Command Giải Thích
chmod 777 folder_name Cho phép everyone được full quyền trên folder có tên folder_name
chmod 700 file_name.txt Cho phép user full quyền, Group và Other không có quyền
chmod 642 file_name.txt Cho phép user có quyền được và ghi, group chỉ có quyền đọc, others chỉ có quyền ghi

6. Defaulf permission - umask

Chúng ta tạm hiểu là nó dùng để phân quyền mặc định cho file hoặc folder sau khi tạo ra. Giá trị permission mặc định của thư mục có giá trị là 777, file là 666. Nếu chúng ta sử dụng lệnh umask <giá trị> trước, sau đó sử dụng lệnh để tạo file hay thư mục thì phân quyền của file hoặc thư mục được tính là: lấy giá trị mặc định trừ đi giá trị umask



  • Ví dụ: 
Command Giải Thích
umask 002
touch test_umask.txt
Tạo file test_umask.txt có các quyền: Owner: Read + write; Group: Read + write; Others: Read
umask 002
mkdir test_umask
Tạo thư mục có các quyền: Owner: full quyền; Group: full quyền; Others: Read + execute

P/s: Giá trị mặc định của umask là 002, điểm kiểm tra giá trị của umask hiện tại chúng ta dùng umask

Xong!

Account Management In Linux/Ubuntu/CentOS

Mục lục

1. Tạo mới Group/User

2. Thêm/xóa user trong group

3. Profiles/Policies cho User


Nội dung:

1. Tạo mới Group, User mới

Commands Diễn Giải
cat /etc/group Kiểm tra các group hiện tại đang tồn tại trên hệ thống
sudo groupadd ITadmin Tạo group mới có tên ITadmin
cat /etc/group | grep ITadmin Kiểm tra group ITadmin có tồn tại không
sudo groupdel ITadmin Xóa group ITadmin ra khỏi hệ thống
sudo adduser itsupport Tạo user mới có trên itsupport
id itsupport Hiển thị thông tin user itsupport
sudo passwd itsupport Đặt password cho user itsupport
sudo useradd -c "Su dung cho backup" bkuser Tạo user mới có tên là bkuser và có phần comment là "Su dung cho backup"
sudo userdel bkuser Xóa user có tên là bkuser
sudo userdel -r bkuser Xóa user có tên là bkuser và thư mục home, thư mục mail
cat /etc/passwd Hiện thị thông tin tất cả user có trên hệ thống
grep itsupport /etc/passwd Hiển thông tin của user itsupport
sudo cat /etc/shadow Hiển thị thông tin lưu trữ password đã mã hóa của tất cả các user
usermod -L itsupport lock user itsupport
usermod -U itsupport unlock user itsupport

2. Thêm/xóa user trong group

Commands Diễn Giải
sudo usermod -a -G ITadmin itsupport Thêm user itsupport vào group có trên ITadmin
sudo usermod -a -G Group1,Group2,Group2 itsupport Thêm user itsupport vào các group: Group1,Group2,Group2
sudo gpasswd -M khanhvc,itsupport root Thêm các user: khanhvc,itsupport vào group có tên root
grep itsupport /etc/passwd Kiểm tra user itsuport thuộc những group nào
HOẶC grep itsupport /etc/group Kiểm tra user itsuport thuộc những group nào
grep root /etc/group Kiểm tra xem group root có bao nhiêu thành viên
sudo gpasswd -d itsupport root Xóa user itsupport ra khỏi group root

3. Profiles/Policies cho User

Commands Diễn Giải
grep -v ^$ /etc/login.defs | grep -v ^\# Hiển thị nội dung file login.defs nhưng không hiển thị các dòng trắng và dòng giải thích (bắt đầu bằng dấu #)
PASS_MAX_DAYS 30 Password có hiệu lực trong vòng 30 ngày
PASS_MIN_DAYS 1 Sau khi đặt password 1 ngày thì chúng ta mới có thể đổi được password mới
PASS_MIN_LEN 3 Độ dài của password phải >= 3
PASS_WARN_AGE 7 Hiển thị cảnh báo nếu password nếu còn 7 ngày nữa hết hiệu lực
CREATE_HOME yes Tạo thư mục home cho user
ENCRYPT_METHOD SHA512 Mã hóa password theo thuật toán SHA512

Xong!

Hard Links & Symbolic Links In Linux/Ubuntu/CentOS

Khi một file hoặc folder được tạo ra trong Linux nó sẽ tạo ra 1 số cho file hoặc folder đó. Số đó gọi là INODE và đây là dãy số duy nhất trên hệ thống của Linux nhằm mục đích quản lý. 

Ví dụ:

khanhvc@ubutu:~/projects$ ll -i

total 12

2621505 drwxrwxr-x  3 khanhvc khanhvc 4096 Thg 9  23 14:05 ./

2621442 drwxr-xr-x 27 khanhvc khanhvc 4096 Thg 9  23 14:05 ../

2621869 -rw-rw-r--  1 khanhvc khanhvc    0 Thg 9  23 14:05 file_name.txt

2755955 drwxrwxr-x  2 khanhvc khanhvc 4096 Thg 9  23 14:05 folder_name/

khanhvc@ubutu:~/projects$


1. Hard Links

Ví dụ: tạo hard links có tên hardlink.txt trỏ về file_name.txt
khanhvc@ubutu:~/projects$ ln file_name.txt hardlink.txt
khanhvc@ubutu:~/projects$ ll -i
total 12
2621505 drwxrwxr-x  3 khanhvc khanhvc 4096 Thg 9  23 14:17 ./
2621442 drwxr-xr-x 27 khanhvc khanhvc 4096 Thg 9  23 14:05 ../
2621869 -rw-rw-r--  2 khanhvc khanhvc    0 Thg 9  23 14:05 file_name.txt
2755955 drwxrwxr-x  2 khanhvc khanhvc 4096 Thg 9  23 14:05 folder_name/
2621869 -rw-rw-r--  2 khanhvc khanhvc    0 Thg 9  23 14:05 hardlink.txt
khanhvc@ubutu:~/projects$

Chúng ta thấy file hardlink.txt và file_name.txt có inode giống nhau, có nghĩa hard link sẽ tạo link trỏ về link gốc của tập tin, hay nói cách khác hardlink.txt và file_name.txt có cùng chung một dữ liệu.

Nếu chúng ta thêm dữ liệu vào file hardlink.txt, cũng đồng nghĩa dữ liệu đó được thêm vào file_name.txt
khanhvc@ubutu:~/projects$ echo "thêm nội dung vào hardlink.txt" >> hardlink.txt
khanhvc@ubutu:~/projects$ cat file_name.txt
thêm nội dung vào hardlink.txt
 
khanhvc@ubutu:~/projects$ cat hardlink.txt
thêm nội dung vào hardlink.txt
khanhvc@ubutu:~/projects$

Nội dung 2 file hoàn toàn giống nhau. Nếu chung ta xóa 1 trong 2 file này vẫn không ảnh gì đến dữ liệu của file còn lại

khanhvc@ubutu:~/projects$ rm file_name.txt
khanhvc@ubutu:~/projects$ ls -i
2755955 folder_name  2621869 hardlink.txt
khanhvc@ubutu:~/projects$


Thực hiện xóa file file_name.txt, kiểm tra nội dung file hardlink.txt

 

khanhvc@ubutu:~/projects$ cat hardlink.txt
thêm nội dung vào hardlink.txt
khanhvc@ubutu:~/projects$


2. Symbolic Links: Tạo ra 1 link để trỏ đến file hoặc thưc mục gọi target. Nó không chứa bản sao copy của target mà nó chỉ link đến file hay thư mục, nó tương tự như shortcut trong windows. Vì là shortcut nên khi symbolic links bị xóa sẽ không ảnh hưởng đến nội của file hay thư mục, ngược lại nếu target bị xóa hay đổi tên symblic link sẽ không cập nhật, không hoạt động như link

Ví dụ:
Tạo symbolic link có tên softlink.txt trỏ về file_name.txt, và softlink_folder.txt trỏ về folder_name
khanhvc@ubutu:~/projects$ ln -s file_name.txt softlink.txt
khanhvc@ubutu:~/projects$ ln -s folder_name softlink_folder.txt
khanhvc@ubutu:~/projects$ 

 

khanhvc@ubutu:~/projects$ ls -i
2621869 file_name.txt  2625309 softlink_folder.txt
2755955 folder_name    2621566 softlink.txt
khanhvc@ubutu:~/projects$ 

Các số/inode của symbolic link và target là khác nhau

khanhvc@ubutu:~/projects$ ll -i
total 16
2621505 drwxrwxr-x  3 khanhvc khanhvc 4096 Thg 9  23 14:42 ./
2621442 drwxr-xr-x 27 khanhvc khanhvc 4096 Thg 9  23 14:05 ../
2621869 -rw-rw-r--  1 khanhvc khanhvc   35 Thg 9  23 14:24 file_name.txt
2755955 drwxrwxr-x  2 khanhvc khanhvc 4096 Thg 9  23 14:05 folder_name/
2625309 lrwxrwxrwx  1 khanhvc khanhvc   11 Thg 9  23 14:42 softlink_folder.txt -> folder_name/
2621566 lrwxrwxrwx  1 khanhvc khanhvc   13 Thg 9  23 14:42 softlink.txt -> file_name.txt
khanhvc@ubutu:~/projects$

Thuộc tính của symbolic link là  l

Xong!

Basic File Editing - Vim In Linux/Ubuntu/CentOS

Nội dung

1. Cài đặt Vim
2. Vim modes
3. Saving Changes
4. Moving File
5. Cut, Copy & Paste
6. Searching
7. Replace
8. Specials
9. Others

Commands

1. Cài đặt Vim

Ubuntu:

sudo apt install wim


CentOS:

sudo yum install vim


2. Vim modes

  • Command Mode
  • Insert Mode
  • Visual Mode


 

3. Saving Changes

Commands Diễn Giải
:e ten_file.txt Mở file có tên ten_file.txt từ editor
:sav filename.txt Lưu và đặt tên cho file là filename.txt
:x Lưu và thoát khởi vim
:wq Lưu và thoát khởi vim
:wq! Lưu và thoát khởi vim, ghi đè
:w Lưu, nhưng không thoát khỏi vim
:w! Lưu và thoát khởi vim, ghi đè
:q Thoát vim và không lưu
:q! Thoát vim và không lưu (overrides protection)
ZZ Lưu và thoát khởi vim
. Lặp lại thao tác gần nhất ở Normal Mode
10. Lặp lại 10 lần thao tác gần nhất ở Normal Mode


4. Moving File

Commands Diễn Giải
h hoặc mũi tên trái Duy chuyển sang trái 1 ký tự
l hoặc mũi tên phải Duy chuyển sang phải 1 ký tự
j hoặc mũi tên xuống Duy chuyển con trỏ xuống dưới 1 dòng
k hoặc mũi tên lên Duy chuyển con trỏ lên trên 1 dòng
e Duy chuyển con trỏ đến cuối từ
b Duy chuyển con trỏ đến đầu từ
w Duy chuyển con trỏ đến từ đầu tiên của chữ kế tiếp
gg Duy chuyển con trỏ về đầu file
G Duy chuyển con trỏ về cuối file
5G hoặc :5 Duy chuyển con trỏ đến dòng thứ 5
CTR + Y Cuộn lên 1 dòng
CTR + E Cuộn xuống 1 dòng
CTR + U Cuộn lên nữa màn hình
CTR + D Cuộn xuống nữa màn hình
CTR + B Cuộn lên 1 màn hình
CTR + F Cuộn xuống 1 màn hình


5. Cut, Copy & Paste

Commands Diễn Giải
y Copy phần text đã chọn vào clipboard
p Paste
dd Cut dòng hiện tại
yw Copy word
yy Copy dòng hiện tại
y$ Copy đến cuối dòng
D Copy tới cuối file


6. Searching

Commands Diễn Giải
/vidu Tìm kiếm "vidu" từ trên xuống dưới
?vidu Tìm kiếm "vidu" từ trên dưới lênh
/\cvidu Tìm "vidu" cả chữ hoa lẫn chữ thường (từ trên xuống)
/jo[ha]n Tìm "john" và "joan"
/^the Tìm từ bắt đầu bằng the (từ trên xuống) ví dụ: theatre or then
/the$ Tìm từ kết thúc bằng the ví dụ: breathe



7. Replace

Commands Diễn Giải
:%s/hoc/HocHanh/g nếu tìm thấy chữ "hoc" thì thay thế bằng "HocHanh" trong tất cả các dòng.
:%s/hoc/HocHanh/gc nếu tìm thấy chữ "hoc" thì thay thế bằng "HocHanh" trong tất cả các dòng, nhưng confirm trước khi replace.
:s/hoc/HocHanh/g nếu tìm thấy chữ "hoc" thì thay thế bằng "HocHanh" ở dòng hiện tại.
:4,10s/123/Mot Hai Ba/gc tìm từ dòng 4 -> 10 nếu có nội dung "123" thì thay bằng "Mot Hai Ba", confirm trước khi thay thế.
:5,$s/hoc/hocLinux/g Replace toàn bộ chữ "hoc" thành "hocLinux" từ dòng 5 đến cuối file
:%s/^/hello/g Thêm vào đầu của mỗi dòng chữ "hello"
:%s/$/Seeyouagain/g Thêm vào cuối của mỗi dòng chữ "Seeyouagain"


8. Specials

Commands Diễn Giải
:!ip a hiển thị kết quả của dòng lệnh ip a, nhưng không thoát editor
:r!ip a đưa kết quả của lệnh ip a vào editor
:r file.txt lấy nội dung của file đưa vào editor


9. Others

Commands Diễn Giải
:set number đánh số dòng cho file đang mở
:start,end dòng bắt đầu, dòng kết thức


Xong!

Regular Expression In Linux/Ubuntu/CentOS

Nội dung:

  • Tạo Regular Expression (RegEx) đơn giản
  • Sự khác nhau giữa RegEx căn bản và RegEx extended (Egrep)


Commands

1. Grep - Global RegEx: In ra dòng nếu tìm thấy mẫu (patterns)

Cú Pháp Ví Dụ Giải Thích
grep "chuoi can tim" ten_file grep "vi du" file.txt Tìm chuỗi "vi du" trong file.txt, nếu có trả về dòng có chứa nội dung chữ "vi du"
grep "chuoi" file_pattern grep "vi du" fil*.txt Tìm chuỗi "vi du" trong các file bắt đầu bằng fil*.txt, nếu có trả về dòng có chứa nội dung chữ "vi du"
grep -i "vi du" file.txt -i: không phân biệt chữa hoa chữ thường
grep -l -r -w "vi du" * đưa ra danh sách các file nếu tìm thấy chuỗi "vi du" file đó.(w: word-regex; r: đệ quy; l: tên file nếu tìm thấy)
grep -w "no" file_name.txt - Tìm kiếm chính xác, chỉ trả về kết của các dòng có chứa chữ "no".
- Nếu chuỗi có chữ "not" hoặc "nothing" thì với cách tìm kiếm này "not", "nothing" kết quả sẽ KHÔNG trả về ouput
grep -n -w "Error" file.txt hiển thị số thứ tự của dòng đó nếu tìm thấy chuỗi
grep [0-9] file.txt trả về kết quả dòng đó nếu dòng đó có chứa sổ [0-9]

2. Egrep - Extended grep:

Với grep dùng tham số -E, tuy nhiên để cải tiến về tốc độ cũng như giảm không ban bộ nhớ chúng ta dùng egrep.

grep -E "[a-z]+" file.txt

tương đương
egrep "[a-z]+" file.txt


Xong!

Using Streams, Pipes & Redirects - STDOUT/STDIN/STDERR In Linux/Ubuntu/CentOS

Nội dung:

  • Redirecting standard input/output/error
  • Pipe: dữ liệu output của command này trở thành dữ liệu input của command khác
  • Sử dung output của command như là argument của command khác
  • Đẩy output của command đến stdout và log file


Command 

Lệnh Giải Thích Ví Dụ
> Đưa STDOUT ghi vào file, nếu file đã có thì ghi đè, file chưa tồn tại thì tạo file
>> chèn vào cuối file
2> STDERR nếu có lỗi sẽ ghi vào file, ghi đề lên file cũ
2>> STDERR lỗi chèn vào cuối file
< STDIN đưa dữ liệu vào từ 1 file
<> STDIN dữ liệu vào của 1 file sẽ redirect sang STDOUT vào file
tr tạm hiểu là tìm và thay thế.
Nếu trong chuỗi "Hoc linux go miet" có khoảng trắng thì thay thế bằng dấu "_" echo "Hoc linux go miet" | tr " " "_"
Nếu nội dung trong file.txt có khoảng trắng thì thay dấu "_" tr " " "_" < file.txt
tee cho phép ghi output ra file và ghi output ra terminal
ghi chuỗi "example" vào file có tên là file.txt echo "example" | tee file.txt
chèn thêm chuỗi "example-1" vào file.txt (không ghi đè) echo "example-1" | tee -a file.txt

Xong!

Basic File Management In Linux / Quản Lý File Căn Bản Trong Linux

 Nội dung:

  • Copy, duy chuyển và xóa file và thư mục
  • Copy nhiều file, nhiều thư mục với đệ qui (recursively)
  • Xóa file, thư mục đệ qui
  • Tìm kiếm


Command

Lệnh Giải Thích Ví Dụ
mkdir tạo thư mục mới mkdir vidu
rmdir xóa thư mục rmdir vidu
touch tạo file mới rỗng touch vidu.txt
rm xóa file đã có rm vidu.txt

xóa thư mục vidu và tất cả các file thư mục này rm -r vidu/

xóa thư mục vidu và tất cả các file thư mục này mà không cần hỏi. f: force rm -rf vidu/
cp copy file hoặc thư mục. Cấu trúc: cp file_nguon file_dich
mv duy chuyển file hay thư mục. cấu trúc mv nguon dich
tar
Tape Archive (tarball) - là chương trình cho phép lưu trữ nhiều file dưới dạng một file (đóng gói)

Tạo file vidu.tar với dữ liệu được lấy từ thư mục vidu. c: tạo file; v: hiển thị dánh sách các file trong tiến trình; f: tên file tar -cvf vidu.tar vidu/

Giải nén file.tar, các file sau khi giải nén sẽ được đưa vào thư mục vidu. x: giải nén file tar -xvf vidu.tar vidu/
gzip
tar.gz hoặc tgz: Nén và giải nén tốc độ nhưng nén (compressed) không cao
bz2
tab.bz2 hoặc tbz hoặc tb2: nén và giải nén tốn nhiều thời gian hơn gzip, do thuật toán giải nén có độ nén cao hơn
find
tìm kiếm. ví dụ tìm kiếm tất cả các file .txt và ký tự bắt đầu là fi find -name fi*.txt

Xong!

History Commands In Linux/Ubuntu/CentOS - Lệnh History Trên Linux

Ví Dụ Giải Thích
history hiển thị các câu lệnh user đã thực hiện trước đó
history 3 hiển thị 3 câu lệnh gần nhất
!! Thực hiện lại câu lệnh gần nhất
!101 thực hiện lại câu lệnh có số thứ tự là 101
!systemctl thực hiện lại câu lệnh cuối cùng bắt đầu bằng chuỗi "systemctl"
history | grep date hiển thị các câu lệnh đã thực thi có chuỗi "date"
history -w ghi lịch sử vào file users ~/.bash_history
history -c xóa lịch sử các câu lệnh đã thực hiện
history -d 101 xóa lịch sử câu lệnh có số thứ tự 101
echo "test"; history -d $(history 1) thực hiện in ra mà hình chữ test và không ghi câu lệnh này vào history
echo $HISTSIZE hiển thị kích thước lưu trử hiện tại
HISTSIZE=1500 Tăng khả năng lưu trữ lên là 1500 câu lệnh

Xong!

Basic Shell Commands In Linux/Ubuntu/CentOS - Các Lệnh Shell Cơ Bản Trong Linux - Ubuntu

Mục lục:

1. Mở terminal trong Linux

2. Trợ giúp trong linux

3. Các phím tắt cơ bản

4. Các lệnh cơ bản

5. Các biến môi trường


Nội dung:

1. Mở terminal trong Linux



2. Trợ giúp trong linux
  • Man page: Để xem các tùy chọn các lệnh cụ thể, 
Ví dụ: man ls 
Trong đó: 
- man: là từ khóa
- ls: là lệnh cần xem các tùy chọn
  • --help:
Ví dụ: ls --help. muốn xem các tùy chọn của lệnh ls


3. Các phím tắt cơ bản
  • Tab: Hoàn thành dòng lệnh
  • Tab + Tab: hiện thị/liệt kê tất cả các lệnh có liên qua đến từ vừa gõ
Ví dụ: gõ pin và nhấn Tab 2 lần sẽ cho kết quả như hình

  • CTRL + L: clear terminal
  • CTRL + D: logout
  • CTRL + K: xóa về phải đến hết dòng
  • CTRL + U: xóa về trái đến hết dòng
  • CTRL + W: xóa trái "word"
  • CTRL + Y: paste sau khi U, K, W
  • CTRL + P: command vừa chạy trước đó
  • CTRL + N: command vừa chạy sau đó
  • CTRL + A: về đầu dòng lệnh
  • CTRL + E: về cuối dòng lệnh
  • CTRL + E: Reserve history command search
  • SHIFT Page Up/Down: up/down terminal
  • !!: thực thi dòng lệnh cuối cùng

4. Các lệnh cơ bản

Lệnh Giải Thích Ví Dụ
echo In ra nội dung những gì đứng sau nó, có thể là chuỗi hoặc là biến giá trị echo "hello world"
ls liệt kê các thư mục
pwd hiển thị đường dẫn đến thư mục đang hoạt động
cd thay đổi thư mục
lùi ra một cấp so với thư mục hiện tại cd ..
vào thư mục vidu cd vidu
clear xóa màn hình
history hiển thị các lệnh đã dùng trước đó
hiển thị 10 trước đó history 10
uname hiển thị phiên bản hệ điều hành uname -a
alias cơ bản là một shortcut/bí danh, có thể thay thế cho 1 lệnh hoặc tập lệnh alias vck="sudo apt-get update"
sau khi tạo alias xong, để thực thi lệnh/tập lệnh đã khai báo chúng ta chỉ cần gọi tên của alias vừa định nghĩa vck
unalias xóa alias unalias vck
ifconfig có thể biết được địa chỉ ip hiện tại của thiết bị
whoami hiển thị user hiện tại
adduser thêm user mới adduser vck311
passwd đổi password cho user passwd vck311
sudo thực thi câu lệnh với quyền cao nhất, đó là quyền root (khi thực hiện hệ thống yêu cầu nhập password) sudo adduser vck311
shutdown tắt máy tính sudo shutdown -h now
reboot khởi động lại máy tính

5. Các biến môi trường

Lệnh Giải Thích Ví Dụ
printenv hiển thị toàn bộ hoặc một phần các biến môi trường
env chạy chương trình trong 1 môi trường với các biến tùy chỉnh
set hiển thị tên/giá trị của Shell. Thay đổi các thuộc tính của Shell

Xong!

CentOS, Cài Đặt Ngày Giờ Trên CentOS

Yêu cầu:
1. Cài đặt thủ công
2. Cài đặt thông qua NTP - Network Time Protocol

Thực hiện:

1. Cài đặt thủ công
  • Kiểm tra trước khi cài đặt
[root@CentOS ~]# timedatectl status
      Local time: Wed 2020-06-17 08:15:01 IST
  Universal time: Wed 2020-06-17 01:15:01 UTC
        RTC time: Wed 2020-06-17 01:15:01
       Time zone: Asia/Kolkata (IST, +0530)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@CentOS ~]# 

Noted: Trước khi chỉnh ngày giờ chúng ta nên chỉnh Time zone trước sau đó đến Local time sau

Để biết danh sách các Time zone chúng tôi dùng lệnh timedatectl list-timezones, hoặc chi tiết hơn timedatectl list-timezones | grep Ho_Chi_Minh

[root@CentOS ~]# timedatectl list-timezones | grep Ho_Chi_Minh
Asia/Ho_Chi_Minh

  •  Cài đặt Time zone là Asia/Ho_Chi_Minh
[root@CentOS ~]# timedatectl set-timezone Asia/Ho_Chi_Minh
[root@CentOS ~]# 

  • Cài đặt ngày giờ:
Sử dụng câu lệnh có dạng timedatectl set-time 'YYYY-MM-DD HH:MM:SS'
[root@CentOS ~]# timedatectl set-time '2020-06-17 09:19:50'
[root@CentOS ~]# 

  • Kiểm tra sau khi cài đặt
[root@CentOS ~]# timedatectl status 
      Local time: Sat 2020-06-17 09:21:06 +07
  Universal time: Sat 2020-06-17 02:21:06 UTC
        RTC time: Sat 2020-06-17 02:21:07
       Time zone: Asia/Ho_Chi_Minh (+07, +0700)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@CentOS ~]#

2. Cài đặt thông qua NTP - Network Time Protocol
  • Kiểm tra trước khi cài đặt
[root@CentOS ~]# timedatectl status
      Local time: Wed 2020-06-17 09:48:56 +07
  Universal time: Wed 2020-06-17 02:48:56 UTC
        RTC time: Wed 2020-06-17 02:48:56
       Time zone: Asia/Ho_Chi_Minh (+07, +0700)
     NTP enabled: no
NTP synchronized: no

 RTC in local TZ: no
      DST active: n/a
[root@CentOS ~]# 

  • Cài đặt NTP server
[root@CentOS ~]# sudo yum -y install ntp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                       | 8.3 kB  00:00:00   
 * base: mirrors.viethosting.com
 * centos-sclo-rh: mirrors.viethosting.com
 * centos-sclo-sclo: mirrors.viethosting.com
 * epel: mirrors.thzhost.com
 * extras: mirrors.viethosting.com
 * remi-php72: mirrors.thzhost.com
 * remi-safe: mirrors.thzhost.com
 * updates: mirrors.viethosting.com
base                                                                                                       | 3.6 kB  00:00:00   
centos-sclo-rh                                                                                             | 3.0 kB  00:00:00   
centos-sclo-sclo                                                                                           | 3.0 kB  00:00:00   
epel                                                                                                       | 5.3 kB  00:00:00   
extras                                                                                                     | 2.9 kB  00:00:00   
remi-php72                                                                                                 | 3.0 kB  00:00:00   
remi-safe                                                                                                  | 3.0 kB  00:00:00   
updates                                                                                                    | 2.9 kB  00:00:00   
zabbix                                                                                                     | 2.9 kB  00:00:00   
zabbix-frontend                                                                                            | 2.9 kB  00:00:00   
zabbix-non-supported                                                                                       |  951 B  00:00:00   
(1/3): updates/7/x86_64/primary_db                                                                         | 2.1 MB  00:00:00   
(2/3): epel/x86_64/updateinfo                                                                              | 1.0 MB  00:00:01   
(3/3): epel/x86_64/primary_db                                                                              | 6.8 MB  00:00:15   
Resolving Dependencies
--> Running transaction check
---> Package ntp.x86_64 0:4.2.6p5-28.el7.centos will be updated
---> Package ntp.x86_64 0:4.2.6p5-29.el7.centos will be an update
--> Processing Dependency: ntpdate = 4.2.6p5-29.el7.centos for package: ntp-4.2.6p5-29.el7.centos.x86_64
--> Running transaction check
---> Package ntpdate.x86_64 0:4.2.6p5-28.el7.centos will be updated
---> Package ntpdate.x86_64 0:4.2.6p5-29.el7.centos will be an update
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================
 Package                     Arch                       Version                                    Repository                Size
==================================================================================================================================
Updating:
 ntp                         x86_64                     4.2.6p5-29.el7.centos                      base                     548 k
Updating for dependencies:
 ntpdate                     x86_64                     4.2.6p5-29.el7.centos                      base                      86 k
Transaction Summary
==================================================================================================================================
Upgrade  1 Package (+1 Dependent package)
Total size: 635 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : ntpdate-4.2.6p5-29.el7.centos.x86_64                                                                           1/4
  Updating   : ntp-4.2.6p5-29.el7.centos.x86_64                                                                               2/4
  Cleanup    : ntp-4.2.6p5-28.el7.centos.x86_64                                                                               3/4
  Cleanup    : ntpdate-4.2.6p5-28.el7.centos.x86_64                                                                           4/4
  Verifying  : ntp-4.2.6p5-29.el7.centos.x86_64                                                                               1/4
  Verifying  : ntpdate-4.2.6p5-29.el7.centos.x86_64                                                                           2/4
  Verifying  : ntpdate-4.2.6p5-28.el7.centos.x86_64                                                                           3/4
  Verifying  : ntp-4.2.6p5-28.el7.centos.x86_64                                                                               4/4
Updated:
  ntp.x86_64 0:4.2.6p5-29.el7.centos                                                                                           
Dependency Updated:
  ntpdate.x86_64 0:4.2.6p5-29.el7.centos                                                                                       
Complete!
[root@CentOS ~]# 

  • Sửa file /etc/ntp.conf với thông tin server NTP cần đồng bộ. Trong lab này chúng tôi chọn server là time.google.com
[root@CentOS ~]# sudo vim /etc/ntp.conf
{...}
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server  216.239.35.12
server time.google.com

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
{...}

Noted: Nhấn i để sửa -> nhấn Esc :wq -> Enter để lưu lại thay đổi và thoát khỏi vim. Đảm bảo KHÔNG CÓ dấu thăng "#" phía trước.
  • Bật tính năng đồng bộ NTP và khởi động lại service
sudo timedatectl set-ntp yes
sudo systemctl start ntpd.service

  • Kiểm tra
[root@CentOS ~]# timedatectl status 
      Local time: Wed 2020-06-17 11:09:11 +07
  Universal time: Wed 2020-06-17 04:09:11 UTC
        RTC time: Wed 2020-06-17 04:09:11
       Time zone: Asia/Ho_Chi_Minh (+07, +0700)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@CentOS ~]#

Xong!
/*header slide*/