Thứ Tư, 9 tháng 11, 2022

Hướng dẫn kết nối và truy cập vào thiết bị Juniper chạy Junos OS

 

Hướng dẫn kết nối và truy cập vào thiết bị Juniper chạy Junos OS

Bài viết này cung cấp các hướng dẫn cho các bước đơn giản mà bạn thực hiện sau khi cài đặt hệ điều hành Junos trên thiết bị. Nó cho bạn thấy cách khởi động CLI, xem hệ thống phân cấp lệnh và thực hiện các thay đổi cấu hình cơ bản của Switch Juniper.

Truy cập vào giao diện dòng lệnh JUNOS CLI:

  • Kết nối cable console với Switch Juniper
  • Sử dụng phần mềm terminal như Putty, SecureCRT, Teraterm với các thông số sau để truy cập
Setting Value
Speed Baud 9600
Data Bits 8 Bit
Parity None
Stop Bits 1
Flow Control No Hardware Flow Control
Com Port Cổng COM nhận trên máy tính
  • Bật nguồn Switch và chờ đến khi đèn POWER sáng màu xanh lá, khi đó trên phần mềm terminal sẽ hiển thị màn hình đăng nhập. Với cấu hình mặc định, đăng nhập với username và password default của switch Juniper là root và password để trống. Kể từ phiên bản Junos OS Release 7.6 trở đi, sau khi đăng nhập bạn cần thiết lập mật khẩu cho tài khoản root hoặc tạo các tài khoản khác để quản lý switch. Tài khoản root mặc định không cho phép truy cập switch thông qua telnet hoặc SSH. Để truy cập qua SSH chúng ta cần phải cấu hình cho phép dịch vụ SSH trên tài khoản root
    routername (ttyd0)
    

    login: root
    Password:
    JUNOS 8.0R1 2006-07-01 01:59:49 UTC
    root@%
  • Tại dấu nhắc %, gõ cli và nhấn Enter để truy cập vào mode CLI operational. Tại đây chúng ta có thể kiểm tra cấu hình, ping, cài đặt thời gian... Sử dụng lệnh ? để xem các câu lệnh trong mode này.
    root@> ? 
    Possible completions:
    clear         Clear information in the system 
    configure     Manipulate software configuration information 
    diagnose      Invoke diagnose script 
    file          Perform file operations 
    help          Provide help information 
    monitor       Show real-time debugging information 
    mtrace        Trace multicast path from source to receiver 
    ping          Ping remote target 
    quit          Exit the management session 
    request       Make system-level requests 
    restart       Restart software process
    set           Set CLI properties, date/time, craft interface message 
    show          Show system information 
    ssh           Start secure shell on another host 
    start         Start shell 
    telnet        Telnet to another host 
    test          Perform diagnostic debugging 
    traceroute    Trace route to remote host
  • Để cấu hình và quản lý switch, chúng ta cần truy cập vào mode configuration (ký hiệu bằng dâu #). Sử dụng lệnh configure hoặc edit để vào mode configuration

    root@> configure
    Entering configuration mode 
    [edit]
    root#

  • Khi gõ xong các câu lệnh trên switch Juniper, các câu lệnh này chưa được thực thi ngay. Để lưu cấu hình và thực thi các câu lênh, sử dụng lệnh commit trong mode configuration
    root# commit
  • Để thoát khỏi mode configuration, thực hiện 1 trong 2 cách sau:
    • Lưu cấu hình và thoát:
      [edit]
      root# commit and-quit
      commit complete
      Exiting configuration mode
      root@>
    • Không lưu cấu hình và thoát
      [edit]
      root# exit
      Exiting configuration mode
      root@>

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

Category Action Keyboard Sequence
Di chuyển con trỏ chuột Di chuyển con trỏ chuột về trước 1 ký tự Ctrl+b
Di chuyển con trỏ chuột về trước 1 từ Esc+b hoặc Alt+b
Di chuyển con trỏ chuột tiến lên 1 ký tự Ctrl+f
Di chuyển con trỏ chuột tiến lên 1 từ Esc+f hoặc Alt+f
Di chuyển con trỏ chuột về đầu dòng lệnh Ctrl+a
Di chuyển con trỏ chuột về cuối dòng lệnh Ctrl+e
Xóa ký tự Xóa 1 ký tự trước con trỏ chuột Ctrl+h, Delete, hoặc Backspace
Xóa 1 ký tự tại vị trí con trỏ chuột Ctrl+d
Xóa tất cả ký tự từ vị trí con trỏ chuột đến cuối dòng lệnh Ctrl+k
Xóa toàn bộ dòng lệnh Ctrl+u hoặc Ctrl+x
Xóa 1 từ trước con trỏ chuột Ctrl+w, Esc+Backspace, hoặc Alt+Backspace
Xóa 1 từ sau con trỏ chuột Esc+d hoặc Alt+d
Chèn văn bản đã xóa gần đây Chèn văn bản đã xóa gần đây nhất tại vị trí con trỏ chuột Ctrl+y
Hiển thị dòng lệnh trước Cuộn xuống danh sách lệnh được thực thi gần đây Ctrl+p
Cuộn lên danh sách lệnh được thực thi gần đây Ctrl+n
Tìm kiếm trong lịch sử các lệnh đã được thực thi Ctrl+r

Thứ Hai, 7 tháng 11, 2022

[FortiOS 5.6] Hướng dẫn cấu hình HA trên Firewall Fortigate

 https://cnttshop.vn/blogs/fortinet/ha-config-on-fortigate

Trong bài viết này, CNTTShop sẽ hướng dẫn các bạn cấu hình tính năng High availability trên Firewall Fortigate

Mô hình kết nối

mô hình kết nối HA trên fortinet

Mô hình kết nối HA sử dụng firewall Fortigate

Lưu ý: Hướng dẫn này áp dụng với các thiết bị đang chạy phiên bản FortiOS 5.6. Với các phiên bản OS thấp hoặc cao hơn, các bước thực hiện có 1 vài thay đổi.


Trước khi bắt đầu, bạn phải kiểm tra chắc chắn phiên bản FortiOS trên cả 2 con Fortigate phải giống nhau và 2 cổng kết nối HA phải được cấu hình không nhận IP từ DHCP hoặc PPPoE.Theo mô hình trên, một FortiGate Backup (Slave hay Backup) được cài đặt và kết nối với một FortiGate đã được cài đặt trước đó (Master hay Primary) để tạo thành một cụm High Availability (HA) giúp cải thiện độ tin cậy của mạng và tăng tính sẵn có của mạng.

Bài viết này hướng dẫn cấu hình HA trên Fortigate sử dụng giao thức FortiGate Clustering Protocol (FGCP). Giao thức này có 3 mode để cấu hình là Standalone, Active-active, Active-passive. Ở đây chúng ta sử dụng kiểu HA là Active-passive, khi đó 1 thiết bị hoạt động sẽ đóng vai trò là Master, 1 thiết bị dự phòng. Lưu lượng mạng trong LAN sẽ đi qua Switch => External-Primary và đi ra ngoài internet. Trong trường hợp Master bị lỗi thì Slave sẽ hoạt động cho đến khi Master được xử lý xong. Lúc này lưu lượng mạng sẽ đi qua con External-Backup và ra internet.

Kiểm tra thiết bị

Trước khi cấu hình, bạn phải chắc chắn 2 thiết bị cùng model, chạy cùng 1 phiên bản FortiOS và actice license ( nếu có) trước khi thêm vào HA Cluster. Các license cần active trước bao gồm FortiCare Support, IPS, AntiVirus,Web Filtering, Mobile Malware, FortiClient, FortiCloud, và virtual domains (VDOMs). Các thiết bị Fortigate trong HA Cluster phải cùng level cho các license FortiGuard, FortiCloud, FortiClient, và VDOMs. Riêng license FortiToken có thể active sau vì license FortiToken đồng bộ xuống tất cả các Cluster Members.

Đối với các thiết bị có ổ cứng thì số lượng ổ cứng và dung lượng cũng phải giống nhau.

Bạn cũng có thể cài đặt bất kỳ license của bên thứ ba nào trên FortiGate chính trước khi tạo cụm. Khi cụm được hình thành, chứng chỉ của bên thứ ba được đồng bộ hóa với các FortiGate trong Cluster.

Cấu hình 1 Fortigate là Master ( trên sơ đồ là External-Primary)

[Tùy chọn] Trên Fortigate Master, vào System > Settings và thay đổi hostname là External-Primary (bước này có thể bỏ qua)

change hostname firewall fortinet

Vào System > HA, chọn

  • Mode  Active-Passive.
  • Device priority: Cài đặt chỉ số Device priority cao hơn giá trị mặc định (trong ví dụ là 250), thiết bị nào có chỉ số Device priority cao nhất sẽ là Master (Primary), các thiết bị có chỉ số Device priority cao thứ 2 sẽ là Master trong trường hợp Master bị lỗi.
  • Group name: Tên Cluster Group
  • Password: Password xác thực để các Cluster member joint vào group. Các giá trị Group name và Password phải giống nhau trên các thiết bị.
  • Heartbeat interfaces: chọn cổng cấu hình làm cổng HA (trong sơ đồ là port 3 và port 4). Hai port này sẽ gửi các bản tin trao đổi để xác định xem các thiết bị có hoạt động bình thường hay không và đồng bộ cấu hình giữa các member
  • Heartbeat Interface Priority: thiết lập chỉ số này trên cả 2 cổng là 50. Giá trị này không quan trọng, các bạn có thể ưu tiên cổng nào sẽ được chọn để gửi gói tin Heartbeat.
  • Management Interface Reservation: tùy chọn này cho phép chúng ta chọn 1 cổng để sử dụng IP trên cổng đó làm IP quản trị. Nếu tắt tính năng này, khi cấu hình xong thì chúng ta chỉ truy cập được IP của Primary. Còn nếu bật và chọn cổng MGMT, thì các bạn có thể truy cập cả 2 IP trên cổng MGMT của 2 thiết bị.

cấu hình các thông số HA

Sau khi nhập xong tất cả thông tin, nhấn OK để hoàn tất. Khi chưa kết nối với Slave, External-Primary vẫn tạo thành 1 Group và hoạt động bình thường như 1 con Master trong Cluster

cấu hình HA trên fortigate

Nếu có các cụm HA FortiOS khác trong mạng của bạn, bạn có thể cần thay đổi ID nhóm cụm bằng lệnh CLI này:

External-Primary#config system ha
External-Primary#set group-id 25
External-Primary#end

Cấu hình trên Slave (trên sơ đồ là External-Backup)

Kết nối backup FortiGate vào hệ thống mạng, kết nối với primary bằng 2 interface được thiết lập trong phần Heartbeat interfaces. Việc kết nối 2 port này vào Fortigate có thể dẫn tới gián đoạn hệ thống mạng do bị loop, vì vậy nên kết nối 2 port này khi có ít lưu lượng truy câp mạng hoặc sau khi cấu hình HA xong mới connect vào hệ thống

connect HA fortigate

Các switch phải được sử dụng giữa cluster và Internet, giữa cluster và các mạng nội bộ, như thể hiện trong sơ đồ mạng. Bạn có thể sử dụng bất kỳ switch nào để thực hiện các kết nối này.

[Tùy chọn] Trên Fortigate Slave, vào System > Settings và thay đổi hostname là External-Backup (bước này có thể bỏ qua)

Configuring the backup FortiGate for HA

Vào System > HA, cấu hình các thông số giống với trên con External-Primary (trừ thông số Device priority, trong ví dụ này là 50). Thông số Device priority trên con Slave phải được đặt thấp hơn trên con Master để chắc chắn thiết bị này sẽ luôn là thiết bị Backup

Configuring the backup FortiGate for HA 1

Nếu có các cụm HA FortiOS khác trong mạng của bạn, bạn có thể cần thay đổi ID Group bằng lệnh CLI, Group ID này phải giống với trên External-Primary:

External-Backup#config system ha
External-Backup#set group-id 25
External-Backup#end

Sau khi lưu cấu hình và heartbeat interfaces được kết nối, FortiGates sẽ tìm kiếm và tạo thành các cụm Cluster. Hệ thống mạng lúc này có thể bị gián đoạn trong vài giây do các thiết bị trong Cluster đàm phán và bầu chọn master. Sau khi lưu cấu hình trên Slave xong, quay trở lại con Master và reload lại trình duyệt web, lúc này sẽ thấy External-Primary đang là Master và chạy bình thường, còn External-Backup là Slave và ở chế độ unactive.

config HA fortinet

Kiểm tra topo mạng, truy cập vào Dashboard > Physical Topology

mô hình mạng dùng HA

Như vậy là bạn đã hoàn thành cấu hình HA mode Acrive-Passive trên 2 thiết bị Fortinet, lúc này traffic trong mạng sẽ đi qua External-Primary, khi External-Primary bị lỗi thì External-Backup sẽ được active và lúc này traffic sẽ đi qua External-Backup.

Bật tính năng Override

Mặc định thì option đòi lại quyền, mà trong các giao thức như VRRP chúng ta hay gọi là preemt, sẽ không được bật. Nghĩa là khi thiết bị External-Primary đã được xử lý xong thì thiết bị này cũng không được khôi phục lại role Primary như ban đầu, mà External-Backup vẫn sẽ tiếp tục nhận role Primary và xử lý dữ liệu.

Các bạn không nên bật tính năng này, do nếu bật thì khi External-Primary hoạt động lại bình thường thì 2 firewall sẽ xảy ra chuyển đổi dự phòng lần nữa, và có thể 1 số phiên sẽ bị gián đoạn trong quá trình này. Còn nếu bạn nào muốn cố định 1 firewall luôn làm primary trong trạng thái mạng bình thường thì các bạn có thể bật trong CLI nhé, cấu hình này không có trong giao diện web.

External-Primary # conf system ha
External-Primary (ha) # set override enable

Sau khi bật tính năng này lên thì khi External-Primary hoạt động trở lại nó sẽ chiếm lại role Primary, nghĩa là khi không có lỗi gì trong mạng thì firewall nào có priority cao hơn sẽ luôn là Primary.

FORTIGATE: HƯỚNG DẪN CẤU HÌNH IPSEC VPN CLIENT TO SITE TRÊN FORTIGATE

 

FORTIGATE: HƯỚNG DẪN CẤU HÌNH IPSEC VPN CLIENT TO SITE TRÊN FORTIGATE

Overview

Bài viết hướng dẫn cấu hình tính năng IPSec VPN Client to site trên thiết bị Fortigate để các thiết bị có thể truy cập và hệ thống mạng nội bộ từ xa một cách an toàn

Hướng dẫn cấu hình

  • Đăng nhập vào thiết bị Fortigate bằng tài khoản Admin
  • User & Device -> User Definition -> Nhấn Create New để tạo 1 tài khoản cho VPN user
  • Chọn Local User -> Nhấn Next để tiếp tục
  • Đặt tên và password cho VPN User -> Nhấn Next để tiếp tục
  • Nhập mail cho VPN User
  • Chọn Enabled -> Nhấn Next để tiếp tục
  • User & Device -> User Groups để tạo User group VPN cho VPN User và add user mà bạn muốn dùng để kết nối VPN -> Nhấn OK để lưu lại
  • Policy & Objects -> Addresses để tạo dãy địa chỉ cho mạng VPN trong nội bộ
  • Tạo tunnel VPN Client to site
  • VPN -> IPSec Wizard -> Chọn Remote Access -> Đặt tên -> Nhấn Next để tiếp tục
  • Ở phần Incoming Interface: Chọn Port WAN của thiết bị
  • Ở phần Authentication Method: Chọn Pre-shared Key
  • Ở phần Pre-shared Key: Nhập key mà muốn dùng để xác thực
  • Ở phần User Group: Chọn group VPN của user mà bạn muốn

-> Nhấn Next để tiếp tục

  • Ở phần Local Interface: Chọn Port LAN
  • Ở phần Local Address: Chọn lớp mạng cho IPSec LAN đã tạo trước đó
  • Ở phần Client Address Range: Nhập IP cấp phát cho VPN client

-> Nhấn Next để tiếp tục

  • Nhấn Create để hoàn thành
  • Xem lại thông tin đã tạo
  • Tạo policy cho phép VPN User truy cập Internet
  • Ở phần Incoming Interface: Chọn policy VPN đã tạo trước đó
  • Ở phần Outgoing Interface: Chọn Port WAN
  • Ở phần Source: Chọn All
  • Ở phần Destination: Chọn All
  • Ở phần Service: Chọn All

-> Nhấn OK

  • Download và cài đặt FortiClient VPN từ trang chủ của Fortinet
  • Nhập đầy đủ thông tin -> Nhấn Save
  • Nhập Password của User VPN -> Nhấn Connect
  • Hoàn thành kết nối VPN

Chủ Nhật, 6 tháng 11, 2022

Cách tăng tốc độ Internet bằng CMD không phải ai cũng biết

 

Cách tăng tốc độ mạng internet bằng CMD

2.1. Kiểm tra tốc độ internet bằng cách sử dụng lệnh ping

Thay vì bạn phải vào một website hay một ứng dụng thứ 3 phải cài đặt thì bạn có thể kiểm tra tốc độ kết nối internet của mình bằng cách sử dụng lệnh ping để gửi các gói tin đến cổng mặc định trên CMD

Trước hết để biết cổng mặc định của bạn, bạn có thể dùng lệnh ipconfig /all. Khi đó bạn sẽ lấy được địa chỉ IP của cổng mặc định và hay ping liên tục vào cổng đó bằng lệnh ping -t . Sau khi thực hiện lệnh bạn sẽ thấy được thời gian các gói tin được gửi đi và phản hổi ngược lại.

Nếu như thấy Time càng thấp thì điều đó có thể cho thấy mạng của nhà bạn đang nhanh và ngược lại. Tuy nhiên, việc chạy lệnh ping này sẽ khiến tiêu tốn tài nguyên cổng mặc định và băng thông mạng (mặc dù các gói dữ liệu này có kích thước cực kỳ nhỏ và bạn có thể không quan sát hay cảm nhận thấy sự thay đổi nào về tốc độ mạng nhưng sau bên trong đó thì lại có tiêu hao băng thông đấy nhé)  

 

 

Kiểm tra tốc độ internet bằng lệnh ping

 

2.2. Làm mới và đổi IP khác

Trong trường hợp bạn sử dụng wiffi bạn có thể làm mới hoặc đổi mới IP khác sẽ có thể làm tăng tốc độ internet tạm thời tùy thuộc vào cường độ mạnh yếu của tín hiệu wifi. Tuy nhiên , trường hợp mạng LAN thì cách này sẽ không thể dùng được.

Bạn dùng lệnh:

ipconfig /release // lệnh này dùng để xóa IP hiện tại của máy

ipconfig /renew // lệnh này xin cấp IP mới từ Router

 

 

Làm mới và đổi IP khác

 

2.3. Sử dụng lệnh Flushdns

Trong quá trình sử dụng internet máy tính của bạn sẽ tự động lưu trữ các dữ liệu của các trăng web mà bạn đã truy cập tới trong bộ nhớ cache . Có thể những dữ liệu bạn sẽ không sử dụng chúng sau đó vài tháng hoặc có thể sẽ lâu hơn. Vì thế, khi bạn xóa bộ nhớ cache đồng nghĩa với việc bạn đang xóa các dữ liệu cũ đã lỗi thời và giải phóng bộ nhớ cache giúp cho việc load dữ liệu web sẽ nhanh hơn.

Bạn dùng lệnh: ipconfig /flushdns

 

Sử dụng lệnh Flushdns

 

Khi bắt đầu dùng lệnh này, ban đầu tốc độ kết nối sẽ có thể chẩm hơn bình thường vì máy tính của bạn đang phải gửi yêu cầu làm mới mọi thứ nhưng đừng lo lắng khi hoàn thành xong bạn sẽ sớm thấy các trang web của mình load nhanh hơn.

 

 

2.4. Sử dụng lệnh “Netsh int tcp” để tăng tốc độ internet

Bạn hãy nhập lệnh này vào cmd: netsh interface tcp show global.

 

 

Sử dụng lệnh “Netsh int tcp” để tăng tốc độ internet

 

Nếu bạn không thấy dòng Receive Window Autotuning ở trạng thái “Normal” như được hiển thị ở trên, hãy chạy lệnh sau:

netsh int tcp set global autotuninglevel = normal

Lệnh này sẽ đặt TCP của bạn thành Normal từ trạng thái disabled hoặc restricted. TCP là một trong những yếu tố quan trọng ảnh hưởng đến tốc độ tải xuống. Do đó, việc đặt TCP thành ‘Normal’ chắc chắn sẽ giúp bạn tăng tốc độ internet của mình.

Sau lệnh này, hãy kiểm tra một tham số khác của Windows liên quan đến kết nối internet chậm được gọi là ‘Windows scaling heuristics’. Để kiểm tra thông số này, hãy nhập:

netsh interface tcp show heuristics

Trong trường hợp trên, tính năng này đã bị vô hiệu hóa. Tuy nhiên, trong một số trường hợp, bạn có thể bật nó lên. Microsoft đang cố gắng hạn chế kết nối internet của bạn vì một số lý do nào đó. Vì vậy, để truy cập internet nhanh hơn bạn chỉ cần nhập lệnh dưới đây:

 

Tăng tốc độ mạng internet bằng CMD

 

netsh interface tcp set heuristics disabled

Sau khi nhấn enter, bạn sẽ nhận được thông báo “ok” và bây giờ tốc độ internet của bạn chắc chắn đã nhanh hơn.

Khi bạn đã hoàn tất các bước trên, bạn có thể thực hiện lại bước một để đo thời gian phản hồi và kiểm tra xem tốc độ internet của bạn đã tăng lên hay chưa.

 

3. Tổng kết

Trên đây là tổng hợp các cách tăng tốc độ internet bằng CMD mà Mega thông tin đến cho bạn. Hi vọng qua bài viết này, Mega đã mang đến cho bạn nhiều thông tin bổ ích cũng như có thể giúp bạn cải thiện tình trạng internet của mình. Cảm ơn đã đọc bài viết của chúng tôi.

Hướng dẫn sử dụng lệnh BAT Command Line cho Windows

 

Hướng dẫn sử dụng lệnh BAT Command Line cho Windows

CMD là phần mềm giao diện lệnh sử dụng cho hệ điều hành Window, một tiện ích của Microsoft, mọi hệ điều hành đằng sau giao diện người dùng là sử lý bởi command line. Bài này mình sẽ trình bầy sơ qua các kiến thức cơ bản về lập trình và cách sử dụng tập lệnh trong cmd. Căn cứ vào đó bạn có cái nhìn tổng quan.

Chú giải – comment

::chu giai

REM chu giai

Dừng màn hình – pause screen
Một số trương trình BAT thoát cửa sổ sau khi thực thi hoàn tất, bạn có thể cho dừng màn hình để theo dõi hoặc sử dụng thêm, bằng cách chèn thêm lệnh:

pause		//có dòng "Press any key to continue . . ."
pause >nul	//ko có dòng "Press any key to continue . . ."

– Thoát cmd exit

In chuỗi

//in chuỗi
@echo hello world!

Mặc định các lệnh command line bạn viết trong file .bat sẽ hiện thị ra console, nhưng nếu muốn không cho show từng lệnh ra và chỉ hiển thị kết quả thì thêm dòng này vào đầu file.

//tắt echo
@echo off

Ngày tháng
In ngày hiện tại.

//in ngày

@echo |DATE

Kết quả, ví dụ:

The current date is: 11/11/2014 

In thời gian hiện tại.

//print time
@echo |TIME

Result:

The current time is: 10:34:57,27

Mở file/FILE
Sử dụng lệnh start nếu bạn muốn mở file có trong máy tính thông qua cmd. VD:

//mở 1 file
start 1.txt
start c:/1.txt

Hoặc mở địa chỉ trang web trên trình duyệt

//mở 1 trang web
start http://www.hoangweb.com

Tạo biến

Khai báo biến.

//khai báo biến

set FLEX_SDK=D:\FLASH\setups\flex_sdk_4.6_2

để sử dụng biến, bạn đặt tên biến bởi cặp ký tự % như thế này: %FLEX_SDK% và in giá trị biến ra console.

@echo %FLEX_SDK%

Cách biến đặc biệt
– Thư mục C:/Users/Admin
%USERPROFILE%

– Trả về tên account user hiện tại.
%USERNAME%

Mảng
– Gọi lệnh cmd khác, lấy kết quả là nảng đưa vào biến. Chú ý: sử dụng ngoặc đơn: ‘ không dùng ngoặc kép ” sẽ sai. VD:

set files=('dir /b c\*.class')

Liệt kê mảng sử dụng vòng lặp for do.

@echo off
for /f %%f in ('dir /b *.jpg') do (
	echo %%f
)

Ví dụ trên liệt kê tất cả các file .jpg ở thư mục chứa script này, nếu có.
for do bat script
Bạn có thể gán mảng vào biến, như ví dụ ở trên chúng ta thay thế với biến files.

for /f %%f in %files% do (
	echo %%f
)

Lưu ý: Để ý tạo biến mới trong lệnh for không dùng ‘set’ thay vào đó bạn viết 2 ký tự %% đằng trước tên biến và cách truy cập biến cũng giống như vậy. Không được dùng cách lấy biến thông thường: %f%

Tạo mảng mới.

set  arrayline[0]=############
set  arrayline[1]=#..........#
set  arrayline[2]=#..........#
set  arrayline[3]=#..........#
set  arrayline[4]=#..........#
set  arrayline[5]=#..........#
set  arrayline[6]=#..........#
set  arrayline[7]=#..........#
set  arrayline[8]=#..........#
set  arrayline[9]=#..........#
set arrayline[10]=#..........#
set arrayline[11]=#..........#
set arrayline[12]=############

Duyệt các phần tử có trong mảng với lệnh for-do.

for %%x in %arrayline% do (
	
	//gía trị pần tử
	%%x
	//sai
	%x%
)

Ví dụ:

@echo off
setlocal enabledelayedexpansion

set  arrayline[0]=############
set  arrayline[1]=#..........#
set arrayline[10]=#..........#
set arrayline[11]=#..........#
set arrayline[12]=############

::read it using a FOR /L statement
for %%x in %arrayline% do (
	
	//gía trị pần tử
	%%x
	//sai
	%x%
)
pause

Khai báo thư viện – thiết lập biến môi trường bằng lệnh

Xem hướng dẫn thêm thư viện command line vào môi trường CMD của windows thông qua Control Panel, ngoài ra bạn còn có thể khai báo thêm đường dẫn tới file chạy executable sử dụng trong công cụ command line CMD bằng cách cài đặt lệnh setx.
Ví dụ dưới đây mình khai báo đường dẫn java sdk vào biến môi trường JAVA_HOME.

//Simple example how to set JAVA_HOME with setx.exe in command line
setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Nếu các thư viện bạn muốn chía sẻ cho mọi tài khoản người dùng trong windows, với tham số “-m”.

//If you what so set variable for all users you have to use option "-m" here is example:
setx -m JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

Gửi email

Sử dụng lệnh start bạn có thể mở trang gửi email của google hoặc mở ngay ứng dụng Microsoft Outlook để gửi mail với nội dung bạn viết sẵn.

start mailto:quachhoang_205@yahoo.com

Bạn cũng có thể điền email người gửi, chủ đề và nội dung gửi đi bởi tham số truyền vào cú pháp ‘mailto’, ví dụ:

@echo off
:Mail
FOR /F "TOKENS=2*" %%A IN ('DATE/T') DO SET DATE=%%A
FOR /F %%A IN ('TIME/T') DO SET TIME=%%A
START mailto:laptrinhweb123@gmail.com?subject=Thiet%%20ke%%20web%%20Hoangweb.com^&body=At%%20%DATE%,%%20%TIME%,%%20user%%20%USERNAME%%%20encountered%%20the%%20following%%20drive%%20mapping%%20error(s)%%20on%%20%COMPUTERNAME%:%%0D%%0A%BODY%
GOTO :EOF

Kết quả máy tính của mình đã mở Outlook express sau đó với nội dung chỉ định sẵn, người dùng chỉ việc nhấn nút send để gửi đến email người nhận:
mailto-example

Sử lý chuỗi

Tìm và thay thế chuỗi. Ví dụ sau thay thế chuỗi ‘chair’ thành từ ‘table’ lưu bởi biến word.

@echo off
setlocal ENABLEDELAYEDEXPANSION
set word=table
set str="jump over the chair"
set str=%str:chair= !word!%
echo %str%

Cách khác:

set word=table
set str="jump over the chair"
call set str=%%str:chair=%word%%%
echo %str%

Bạn có thể sử dụng biến tìm chuỗi chứa mọi ký tự bao gồm dấu cách, thay nội dung chuỗi bằng tên biến vd: %var1%.

@echo off
set find=chair 123
set word=table
set str="jump over the chair 123"
call set str=%%str:%find%=%word%%%
echo %str%

Câu lệnh

– Phát biểu điều kiện.

//điều kiện

if not true <command>

– Nhảy đến nhãn và chạy tiếp lệnh

//nhảy đến nhãn
goto nhan1
:nhan1
echo heelo !
Xuất nội dung ra file
@echo |DATE >hoang.txt

Thay vì in chuỗi ra console, kết quả của lệnh sẽ ghi vào file bạn chỉ định, ví dụ trên lưu thông tin ngày tháng vào file hoang.txt trong thư mục hiện tại cmd đang làm việc.

Ví dụ khác, mình xuất nội dung của bảng wp_users trong csdl mysql sử dụng XAMPP.
Trước tiên đảm bảo dịch vụ mysql đã bật bằng cách mở XAMPP Control Panel và nhấn vào start tại dòng module MySQL.

//ie: lấy nội dung table mysql vào file
c:/xampp/mysql/bin/mysql.exe -u root -Nrs -e"use test;SELECT * from wp_users;" >out.txt
Prompt

Hiển thị nhấu nhắc kèm thông báo nhập dữ liệu.

set /p var1="Insert your name?"
@echo %var1%

Lấy nội dung nhập từ người dùng và lưu vào biến ‘var1’. Cuối cùng in chuỗi này ra màn hình.
Hoặc viết như thế này cũng có tác dụng tương đương:

set /p "var1=Insert your name?"
Làm việc với file & folder

Xóa file: del file-name

Xóa folder.

//del folder
rmdir directoryname
rmdir /S directoryname 		#use /S to delete a non empty directory
rmdir /Q /S directoryname		#delete  without being asked for confirmation
rmdir /Q /S "folder 1" #You can specify the directory name in quotes.

Kiểm tra sự tồn tại của folder/file? chúng ta sử dụng cú pháp exist. Ví dụ kiểm tra FLEX_SDK có cài đặt trong máy tính. Nếu lệnh sau trả về true nghĩa là trong máy tính của bạn có.

exist "%FLEX_SDK%\bin"

Sử dụng trong câu lệnh điều kiện.

if exist "2.jpg" (
	@echo "exists 2.jpg"
)
if exist "c:\folder1" (
	echo "found your folder."
)

Nếu bạn không nhớ tên file, có thể sử dụng ký tự wildcat.

::chỉ định nhiều file cùng một định dạng
if exist "*.jpg" (
	@echo "found any images file like .jpg"
)

– Liệt kê tất cả các file có trong thư mục.

dir /b c:\*.class

Giải thích:
Tham số ‘/b’: trả về nguyên tên file & mở rộng (VD: 1.png), và bỏ qua các thông tin khác của file như ngày tạo, kích thước…
Ví dụ sau duyệt các file:

::list files sử dụng for, với tham số /f
for /f %%f in ('dir /b c:\*.class') do (
	//truy cập phần tử
	echo %%f
	
	//lấy tên file không đuôi mở rộng (extension)
	%%~nf
)
 
 

String

Tạo string

Khởi tạo string trong dos

@echo off 
:: This program just displays Hello World 
set message=Hello World 
echo %message%

Đoạn code này sẽ in ra Hello World

Empty String

Để kiểm tra 1 string empty hay không, chúng ta dùng [%a%]==[]

@echo off 
SET a= 
SET b=Hello 
if [%a%]==[] echo "String A is empty" 
if [%b%]==[] echo "String B is empty "

Đoạn trên sẽ in ra String A is empty

Nối string

@echo off 
SET a=Hello 
SET b=World 
SET /A d=50 
SET c=%a% and %b% %d%
echo %c%

Kết quả là Hello and World 50

Độ dài string

Hihi, đáng tiếc là cũng không có hàm tính độ dài string, thế nên là làm thủ công thôi

@echo off
set str=Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b

:strLen
setlocal enabledelayedexpansion

:strLen_Loop
   if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof 

Kết quả là 11 nhé

Ép kiểu toInt

@echo off
set var=13145
set /A var=%var% + 5
echo %var%

Kết quả là 13150

Left String

@echo off 
set str=Helloworld 
echo %str% 

set str=%str:~0,5% 
echo %str%

Kết quả của ví dụ trên là

Helloworld
Hello

Tức là chúng ta sẽ lấy 5 ký tự tiếp theo bắt đầu từ ký tự đầu tiên (vị trí thứ 0)

Right string

@echo off 
set str=This message needs changed. 
echo %str% 

set str=%str:~-8% 
echo %str%

Tương tự left string, đoạn ví dụ right string trên sẽ lấy 8 ký tự tính từ vị trí cuối cùng bên phải sang trái.

This message needs changed. 
changed.

remove

@echo off 
set str=Batch scripts is easy. It is really easy. 
echo %str% 

set str=%str:is=% 
echo %str%

Kết quả là

Batch scripts is easy. It is really easy. 
Batch scripts easy. It really easy.

Tức là từ is sẽ bị loại bỏ khỏi string bằng lệnh :is

Remove đầu và cuối string

@echo off 
set str=Batch scripts is easy. It is really easy 
echo %str% 

set str=%str:~1,-1% 
echo %str%

Đoạn script trên sẽ loại bỏ ký tự đầu tiên và ký tự cuối cùng của string, kết quả là

Batch scripts is easy. It is really easy 
atch scripts is easy. It is really eas

Xóa tất cả space

@echo off 
set str=This string    has    a  lot  of spaces 
echo %str% 

set str=%str:=% 
echo %str%

Kết quả là Thisstringhasalotofspaces

Repalce một string

@echo off 
set str=This message needs changed. 
echo %str% 

set str=%str:needs=has% 
echo %str%

Kết quả là

This message needs changed. 
This message has changed.

Các phép tính toán

Toán tử số học

+ - * / % giống các ngôn ngữ khác, lần lượt ta có các phép cộng, trừ, nhân, chia, và chia lấy phần dư.

Toán tử quan hệ

  • EQU So sánh bằng nhau, 2 obj bằng nhau trả về true.
  • NEQ so sánh khác nhau, 2 obj khác nhau trả về true.
  • LSS so sánh kém, ví dụ 2 LSS 3 trả về true.
  • LEQ so sánh kém hoặc bằng.
  • GTR so sánh hơn, ví dụ 3 GTR 2 trả về true.
  • GEQ so sánh hơn hoặc bằng. Ví dụ:
@echo off 
SET /A a=5 
SET /A b=10 
if %a% EQU %b% echo A is equal to than B 
if %a% NEQ %b% echo A is not equal to than B 
if %a% LSS %b% echo A is less than B 
if %a% LEQ %b% echo A is less than or equal B
if %a% GTR %b% echo A is greater than B 
if %a% GEQ %b% echo A is greater than or equal to B

Kết quả là:

A is not equal to than B
A is less than B
A is less than or equal B

Toán tử logic

Có các phép toán and, ornot tương tự các ngôn ngữ khác.

Phép gán

  • += cộng toán hạng bên phải vào toán hạng bên trái và gán giá trị nhận được vào toán hạng bên trái.
  • -= trừ toán hạng bên trái cho toán hạng bên phải và gán giá trị nhận được vào toán hạng bên trái.
  • *= tương tự với phép nhân
  • /= tương tự với phép chia
  • %= tương tự với phép chia lấy phần dư Ví dụ:
@echo off
SET /A a=5
SET /A a+=5
echo %a%
SET /A a-=5
echo %a%
SET /A a*=5
echo %a%
SET /A a/=5
echo %a%
SET /A a%=5
echo %a%

Kết quả là

10
5
25
5
5

Toán tử Bitwise

  • &: toán tử `and
  • |: toán tử or
  • ^: toán tử xor Ví dụ:
@echo off
SET /A "Result=48 & 23"
echo %Result%
SET /A "Result=16 | 16"
echo %Result%
SET /A "Result=31 ^ 15"
echo %Result%

Kết quả là:

16
16
16

Cấu trúc rẽ nhánh

if

if(condition) do_something

Nếu condition đúng thì sẽ thực hiện do_something, nếu ngược lại thì thực hiện câu lệnh tiếp theo, bỏ qua do_something

@echo off 
SET /A a=5 
SET /A b=10 
SET /A c=%a% + %b% 
if %c%==15 echo "The value of variable c is 15" 
if %c%==10 echo "The value of variable c is 10"

Kết quả là 15

if else

If (condition) (do_something) ELSE (do_something_else)

Nếu condition đúng thì thực hiện do_something, ngược lại nếu sai thì thực hiện do_something_else sau đó thực hiện các câu lệnh tiếp theo.

@echo off 
SET /A a=5 
SET /A b=10
SET /A c=%a% + %b% 
if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value") 
if %c%==10 (echo "The value of variable c is 10") else (echo "Unknown value")

Kết quả trả về là

"The value of variable c is 15" 
"Unknown value"

If lồng nhau

if(condition1) if (condition2) do_something

Nếu condition1condition2 đều đúng thì sẽ thực hiện do_something, nếu không sẽ bỏ qua

@echo off
SET /A a=5
SET /A b=10
if %a%==5 if %b%==10 echo "The value of the variables are correct"

Kết quả là

"The value of the variables are correct"

If errorlevel

if errorlevel n somecommand

trước câu lệnh trên là 1 câu lệnh khác, mà câu lệnh đó bị lỗi trả về 1 error code là interger n thì somecommand sẽ được thực hiện.

Goto

:label 
...some commands
if (condition) goto :label 
  • :label khai báo nhãn tên là label, nhãn này chứa các lệnh sẽ được thực thi khi gọi label.
  • Nếu condition đúng, các lệnh trong label sẽ được thực hiện ví dụ
@echo off 
SET /A a=5 
SET /A b=10 
if %a%==5 goto :labela 
if %b%==10 goto :labelb

:labela 
echo "The value of a is 5" 

:labelb 
echo "The value of a is 10"

Kết quả là

"The value of a is 5" 
"The value of a is 10"

Input / Output

  • stdin: Standard In - chứa input của program/script.
  • stdout: Standard Out - thường là output của program/script được in trên màn hình.
  • stderr: Standard Err - thường là thông điệp của lỗi được in trên màn hình.

Chuyển hướng đầu ra

Toán tử > sẽ chuyển hướng/gửi kết quả (stdout/stderr) của lệnh ra file.

Dir C:\ > list.txt

stdout của lệnh Dir C:\ được ghi trong file list.txt.

Dir C:\ 2> list.txt

Nếu thêm 2 vào câu lệnh trên, thì nếu Dir C:\ trả ra lỗi thì thông điệp về lỗi này sẽ được lưu ở file list.txt, thử ví dụ bằng câu lệnh Dir Z:\ với Z là tên ổ đĩa mà máy tính của bạn không có, file list.txt sẽ có dòng chữ The system cannot find the path specified.

Ngắt kết quả chương trình

Dir C:\ > NUL

Ném kết quả lệnh Dir C:\ vào hư vô, không được xuất hiện ra màn hình hay file nào cả.

stdin

TYPE CON > lists.txt

Sau câu lệnh trên thì tất cả những gì bạn gõ trên cmd đều được lưu vào trong file lists.txt

Vòng lặp

while

Không có vòng while trong thứ này, đúng là như thế đó. Thay vào đó, chúng ta tự viết 1 ra 1 thứ tương tự nó, dùng iflabel

Set counters
:label
If (expression) (
   Do_something
   Increment counter
   Go back to :label
)

Ví dụ:

@echo off
SET /A "index=1"
SET /A "count=5"
:while
if %index% leq %count% (
   echo The value of index is %index%
   SET /A "index=index + 1"
   goto :while
)

Kết quả

The value of index is 1
The value of index is 2
The value of index is 3
The value of index is 4
The value of index is 5

for

Ví dụ

@echo off 
FOR %%F IN (1 2 3 4 5) DO echo %%F

Kết quả

1 
2 
3 
4 
5

Classic for

Tại sao lại là classic for, bởi vì vòng for vừa giới thiệu là vòng lặp trong 1 list, trong khi vòng for chúng ta vẫn hay cần dùng lại là như thế này:

for(variable declaration;expression;Increment) {
   statement #1
   statement #2
   …
}

Giờ làm sao? lại phải tự viết thôi. Ví dụ:

@echo off 
SET /A i=1 
:loop 

IF %i%==5 GOTO END 
echo The value of i is %i% 
SET /a i=%i%+1 
GOTO :LOOP 
:END 

Kết quả là

The value of i is 1 
The value of i is 2 
The value of i is 3 
The value of i is 4

Vòng lặp trong 1 khoảng

FOR /L %%variable IN (lowerlimit,Increment,Upperlimit) DO do_something

Ví dụ:

@ECHO OFF 
FOR /L %%X IN (0,1,5) DO ECHO %%X

Kết quả:

0 
1 
2 
3 
4 
5

Ở đây vòng lặp sẽ chạy từ 0 tới 5, với bước nhảy là 1.

Break vòng lặp

Hehe, lại đáng tiếc lần nữa là không có lệnh break, chúng ta lại phải tự làm lấy 1 cái bằng iflabel. Ví dụ

@echo off 
SET /A "index=1" 
SET /A "count=5" 
:while 
if %index% leq %count% ( 
   if %index%==2 goto :Increment 
      echo The value of index is %index% 
:Increment 
   SET /A "index=index + 1" 
   goto :while 
)

Ở đây chúng ta có 1 vòng lặp while giả mà được nói ở trên 😄, chúng ta muốn break ở chỗ index = 2 thì dùng if như trên, nó sẽ goto luôn tới label increment và bỏ qua lệnh echo. Kết quả:

The value of index is 1 
The value of index is 3 
The value of index is 4 
The value of index is 5

Function

Ở trên chúng ta đã dùng rất nhiều label, cũng có thể gọi đó là function. Trong batch script thì chúng ta tạo 1 function như thế này:

:function_name 
Do_something 
EXIT /B 0

Và khi gọi function thì dùng như thế này:

@echo off 
SETLOCAL 
CALL :Display 
EXIT /B %ERRORLEVEL% 
:Display 
SET /A index=2 
echo The value of index is %index% 
EXIT /B 0

Kết quả là The value of index is 2

Return Code

Mặc định khi 1 command line sau khi được thực hiện thành công thì sẽ trả về 0, còn nếu khác 0 thì đương nhiên là bị lỗi rồi.

Code Giải thích
0 Thành công
1 Function không chính xác. Có thể không được nhận ra đúng function có trong batch
2 Hệ thống không thể tìm thấy các tập tin được chỉ định. Chỉ ra rằng tệp không thể tìm thấy ở vị trí được chỉ định
3 Hệ thống không thể tìm đường dẫn cụ thể. Chỉ ra rằng không thể tìm thấy đường dẫn được chỉ định.
5 Truy cập bị từ chối. Cho biết người dùng không có quyền truy cập vào tài nguyên được chỉ định.
9009 0x2331 Chỉ ra rằng lệnh, tên ứng dụng hoặc đường dẫn đã bị lỗi chính tả khi định cấu hình Action.
221225495 0xC0000017 -1073741801 Không đủ bộ nhớ ảo. Nó chỉ ra rằng Windows đã hết bộ nhớ.
3221225786 0xC000013A -1073741510 cmd bị ngắt bởi người dùng Ctrl C
3221225794 0xC0000142 -1073741502 Ứng dụng không thể khởi tạo đúng cách. Có thể do user không có quyền truy cập, gdi32.dll hoặc user32.dll bị lỗi

Kết luận

  • Còn rất nhiều thứ về cmd nữa, mọi người có thể vào đây để đọc tiếp.
  • Khi viết table, gõ | xong ấn enter thì bị chuyển thành ký tự của emoticon, cứ phải ấn cách rồi mới enter được, rất là không tiện, khiến những người đến ngày như mình rất rễ bực mình.
  • Sau khi xóa/cut ký tự nào đó để mà con trỏ chuột chạm vào dấu | thì không dùng phím điều hướng trên bàn phím được -_- (máy tính windows 10 chạy chrome)