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

Học Python Qua Ví Dụ #023 - Jinja2 Template / Jinja2 Template For Loop

Nên xem bài dưới đây trước khi xem bài này:


  • Ví dụ 1:

import jinja2

vlan_dict = {				# định nghĩa dictionary có
    "vlan_id": 100,			# giá trị 100 (vlan 100)
    "vlan_name": "Thietbi",	# tên của vlan là "Thietbi"
}

# định nghĩa chuỗi
vlan_template = """			
vlan {{ vlan_id }}
   name {{ vlan_name }}
"""
'''
thực hiện nối các giá trị của dictionary vào chuỗi, 
nối giá trị vào các key nằm giữa 2 cặp dấu {{}}
'''
template = jinja2.Template(vlan_template)
print(template.render(vlan_dict))	


Kết quả:

vlan 100

   name Thietbi

[Finished in 0.2s]



  • Ví dụ 2 (for loop):

import jinja2

my_vlans = {			# định nghĩa dictionary có nhiều cặp giá trị
    "501": "blue501",
    "502": "blue502",
    "503": "blue503",
    "504": "blue504",
    "505": "blue505",
    "506": "blue506",
    "507": "blue507",
    "508": "blue508",
}
template_vars = {"vlans": my_vlans} # định nghĩa thêm một dictionary nữa, giá trị của dictionnary này là một dictionnary

# tạo vòng lặp lấy từng cặp key và giá trị gán vào vlan_id và vlan_name
# dấu - phía sau % là dùng bỏ dòng trắng khi xuất ra template
vlan_template = """
{%- for vlan_id, vlan_name in vlans.items() %}	
vlan {{ vlan_id }}
   name {{ vlan_name }}
{%- endfor %}
"""

# thực hiện nối
template = jinja2.Template(vlan_template)
print(template.render(template_vars))

Kết quả:
vlan 501
   name blue501
vlan 502
   name blue502
vlan 503
   name blue503
vlan 504
   name blue504
vlan 505
   name blue505
vlan 506
   name blue506
vlan 507
   name blue507
vlan 508
   name blue508
[Finished in 0.2s]


Xong!

Network Automation #003 - Netmiko Backup VLAN Configuration on Cisco IOS Switch

 Nên xem các bài dưới đây trước khi xem bài này:


Sơ đồ lab:


Yêu cầu:

Dùng thư viện netmiko để SSH vào và thực hiện backup cấu vlan trên switch


Chuẩn bị:

        Sw:

enable
conf t
hostname Sw1
ip domain name netmiko.lab

username admin privilege 15 password admin1234@sw1

line vty 0 4
login local
transport input ssh
crypto key generate rsa general-keys modulus 1024
ip ssh version 2

interface vlan 1
no shutdown
ip address 192.168.0.8 255.255.255.0
exit

vlan 10-20
do wri


Thực hiện:

from netmiko import ConnectHandler 
from datetime import datetime

bk_device = { 
	"host":"192.168.0.8",
	"username":"admin",
	"password":"admin1234@sw1",
	"device_type":"cisco_ios" 
	}

tftpserver = "192.168.0.48" 

def cisco_ios_sw(txt): # định nghĩa hàm backup VLAN cho switch cisco ios
	
	cmd = "copy vlan.dat tftp:"
	filename = txt + "vlan.dat"
	
	net_connect = ConnectHandler(**bk_device)

	output = net_connect.send_command_timing(cmd)
	if "Address or name of remote host []" in  output:
		output += net_connect.send_command_timing(tftpserver)
	if "Destination filename" in output:
		output += net_connect.send_command_timing(filename)

	print(output)
	print("-" * 80)	


print(f"Dang ket noi vao IP:'{bk_device['host']}' voi Username: '{bk_device['username']}'")	

now = datetime.now().strftime("%Y-%b-%d_%H%M%S")
filename = now + "_" + bk_device["device_type"] + "_" + bk_device["host"] 

cisco_ios_sw(filename)


  • Kết quả:

C:\python>python Demo.py

Dang ket noi vao IP:'192.168.0.8' voi Username: 'admin'

Address or name of remote host []? Destination filename [vlan.dat]? !!

2076 bytes copied in 0.025 secs (83040 bytes/sec)

--------------------------------------------------------------------------------

C:\python>


Xong!

Học Python Qua Ví Dụ #022 - Module Trong PyThon

Cũng giống như Function, Module cho phép tái sử dụng code lại nhiều lần. Với Function thì các hàm phải được định nghĩa trước đó và sau đó gọi hàm ra mà dùng. Với Module nó bao gồm các lớp (class), các hàm (function), các biến,...mà chúng ta đã gom/phân thành từng module. Khi sử dụng nó chúng ta chỉ cần IMPORT nó vào mà sử dụng KHÔNG CẦN phải viết lại.

Ví dụ chúng ta có file vck_func.py với nội dung:

import re
def MAC_Win2Cisco(mac_addr): 
	'''
	chuyển định dạng MAC address của Windows sang định dạng Cisco
	Dữ liệu đầu VÀO có dạng "11:22:33:44:55:66" HOẶC "11-22-33-44-55-66"
	KẾT QUẢ:"1122.3344.5566"
		
	'''
	mac_addr = re.sub("[-:]","",mac_addr)
	new_mac = []
	while len(mac_addr) > 0:
		entry = mac_addr [:4]
		mac_addr = mac_addr [4:]
		new_mac.append(entry) 

	new_mac = ".".join(new_mac)
	return new_mac


def MAC_Cisco2Win(mac_addr): 
	'''
	Chuyển định dạng MAC address của cisco sang windows
	Dữ liệu vào:"1122.3344.5566"
	KẾT QUẢ: "11:22:33:44:55:66"
	'''
	mac_addr = re.sub("[.]","",mac_addr)
	new_mac = []
	while len(mac_addr) > 0:
		entry = mac_addr [:2]
		mac_addr = mac_addr [2:]
		new_mac.append(entry) 

	new_mac = ":".join(new_mac)
	return new_mac
	

def ipv4_chk(ip_addr):
	'''
	Kiểm tra ip nhập vào có hợp lệ không
	IP hợp lệ phải có 4 otects
	Mỗi otect phải là số trong khoảng [0-255]
	'''	
	octets = ip_addr.split(".")
	if len(octets) != 4:
		return False
	
	for x in octets:
		if not x.isdigit() or int(x) < 0 or int(x) > 255:
			return False
		return True	


Để sử dụng các hàm trên chúng ta thực hiện:

  • Import vck_func 
  • Dùng hàm dir để xem trong file vck_func có những hàm nào

import vck_func
		
print(dir(vck_func))


kết quả:

C:\python>python Demo.py

['MAC_Cisco2Win', 'MAC_Win2Cisco', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'ipv4_chk', 're']

C:\python>


phần highlight màu vàng là các hàm chúng ta đã định nghĩa trong file vck_func.py

  • Ví dụ sử dụng hàm MAC_Win2Cisco

Cách 1: gọi gián tiếp, cú pháp import <tên file thư viện cần import>

Code:

import vck_func

Mac_Cisco = vck_func.MAC_Win2Cisco("aa:cc:bb:dd:ee:ff")
	
print(Mac_Cisco)


Kết quả:

C:\python>python Demo.py

aacc.bbdd.eeff

C:\python>


Cách 2: Gọi trực tiếp, cú pháp from  <tên file thư viện cần import> import <tên hàm, hoặc class>

from vck_func import MAC_Win2Cisco

Mac_Cisco = MAC_Win2Cisco("aa:cc:bb:dd:ee:ff")
	
print(Mac_Cisco)


Tùy từng trường hợp mà chúng ta có thể dùng cách 1 hoặc cách 2

Xong!

/*header slide*/