Lệnh mkdir trong Linux — Tạo thư mục mới ngay lập tức
mkdir là lệnh tạo thư mục trong Terminal Linux, cho phép người dùng khởi tạo một hoặc nhiều thư mục cùng lúc với quyền truy cập tùy chỉnh. Khi triển khai dự án trên VPS hoặc thiết lập cấu trúc thư mục cho Web Server, quản trị viên thường cần tạo cây thư mục phân cấp rõ ràng để tổ chức mã nguồn, file cấu hình và log hệ thống. Lệnh mkdir hỗ trợ các tùy chọn như tạo thư mục cha tự động với tham số `-p`, thiết lập quyền truy cập ngay lúc khởi tạo bằng `-m`, giúp xử lý công việc từ thao tác cơ bản đến quản lý hệ thống phức tạp trong môi trường Linux. Nắm vững cách dùng mkdir là kỹ năng nền tảng không thể thiếu đối với bất kỳ quản trị viên nào.
Cần chuẩn bị gì trước khi dùng lệnh mkdir?
- Tài khoản người dùng: Bất kỳ user nào đều có thể sử dụng lệnh mkdir để tạo thư mục trong phạm vi thư mục mà user đó có quyền ghi.
- Hệ điều hành hỗ trợ: Linux (Ubuntu, Debian, CentOS, AlmaLinux, Fedora...) và macOS.
- Gói phần mềm: Lệnh mkdir có sẵn trên hầu hết các hệ thống Linux/Unix, không cần cài thêm. Đây là một phần của GNU coreutils, luôn được cài đặt mặc định cùng hệ điều hành.
Cú pháp lệnh mkdir là gì?
Lệnh mkdir hỗ trợ 3 dạng cú pháp trên Linux: tạo thư mục đơn lẻ, tạo nhiều thư mục cùng lúc, và tạo cây thư mục lồng nhau.
mkdir [OPTION]... DIRECTORY... mkdir DIRECTORY mkdir DIRECTORY_1 DIRECTORY_2 DIRECTORY_N mkdir -p /PATH/TO/DIRECTORY/CHILD mkdir -p /PATH/TO/DIRECTORY/CHILD_1 /PATH/TO/DIRECTORY/CHILD_2 mkdir -m 755 DIRECTORY mkdir -pv /PATH/TO/DIRECTORY/CHILD_1 /PATH/TO/DIRECTORY/CHILD_2
Các tùy chọn của lệnh mkdir là gì?
Lệnh mkdir hỗ trợ nhiều tùy chọn để điều chỉnh quyền truy cập, tạo thư mục lồng nhau và hiển thị thông báo trong quá trình tạo thư mục.
| Tùy chọn ngắn | Tùy chọn dài | Mô tả |
|---|---|---|
| -m | --mode=CHẾ ĐỘ | Đặt quyền truy cập cho thư mục mới tạo (mặc định là 0777 trừ đi umask). |
| -p | --parents | Tạo các thư mục cha nếu chưa tồn tại; không báo lỗi nếu thư mục đã có. |
| -v | --verbose | In thông báo mỗi khi một thư mục được tạo thành công. |
| -Z | --context=CTX | Đặt ngữ cảnh bảo mật SELinux cho thư mục mới thành CTX. |
| --help | Hiển thị trợ giúp và thoát. | |
| --version | Hiển thị thông tin phiên bản và thoát. |
Các ví dụ thực tế khi dùng lệnh mkdir trong công việc hàng ngày?
Trong thực tế vận hành hệ thống và phát triển phần mềm, mkdir là lệnh tôi dùng gần như mỗi ngày — từ tạo thư mục deploy, sắp xếp log, đến thiết lập cấu trúc dự án mới. Dưới đây là các tình huống cụ thể tôi hay gặp nhất.
Tạo thư mục đơn lẻ để sắp xếp dự án
mkdir /home/admin/projects/api-gateway
Thư mục api-gateway được tạo ngay bên trong /home/admin/projects. Đây là thao tác nhanh nhất khi bắt đầu một dự án mới trên server.
Tạo nhiều thư mục cùng lúc cho cấu trúc dự án hoàn chỉnh
mkdir -p /var/www/laravel-app/{public,storage/logs,bootstrap/cache,resources/views}
Tuỳ chọn -p tạo cả thư mục cha lẫn thư mục con mà không báo lỗi nếu đường dẫn đã tồn tại. Cấu trúc Laravel chuẩn được tạo trong một dòng lệnh duy nhất.
Thiết lập thư mục backup định kỳ với quyền hạn chế
mkdir -p /backup/mysql/2026-07-01 && chmod 700 /backup/mysql/2026-07-01
Thư mục backup theo ngày được tạo và chmod 700 để chỉ root mới đọc/ghi. Kết hợp với cron job chạy hàng đêm, đây là workflow backup mà tôi triển khai trên hầu hết server production.
Tạo thư mục workspace cho team trên server dùng chung
mkdir -p /home/shared/{frontend,backend,docs} && chmod 775 /home/shared/frontend /home/shared/backend && chmod 770 /home/shared/docs
Thư mục frontend và backend có quyền 775 để cả team đọc/ghi, còn docs chỉ có 770 cho nhóm kỹ thuật nội bộ. Phân quyền ngay từ lúc tạo giúp tránh phải chmod lại sau.
Tự động tạo thư mục deploy từ script CI/CD
RELEASE_DIR="/var/www/releases/$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RELEASE_DIR"/{public,config,storage/runtime}
ln -sfn "$RELEASE_DIR" /var/www/current
Script CI/CD tạo thư mục release theo timestamp để support deploy rollback. Symbolic link /var/www/current luôn trỏ sang bản release mới nhất, và thư mục con được tạo đồng thời trước khi deploy code.
- Từ khóa cần viết: mkdir
Xử lý lỗi thường gặp với lệnh mkdir
Khi làm việc với thư mục trên Linux, mkdir là lệnh tưởng chừng đơn giản nhưng lại dễ gây lỗi bất ngờ khi gặp phải trường hợp thư mục đã tồn tại, phân quyền chặt hoặc đường dẫn không hợp lệ. Nắm vững cách xử lý lỗi giúp tiết kiệm thời gian debug đáng kể.
1. Bảng lỗi thường gặp
| Lỗi | Nguyên nhân | Khắc phục |
|---|---|---|
|
Thư mục foo đã tồn tại trong thư mục hiện tại. Mặc định mkdir không ghi đè. |
Dùng mkdir -p để bỏ qua nếu thư mục đã tồn tại, hoặc xóa thư mục cũ trước bằng rm -r foo |
|
Thư mục cha a hoặc b chưa tồn tại. mkdir không tự tạo thư mục trung gian. |
Dùng mkdir -p /path/to/a/b/c để tạo toàn bộ cây thư mục cùng lúc |
|
Người dùng hiện tại không có quyền ghi (write) trong thư mục cha nơi muốn tạo thư mục mới. | Kiểm tra quyền bằng ls -ld /parent_dir, sau đó dùng sudo mkdir foo hoặc yêu cầu admin cấp quyền |
|
Filesystem đích được mount ở chế độ read-only (thường gặp khi mount USB lỗi hoặc hệ thống recovery). | Kiểm tra mount point bằng mount | grep /target; chuyển sang thư mục có quyền ghi hoặc remount filesystem |
|
Không truyền tên thư mục cần tạo. Thường do quên đối số hoặc dùng biến rỗng. | Kiểm tra lại cú pháp: mkdir ten_thu_muc. Với biến, dùng echo "$VAR" để xem giá trị trước |
2. Tình huống lỗi cụ thể
Tình huống 1: Tạo thư mục con nhưng thư mục cha chưa tồn tại
$ mkdir project/src/utils
mkdir: cannot create directory 'project/src/utils': No such file or directory
Nguyên nhân: Thư mục project/src chưa được tạo nên mkdir không thể tạo thư mục con utils.
Khắc phục:
$ mkdir -p project/src/utils
Flag -p tạo toàn bộ cây thư mục trung gian. Nếu bất kỳ thư mục nào đã tồn tại, lệnh vẫn tiếp tục mà không báo lỗi.
Tình huống 2: Tạo thư mục trùng tên đã có
$ mkdir backups
mkdir: cannot create directory 'backups': File exists
Nguyên nhân: Thư mục backups đã tồn tại trong thư mục hiện tại.
Khắc phục: Có hai hướng xử lý tùy mục đích.
# Cách 1: Tạo thư mục mới với timestamp trong tên
$ mkdir backups_$(date +%Y%m%d)
# Cách 2: Xóa thư mục cũ rồi tạo mới (CẨN THẬN: mất dữ liệu)
$ rm -r backups && mkdir backups
# Cách 3: Dùng -p để bỏ qua lỗi nếu chỉ muốn đảm bảo thư mục tồn tại
$ mkdir -p backups
Tình huống 3: Không có quyền ghi vào thư mục cha
$ mkdir /var/www/myapp
mkdir: cannot create directory '/var/www/myapp': Permission denied
Nguyên nhân: Người dùng thường không có quyền ghi trong /var/www. Kiểm tra bằng:
$ ls -ld /var/www
drwxr-xr-x 2 root root 4096 Jun 10 09:00 /var/www
Thư mục thuộc về root và chỉ root mới có quyền ghi.
Khắc phục:
# Dùng sudo nếu có quyền admin
$ sudo mkdir /var/www/myapp
# Hoặc tạo trong thư mục cá nhân rồi di chuyển
$ mkdir -p ~/myapp && sudo mv ~/myapp /var/www/
3. Mẹo debug
- Kiểm tra đường dẫn trước khi tạo: Dùng
ls -la /parent/dirđể xác nhận thư mục cha tồn tại và có quyền ghi trước khi chạymkdir. - Dùng
-v(verbose): Flag-vin ra thông báo mỗi khi tạo thư mục thành công, giúp xác nhận đúng thư mục đang được tạo.$ mkdir -pv project/src/utils/lib mkdir: created directory 'project' mkdir: created directory 'project/src' mkdir: created directory 'project/src/utils' mkdir: created directory 'project/src/utils/lib' - Đọc error message kỹ: Phần sau dấu hai chấm (
cannot create directory 'X': Y) cho biết chính xác lỗi gì. "File exists" khác hoàn toàn với "Permission denied" về cách xử lý. - Kiểm tra biến rỗng: Nếu dùng biến trong script, luôn đặt trong dấu ngoặc kép để tránh lỗi "missing operand" khi biến rỗng:
# Sai: có thể gây "missing operand" mkdir $DIRNAME # Đúng: kiểm tra và báo lỗi rõ ràng if [ -n "$DIRNAME" ]; then mkdir -p "$DIRNAME" else echo "ERROR: DIRNAME is empty" fi - Dùng
-pluôn trong script: Khi tạo thư mục trong script, luôn dùngmkdir -pvì nó an toàn khi thư mục đã tồn tại và tự tạo thư mục cha nếu thiếu. - Kiểm tra filesystem đầy: Nếu lỗi không rõ nguyên nhân, dùng
df -h /target/pathđể xem filesystem còn chỗ trống không.
mkdir khác gì so với rmdir và install?
Trên Linux, mỗi lệnh tạo thư mục đều có điểm mạnh và giới hạn riêng. Nắm rõ sự khác biệt giúp bạn chọn đúng công cụ cho từng kịch bản thay vì dùng lệnh bất kỳ chỉ vì "nó cũng tạo được thư mục".
| Tiêu chí | mkdir | rmdir | install |
|---|---|---|---|
| Chức năng chính | Tạo thư mục mới | Xóa thư mục rỗng | Sao chép file và tự động tạo thư mục đích |
| Cú pháp cơ bản | mkdir [thư_mục] | rmdir [thư_mục] | install [nguồn] [đích] |
| Tạo thư mục cha tự động | Có, với tùy chọn -p | Không | Có, mặc định |
| Phạm vi áp dụng | Chỉ tạo thư mục | Chỉ xóa thư mục rỗng | Phân phối file vào hệ thống |
| Có sẵn hay cần cài | Mặc định trong coreutils | Mặc định trong coreutils | Mặc định trong coreutils |
| Quyền thư mục sinh ra | Thừa hưởng umask | Không áp dụng | Tùy chọn -m |
Tạo cấu trúc thư mục lồng nhau nhanh nhất
Khi cần tạo một chuỗi thư mục cha lẫn thư mục con cùng lúc, mkdir -p là lựa chọn tối ưu. Lệnh này không báo lỗi nếu thư mục đã tồn tại, trong khi install chỉ tạo thư mục đích khi đồng thời sao chép file vào và rmdir không hỗ trợ tạo thư mục ở bất kỳ tình huống nào.
Xóa thư mục trống sau khi dọn file xong
Khi đã dùng rm xóa hết nội dung bên trong một thư mục và muốn xóa luôn thư mục cha đó, rmdir là công cụ an toàn vì nó chỉ xóa khi thư mục thực sự rỗng. Dùng mkdir hay install ở đây hoàn toàn sai mục đích.
Cài đặt file vào thư mục hệ thống mà không cần tạo thư mục trước
Trong script cài đặt, install -D vừa sao chép file vừa tự tạo thư mục cha nếu chưa có, thay vì phải chạy mkdir -p trước rồi mới chạy lệnh sao chép. Đây là cách các công cụ đóng gói như Makefile thường dùng.
Tóm tắt nhanh
- mkdir — dùng khi cần tạo thư mục mới hoặc cấu trúc thư mục lồng nhau.
- rmdir — dùng khi cần xóa thư mục rỗng, muốn đảm bảo không xóa nhầm thư mục có dữ liệu.
- install — dùng khi cần sao chép file đồng thời tạo thư mục đích tự động trong script cài đặt.
Quy trình thực tế tạo cấu trúc thư mục dự án web với Nginx?
Trong một dự án triển khai web app với Nginx trên Ubuntu, trước khi gán quyền sở hữu và phân quyền truy cập cho thư mục dự án, ta cần tạo cấu trúc thư mục hoàn chỉnh theo chuẩn đặt tên.
- Bước 1 — mkdir: Tạo toàn bộ cấu trúc thư mục dự án cùng một lúc. Lệnh này chạy TRƯỚC mkdir không thể thiếu, vì các bước sau cần thư mục đã tồn tại để thao tác.
mkdir -p /var/www/mydomain/{public,logs,ssl} - Bước 2 — chown: Gán quyền sở hữu thư mục cho user www-data sau khi mkdir đã tạo xong. Lệnh này chạy SAU mkdir vì cần thư mục tồn tại trước.
chown -R www-data:www-data /var/www/mydomain
- Bước 3 — chmod: Thiết lập permission cho thư mục public và logs sau khi đã xác định owner. Lệnh này chạy SONG SONG với chown trong cùng một workflow, nhưng phụ thuộc thư mục đã được tạo.
chmod -R 755 /var/www/mydomain/public && chmod -R 700 /var/www/mydomain/logs
- Bước 4 — ls -l: Kiểm tra kết quả cuối cùng: ownership, permission và cấu trúc thư mục đã tạo. Lệnh này chạy SAU tất cả các bước trên để xác nhận workflow hoàn tất.
ls -lR /var/www/mydomain
Những câu hỏi thường gặp về lệnh mkdir?
Dưới đây là các câu hỏi phổ biến nhất từ người dùng khi mới tiếp cận lệnh tạo thư mục trên Linux.
Lệnh mkdir dùng để làm gì trên Linux?
mkdir (viết tắt của "make directory") là lệnh dùng để tạo thư mục mới trên hệ thống tệp Linux. Khi bạn cần tạo một thư mục mới để lưu trữ tệp hoặc tổ chức dữ liệu, đây là lệnh cơ bản nhất để thực hiện việc đó.
Cú pháp cơ bản của lệnh mkdir là gì?
Cú pháp cơ bản của mkdir rất đơn giản: mkdir tên_thư_mục. Ví dụ, mkdir projects sẽ tạo một thư mục tên "projects" trong thư mục hiện tại. Bạn cũng có thể chỉ định đường dẫn đầy đủ như mkdir /home/user/documents.
Làm sao tạo nhiều thư mục cùng lúc với mkdir?
Bạn chỉ cần liệt kê các tên thư mục cách nhau bằng dấu cách. Ví dụ: mkdir folder1 folder2 folder3. Lệnh này sẽ tạo đồng thời ba thư mục trong vị trí hiện tại mà không cần chạy lệnh riêng lẻ cho từng thư mục.
Cách tạo thư mục con nhiều cấp cùng lúc như thế nào?
Dùng tùy chọn -p (parents) để tạo toàn bộ cây thư mục lồng nhau trong một lần lệnh. Ví dụ: mkdir -p projects/web/assets/images sẽ tạo cả "projects", "web", "assets" và "images" nếu chúng chưa tồn tại mà không báo lỗi.
Nếu thư mục đã tồn tại thì mkdir có báo lỗi không?
Có, mkdir sẽ báo lỗi "File exists" nếu bạn cố tạo thư mục trùng tên trong cùng vị trí. Tuy nhiên, khi dùng tùy chọn -p, lệnh sẽ bỏ qua và không báo lỗi nếu thư mục đã có sẵn.
Sự khác nhau giữa lệnh mkdir và touch là gì?
mkdir tạo thư mục, còn touch tạo tệp rỗng. Đây là hai lệnh hoàn toàn khác nhau: mkdir tạo đơn vị lưu trữ dạng thư mục để chứa tệp bên trong, còn touch chỉ tạo một tệp trống không có nội dung. Người mới thường hay nhầm lẫn hai lệnh này với nhau.
Có thể phân quyền thư mục ngay khi tạo bằng mkdir không?
Có, dùng tùy chọn -m (mode) để đặt quyền truy cập ngay khi tạo. Ví dụ: mkdir -m 755 secure_folder sẽ tạo thư mục với quyền rwxr-xr-x. Nếu không dùng -m, thư mục sẽ được tạo với quyền mặc định theo cấu hình umask của hệ thống.
Tạo thư mục có tên chứa dấu cách thì viết lệnh thế nào?
Bạn cần đặt tên thư mục trong dấu ngoặc kép hoặc dùng dấu gạch ngược trước dấu cách. Ví dụ: mkdir "My Documents" hoặc mkdir My\ Documents. Nếu không xử lý đúng, hệ thống sẽ hiểu "My" và "Documents" là hai đối số riêng biệt và báo lỗi.
mkdir là lệnh nền tảng giúp tạo thư mục mới trên hệ thống Linux, với -p cho phép tạo cây thư mục lồng nhau và -m để thiết lập quyền truy cập ngay lúc khởi tạo. Việc nắm vững cách phối hợp các tham số này giúp bạn xây dựng cấu trúc thư mục có tổ chức và an toàn ngay từ đầu.
Nếu bạn cần dọn dẹp thư mục rỗng, rmdir là lựa chọn phù hợp. Để kiểm tra kết quả sau khi tạo, hãy kết hợp với ls nhằm xác nhận cấu trúc và quyền truy cập đã được thiết lập đúng ý muốn.
Hãy mở terminal và thực hành tạo các thư mục lồng nhau với mkdir -p ngay trong môi trường thử nghiệm. Khi đã quen thuộc với cú pháp và các tùy chọn, bạn có thể tự tin áp dụng vào các dự án thực tế một cách chính xác.