/*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===*/

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!

Juniper - Backup and Restore Configuration on EX Switches

 NỘI DUNG:

1. Backup Kết Hợp Show Và Log Session Của SecureCRT

2. Restore - Load File

3. Restore - Load Terminal


THỰC HIỆN:

1. Backup Kết Hợp Show Và Log Session Của SecureCRT

- Kết nối đến thiết bị cần backup bằng SecureCRT

- Trên SecureCRT vào File -> LogSession -> Save để lưu các nội dung show vào file này.


- show | no-more

HOẶC

- show | no-more | display set


Sau khi thực hiện lệnh show này toàn bộ nội dung cấu hình sẽ lưu trong file 2021-04-28-Juniper.log


2. Restore - Load File

Commands Diễn Giải
configure Vào mode config
load merge /var/home/admin/2021-04-27_IP127.246.cfg Load file 2021-04-27_IP127.246.cfg nối vào cấu hình hiện tại

3. Restore - Load Terminal

Commands Diễn Giải
configure Vào mode config
load merge terminal sau khi gõ dòng này xong chúng ta dán nội dung cần cấu hình vào
[Type ^D at a new line to end input] sau khi DÁN NỘI DUNG xong nhấn enter để xuống hàng sau đó nhấn Ctrl + D để thực hiện nối nội dung vào cấu hình

xong!

Network Automation #006 - Netmiko How To Find Which Switch Port A Device Is Plugged Into Base on IP Address

Nên đọc bài  LAB #001 trước khi xem bài này

Sơ đồ Lab:


Yêu cầu:  Dùng Netmiko để SSH vào switch sau đó tìm thiết bị có IP 192.168.0.101 đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó:
1. Thực hiện trên Cisco - IOS
2. Thực hiện trên Juniper - JunOS

Thực hiện:
1. Thực hiện trên Cisco - IOS

  • Chuẩn bị (cấu hình trên Cisco switch ):

  • Code:
'''
Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó (Điều kiện là thiết bị cisco cần kết nối đã được cấu hình SSH) Câu lệnh chính dùng trong bài: - show arp <ip cần tìm> - show mac address-table address <địa chỉ mac cần tìm> ''' import netmiko # import thư viện netmiko # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"cisco_ios" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) ip_addr = "192.168.0.101" # địa chỉ ip cần tìm net_connect.send_command("ping" + " " + ip_addr) # ping địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm thứ 4 (là địa chỉ MAC) tính từ trái sang, sau đó sẽ thực hiện lệnh show mac với MAC này mac_addr = fields[3] # print (mac_addr) show_mac_addr = "show mac address-table address" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show print ("*" * 20 + "KET QUA" + "*" * 20) print(show_mac_addr)

  • Kết quả:

Connecting to a host: 192.168.0.1...

********************KET QUA********************
Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0050.7966.6807    DYNAMIC     Et0/0
Total Mac Addresses for this criterion: 1
[Finished in 8.8s]

Kết quả cho chúng ta thấy IP 192.168.0.101 được kết nối vào port Et0/0 của switch 192.168.0.1

2. Thực hiện trên Juniper - JunOS
  • Chuẩn bị (cấu hình trên Juniper switch ):
Tham khảo cấu hình Juniper tại link 

Noted: Lab Juniper mình làm trên thiết bị thật, nên port sẽ không giống như hình ở trên
  • Code:
''' Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó (Điều kiện là thiết bị Juniper cần kết nối đã được cấu hình SSH) Câu lệnh chính dùng trong bài: - show arp hostname <ip cần tìm> - show ethernet-switching table <địa chỉ mac cần tìm> ''' import netmiko # import thư viện netmiko # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"juniper_junos" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) ip_addr = "192.168.0.101" # địa chỉ ip cần tìm net_connect.send_command("ping" + " " + ip_addr + " " + "count 4") # ping (ping 4 gói) địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + "hostname" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # print (show_arp) # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm đầu tiên (là địa chỉ MAC) tính từ trái sang mac_addr = fields[0] # print (mac_addr) show_mac_addr = "show ethernet-switching table" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show print ("*" * 20 + "KET QUA" + "*" * 20) print(show_mac_addr)

  • Kết quả:

Connecting to a host: 192.168.0.1...

********************KET QUA********************
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)

Ethernet switching table : 87 entries, 87 learned
Routing instance : default-switch
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    vlan-11                  d4:f5:ef:09:c0:1e   D             -   ge-1/0/0.0             0         0       

[Finished in 13.1s]

Thiết bị có IP 192.168.0.101 được nối vào port ge-1/0/0 của switch 192.168.0.1
 

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!

Juniper - Save And Transfer File Configuration With TFTP

Nên tham khảo bài TFTP trước khi xem bài này


NỘI DUNG:

1. Lưu Cấu Hình Hiện Tại Thành File Lên Switch

2. Copy File Config Từ Switch Đến TFTP

3. Copy File Từ TFTP Vào Switch

4. Backup Cấu Hình Tự Động


THỰC HIỆN:


1. Lưu Cấu Hình Hiện Tại Thành File Lên Switch

Commands Diễn Giải
configure Vào mode config
save 2021-04-27_IP127.246.cfg Thực hiện lưu cấu hình hiện tại vào file có tên 2021-04-27_IP127.246.cfg
exit Thoát khỏi mode config
file list Liệt kê/xem các file cấu hình mà mình tự lưu đã lưu trong thiết bị


2. Copy File Config Từ Switch Đến TFTP

Commands Diễn Giải
start shell Khởi động shell trên Junos
cd /var/home/admin Chuyển dấu nhắc lệnh vào đường dẫn /var/home/admin
ls Liệt kê (nhằm mục đích chọn file để copy) các file có trong đường dẫn /var/home/admin
tftp Khởi động tftp client trên switch
connect 125.234.103.242 Kết nối đến TFTP server có địa chỉ IP là 125.234.103.242
put 2021-04-27_IP127.246.cfg Đẩy file 2021-04-27_IP127.246.cfg (là file vừa tạo ra ở phần 1) lên TFTP server
^D% Nhấn phím Ctrl + D để disconnect khỏi TFTP server
exit Thoát chế độ shell trên switch


Chúng ta cũng có thể copy các file cấu hình hiện tại trên switch lên TFTP

Commands/File List Diễn Giải
file list /config/ Hiển thị các file config của switch
juniper.conf.gz Là file cấu hình đang active trên switch
juniper.conf.1.gz Nếu chúng ta rollback thì nội dung của file juniper.conf.gz sẽ được thay bằng nội dung của file juniper.conf.1.gz


3. Copy File Từ TFTP Vào Switch

Commands Diễn Giải
start shell Khởi động shell trên Junos
tftp 125.234.103.242 Kết nối vào tftp có địa chỉ ip tftp 125.234.103.242
get 2021-04-27_IP127.246.cfg.txt Copy file 2021-04-27_IP127.246.cfg.txt từ TFTP về switch
quit Disconnect khỏi TFTP server
exit Thoát chế độ shell trên switch



4. Backup Cấu Hình Tự Động

Juniper cho phép sao lưu cấu hình tự động thông qua FTP, HTTP, SCP sau mỗi lần chúng ta lưu cấu hình (commit). Tên file tạo ra theo định dạng là hostname+time

    system {

              archival {

                  configuration {

                          transfer-on-commit;

                          archive-sites {

                                  "ftp://username@<IP address of FTP server>" password <password>;

                                  }

                          }

               }

     }


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!

Juniper - Clearing IDLE TTY Sessions in Junos



Khi có nhiều kết nối đồng thời đến thiết bị bạn có thể ngắt kết nối của user mà bạn muốn.

Hiển thị các session hiện tại đang kết nối trên switch bằng lệnh:
run show system users no-resolve




chúng ta có thể clear TTY sesion, ví dụ clear TTY có tên là u0 thi thực hiện bằng lệnh:

run request system logout terminal u0


Kiểm tra lại thì không session u0 đã được ngắt kết nối.


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!
/*header slide*/