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"
- 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$ printenvSHELL=/bin/bashLC_ADDRESS=vi_VNLC_NAME=vi_VNLC_MONETARY=vi_VNPWD=/home/khanhvc/projects/shellLOGNAME=khanhvcXDG_SESSION_TYPE=ttyMOTD_SHOWN=pamHOME=/home/khanhvcLC_PAPER=vi_VNLANG=en_US.UTF-8LS_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 22LESSCLOSE=/usr/bin/lesspipe %s %sXDG_SESSION_CLASS=userLC_IDENTIFICATION=vi_VNTERM=xtermLESSOPEN=| /usr/bin/lesspipe %sUSER=khanhvcSHLVL=1LC_TELEPHONE=vi_VNLC_MEASUREMENT=vi_VNXDG_SESSION_ID=330XDG_RUNTIME_DIR=/run/user/1000SSH_CLIENT=192.168.0.48 63977 22LC_TIME=vi_VNXDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktopPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busSSH_TTY=/dev/pts/0LC_NUMERIC=vi_VNOLDPWD=/home/khanhvc/projects_=/usr/bin/printenvkhanhvc@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
#!/bin/bashecho $BASH_VERSIONecho $BASHecho $HOMEecho $PATH
khanhvc@ubutu:~/projects/shell$ ./demo.sh5.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/binkhanhvc@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
- Ví dụ:
#!/bin/basha=6b=3expr $a + $b
- Ví dụ khác:
#!/usr/bin/basha=6b=3tong=$(expr $a + $b)echo "Ket qua cua a CONG b = " $tonghieu=$(expr $a - $b)echo "Ket qua cua a TRU b = " $hieuthuong=$(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ântich=$(expr $a \* $b)echo "Ket qua cua a NHAN b = " $tich
khanhvc@ubutu:~/projects/shell$ sh demo.shKet qua cua a CONG b = 9Ket qua cua a TRU b = 3Ket qua cua a CHIA b = 2Ket qua cua a NHAN b = 18khanhvc@ubutu:~/projects/shell$
- Ví dụ
#!/usr/bin/basha=6let a+=1echo "a = 6, a + 1 = " ${a}let b=a+1echo "b = a + 1 = " $blet c=a+becho "c = a + b = " $c
- Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sha = 6, a + 1 = 7b = a + 1 = 8c = a + b = 15khanhvc@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 + 3echo "5 + 3" | bc#in ra kết quả là giá trị của x + yx=10y=20echo "$x + $y" | bc#in ra kết quả là giá trị của x + ybc <<< "$x + $y"
- Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh83030khanhvc@ubutu:~/projects/shell$
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
- Kiểm tra thông tin IP hiện tại với lệnh: ip a
khanhvc@ubutu:~$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ffinet 192.168.0.73/22 brd 192.168.3.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::9d21:bf12:41f0:7dfb/64 scope link noprefixroutevalid_lft forever preferred_lft forever4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ffinet 192.168.0.68/22 brd 192.168.3.255 scope global dynamic noprefixroute ens38valid_lft 28788sec preferred_lft 28788secinet6 fe80::ba76:35f6:4158:5f73/64 scope link noprefixroutevalid_lft forever preferred_lft foreverkhanhvc@ubutu:~$
- Để 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 systemnetwork:ethernets:ens33:dhcp4: trueens38:addresses: [192.168.0.116/22]nameservers:addresses: [8.8.8.8]dhcp4: noversion: 2renderer: NetworkManager
- 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 a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ffinet 192.168.0.73/22 brd 192.168.3.255 scope global dynamic noprefixroute ens33valid_lft 3560sec preferred_lft 3560secinet6 fe80::20c:29ff:fe73:8dd0/64 scope linkvalid_lft forever preferred_lft forever4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ffinet 192.168.0.116/22 brd 192.168.3.255 scope global noprefixroute ens38valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe73:8dda/64 scope linkvalid_lft forever preferred_lft foreverkhanhvc@ubutu:~$
- 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
- 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 show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:d0 brd ff:ff:ff:ff:ff:ffinet 192.168.0.73/22 brd 192.168.3.255 scope global dynamic noprefixroute ens33valid_lft 24533sec preferred_lft 24533secinet6 fe80::20c:29ff:fe73:8dd0/64 scope linkvalid_lft forever preferred_lft forever4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ffinet 192.168.0.117/22 scope global ens38valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe73:8dda/64 scope linkvalid_lft forever preferred_lft foreverkhanhvc@ubutu:~$
- Hoặc cụ thể một interface
khanhvc@ubutu:~$ ip address show dev ens384: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:73:8d:da brd ff:ff:ff:ff:ff:ffinet 192.168.0.117/22 scope global ens38valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe73:8dda/64 scope linkvalid_lft forever preferred_lft foreverkhanhvc@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:~$
sudo ip link set ens38 up
- 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 showdefault via 192.168.0.7 dev ens33 proto dhcp metric 100192.168.0.0/22 dev ens33 proto kernel scope link src 192.168.0.73 metric 100khanhvc@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.88.8.8.8 via 192.168.0.7 dev ens33 src 192.168.0.73 uid 1000cachekhanhvc@ubutu:~$
- Kiểm tra bảng ARP
khanhvc@ubutu:~$ ip neigh192.168.0.16 dev ens33 lladdr 50:e5:49:a4:01:dd REACHABLE192.168.0.7 dev ens33 lladdr 00:d7:8f:0d:b8:3f REACHABLE192.168.0.48 dev ens33 lladdr 94:de:80:a6:fb:30 REACHABLEkhanhvc@ubutu:~$
- ping
- traceroute: ICMP
- tracepath: UDP
- host
- dig
- nslookup
- netstat
- ss
sudo apt-get install traceroute
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 |
Using Commands Cat, Head, Tail, Less & More In Linux/Ubuntu/CentOS
Mục Lục:
1. Lệnh Cat2. 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 |
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 |
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ố
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 |
- 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. |
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 |
- 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 |
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 |
- 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 |
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$
khanhvc@ubutu:~/projects$ ln file_name.txt hardlink.txtkhanhvc@ubutu:~/projects$ ll -itotal 122621505 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.txt2755955 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.txtkhanhvc@ubutu:~/projects$
khanhvc@ubutu:~/projects$ echo "thêm nội dung vào hardlink.txt" >> hardlink.txtkhanhvc@ubutu:~/projects$ cat file_name.txtthêm nội dung vào hardlink.txt
khanhvc@ubutu:~/projects$ cat hardlink.txtthêm nội dung vào hardlink.txtkhanhvc@ubutu:~/projects$
khanhvc@ubutu:~/projects$ rm file_name.txtkhanhvc@ubutu:~/projects$ ls -i2755955 folder_name 2621869 hardlink.txtkhanhvc@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.txtthêm nội dung vào hardlink.txtkhanhvc@ubutu:~/projects$
khanhvc@ubutu:~/projects$ ln -s file_name.txt softlink.txtkhanhvc@ubutu:~/projects$ ln -s folder_name softlink_folder.txtkhanhvc@ubutu:~/projects$
khanhvc@ubutu:~/projects$ ls -i2621869 file_name.txt 2625309 softlink_folder.txt2755955 folder_name 2621566 softlink.txtkhanhvc@ubutu:~/projects$
khanhvc@ubutu:~/projects$ ll -itotal 162621505 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.txt2755955 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.txtkhanhvc@ubutu:~/projects$
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 |
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 |
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 |
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 |
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" |
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 |
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 |
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] |
grep -E "[a-z]+" file.txt
egrep "[a-z]+" file.txt
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 |
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 |
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 |
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
- 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
- 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
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 |
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 | |
CentOS, Cài Đặt Ngày Giờ Trên CentOS
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
[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ờ:
[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!