رفتن به محتوا
LoopX

ساختار پوشه‌های لینوکس

توی این درس یاد می‌گیری فایل‌سیستم لینوکس یک درخت واحد است که از ریشه (/) شروع می‌شود، و هر پوشه‌ی اصلی کار مشخصی دارد: تنظیمات در /etc، داده‌های متغیر مثل لاگ‌ها در /var، پوشه‌ی کاربرها در /home، برنامه‌ها در /usr، فایل‌های موقت در /tmp و نرم‌افزارهای اضافه در /opt. با ls /، ls /etc و cat /proc/cpuinfo همه را با چشم خودت می‌بینی، و می‌فهمی چرا می‌گویند «همه‌چیز فایل است»: حتی پردازنده، حافظه و دستگاه‌ها فایل‌اند (/proc و /dev).

مسئله: فایل‌ها کجا هستند؟

Section titled “مسئله: فایل‌ها کجا هستند؟”

در ویندوز درایوهای C: و D: داری و برنامه‌ها در Program Files هستند. در لینوکس درایو جدا نداری: همه‌چیز زیر یک پوشه‌ی ریشه است و هر چیزی جای مشخصی دارد. اگر این نقشه را ندانی، نمی‌دانی تنظیمات nginx کجاست، لاگ‌ها کجا می‌روند یا چرا دیسک پر شده. اگر بدانی، روی هر سرور لینوکسی نیمه‌گمشده نیستی.

تشبیه: ساختمان با طبقه‌های مشخص

Section titled “تشبیه: ساختمان با طبقه‌های مشخص”

یک ساختمان اداری خوب طبقه‌بندی دارد: طبقه‌ی تنظیمات و قفل‌ها (/etc)، انبار داده‌های در حال تغییر (/var)، دفتر هر کارمند (/home)، انبار ابزار مشترک (/usr) و میز موقت (/tmp). همه‌ی ساختمان‌های لینوکس این طرح را دارند، پس هر جا بروی، نقشه آشناست.

نقشه‌ی ساده‌ی ریشه‌ی لینوکس. هر پوشه برای نوع مشخصی از داده است؛ استاندارد FHS این چیدمان را بین توزیع‌ها یکسان نگه می‌دارد.

دستور ls (مخفف list) محتوای یک پوشه را فهرست می‌کند. / خودِ ریشه است:

Terminal window
ls /
خروجی
bin
bin.usr-is-merged
boot
dev
etc
home
lib
lib.usr-is-merged
media
mnt
opt
proc
root
run
sbin
sbin.usr-is-merged
srv
sys
tmp
usr
var

-F به آخر اسم‌ها نشانه می‌گذارد: / یعنی پوشه، @ یعنی لینک نمادین (به‌زودی در درس لینک‌ها):

Terminal window
ls -F /
خروجی
bin@
bin.usr-is-merged/
boot/
dev/
etc/
home/
lib@
lib.usr-is-merged/
media/
mnt/
opt/
proc/
root/
run/
sbin@
sbin.usr-is-merged/
srv/
sys/
tmp/
usr/
var/

اسم‌هایی که @ دارند (bin@، lib@، sbin@) لینک‌اند. در Ubuntu جدید، /bin و /lib و /sbin فقط میانبر به /usr/bin و /usr/lib و /usr/sbin هستند (مهاجرت «usr merge»):

Terminal window
ls -ld /bin /lib /sbin
خروجی
lrwxrwxrwx 1 root root 7 Apr 22 2024 /bin -> usr/bin
lrwxrwxrwx 1 root root 7 Apr 22 2024 /lib -> usr/lib
lrwxrwxrwx 1 root root 8 Apr 22 2024 /sbin -> usr/sbin

l ابتدای هر خط یعنی لینک، و -> به مقصد اشاره می‌کند. (پوشه‌های ...usr-is-merged ردپای همین مهاجرت‌اند.) یک نمای درختی هم داریم:

Terminal window
tree -L 1 -d / | head -14
خروجی
/
├── bin -> usr/bin
├── bin.usr-is-merged
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib.usr-is-merged
├── media
├── mnt
├── opt
├── proc
├── root

etc را «editable text configuration» هم می‌خوانند: همه‌ی تنظیمات سیستم و بیشتر برنامه‌ها اینجا فایل‌های متنی‌اند، و چون متنی‌اند با هر ویرایشگری باز می‌شوند.

Terminal window
ls /etc | head -20
خروجی
X11
adduser.conf
alternatives
apparmor.d
apt
bash.bashrc
bash_completion.d
bindresvport.blacklist
binfmt.d
ca-certificates
ca-certificates.conf
cloud
credstore
credstore.encrypted
cron.d
cron.daily
cron.hourly
cron.monthly
cron.weekly
cron.yearly

چند فایل مهم:

Terminal window
echo "--- /etc/hostname (نام ماشین):"; cat /etc/hostname
echo "--- /etc/hosts (نام ← IP محلی):"; cat /etc/hosts | head -4
echo "--- /etc/passwd (کاربرها؛ سه خط اول):"; head -3 /etc/passwd
echo "--- /etc/os-release (توزیع):"; head -2 /etc/os-release
خروجی
--- /etc/hostname (نام ماشین):
pc
--- /etc/hosts (نام ← IP محلی):
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
--- /etc/passwd (کاربرها؛ سه خط اول):
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
--- /etc/os-release (توزیع):
PRETTY_NAME="Ubuntu 24.04.5 LTS"
NAME="Ubuntu"

هر برنامه‌ی بزرگ پوشه‌ی خودش را دارد (/etc/ssh، /etc/nginx، /etc/apt). برای تغییر رفتار یک سرویس معمولاً یکی از این فایل‌ها را ویرایش می‌کنی (و برای محافظت، قبل از آن یک کپی بگیر).

مثال ۳: /home و ~، پوشه‌ی تو

Section titled “مثال ۳: /home و ~، پوشه‌ی تو”

هر کاربر عادی یک پوشه‌ی خانه دارد (/home/نام) و ~ (و $HOME) به آن اشاره می‌کند. کاربر root جداست: /root.

Terminal window
ls /home
echo "پوشه‌ی من: $HOME (همان ~)"
ls -ld /home/ali /root
echo "--- محتوای خانه‌ی من (با فایل‌های مخفی):"
ls -a ~
خروجی
ali
ubuntu
پوشه‌ی من: /home/ali (همان ~)
drwxr-xr-x 2 ali ali 4096 Oct 3 19:21 /home/ali
drwx------ 1 root root 4096 Oct 3 09:34 /root
--- محتوای خانه‌ی من (با فایل‌های مخفی):
.
..
.bash_logout
.bashrc
.profile

فایل‌هایی که با . شروع می‌شوند مخفف‌اند (مثل .bashrc، .profile): تنظیمات شخصی کاربر؛ ls معمولی نشانشان نمی‌دهد و ls -a (all) نشان می‌دهد. توجه به دسترسی: /root با drwx------ فقط برای خود root است، و /home برای همه قابل‌خواندن.

⚡ بررسی سریع

تنظیمات شخصی کاربر (مثل .bashrc) کجاست؟

مثال ۴: /var، داده‌ی متغیر

Section titled “مثال ۴: /var، داده‌ی متغیر”

var (variable) داده‌ای است که با کار کردن سیستم تغییر می‌کند: لاگ‌ها، کش، صف‌ها و داده‌ی دیتابیس‌ها.

Terminal window
ls /var
echo "--- /var/log (لاگ‌ها):"
ls /var/log | head -8
echo "--- /var/lib (داده‌ی برنامه‌ها):"
ls /var/lib | head -8
خروجی
backups
cache
lib
local
lock
log
mail
opt
run
spool
tmp
www
--- /var/log (لاگ‌ها):
README
alternatives.log
apt
bootstrap.log
btmp
dpkg.log
faillog
journal
--- /var/lib (داده‌ی برنامه‌ها):
apt
dbus
dpkg
git
logrotate
man-db
misc
nginx

وقتی دیسک پر می‌شود، اولین جایی که نگاه می‌کنی /var (بیشتر /var/log و /var/lib) است. اگر یک سرویس لاگ‌ها را نچرخاند، می‌تواند دیسک را پر کند.

usr (قدیم: user) محل برنامه‌ها و کتابخانه‌ها است:

Terminal window
ls /usr
echo "--- تعداد برنامه‌های /usr/bin: $(ls /usr/bin | wc -l)"
ls /usr/bin | head -10 | tr '\n' ' '; echo
echo "--- /usr/share (راهنما، مجوزها، ...):"
ls /usr/share | head -8 | tr '\n' ' '; echo
خروجی
bin
games
include
lib
libexec
local
sbin
share
src
--- تعداد برنامه‌های /usr/bin: 624
[ aarch64-linux-gnu-addr2line aarch64-linux-gnu-ar aarch64-linux-gnu-as aarch64-linux-gnu-c++filt aarch64-linux-gnu-dwp aarch64-linux-gnu-elfedit aarch64-linux-gnu-gold aarch64-linux-gnu-gp-archive aarch64-linux-gnu-gp-collect-app
--- /usr/share (راهنما، مجوزها، ...):
X11 applications apport awk base-files base-passwd bash-completion binfmts

دستورهایی که تا الآن زدی (ls، cat، uname) فایل‌هایی در /usr/bin هستند؛ ببین:

Terminal window
which ls cat uname
خروجی
/usr/bin/ls
/usr/bin/cat
/usr/bin/uname

/usr/local برای نرم‌افزارهایی است که خودت نصب می‌کنی (نه با مدیر بسته)، تا با بسته‌های توزیع قاطی نشوند. /opt هم برای نرم‌افزارهای کامل و مستقل (مثلاً یک برنامه‌ی تجاری که همه‌چیزش را در یک پوشه آورده): /opt/برنامه/....

مثال ۶: /tmp، فایل‌های موقت

Section titled “مثال ۶: /tmp، فایل‌های موقت”
Terminal window
ls -ld /tmp /var/tmp
echo "سلام" > /tmp/test-lx.txt
cat /tmp/test-lx.txt
rm /tmp/test-lx.txt
خروجی
drwxrwxrwt 1 root root 4096 Oct 3 19:58 /tmp
drwxrwxrwt 1 root root 4096 Oct 3 19:18 /var/tmp
سلام

/tmp برای فایل‌های موقت است؛ همه می‌توانند در آن بنویسند (drwxrwxrwt، حرف t آخر یعنی sticky bit که در درس دسترسی‌های ویژه می‌خوانی). محتوایش ممکن است با ریبوت پاک شود، پس چیز مهم آنجا نگذار. /var/tmp موقتی است ولی بین ریبوت‌ها می‌ماند.

مثال ۷: /proc، پنجره‌ای به هسته

Section titled “مثال ۷: /proc، پنجره‌ای به هسته”

/proc پوشه‌ای است که اصلاً روی دیسک نیست: هسته آن را زنده می‌سازد تا اطلاعاتش را به شکل فایل نشان بدهد.

Terminal window
head -4 /proc/cpuinfo | cut -c1-60
echo "--- حافظه:"
head -3 /proc/meminfo
echo "--- زمان روشن بودن (ثانیه):"
cat /proc/uptime
echo "--- پروسه‌ی خودم (شماره $$):"
head -2 /proc/$$/status
خروجی
processor : 0
BogoMIPS : 48.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomic
CPU implementer : 0x61
--- حافظه:
MemTotal: 4010356 kB
MemFree: 145876 kB
MemAvailable: 1654808 kB
--- زمان روشن بودن (ثانیه):
89853.85 488082.55
--- پروسه‌ی خودم (شماره 11787):
Name: bash
Umask: 0022

هر عددی که در /proc می‌بینی (مثل /proc/1234) پروسه‌ای با همان شماره است. یک نکته‌ی جالب: این فایل‌ها حجم صفر نشان می‌دهند ولی محتوا دارند، چون در لحظه ساخته می‌شوند:

Terminal window
ls -l /proc/cpuinfo
file /proc/cpuinfo
echo "ولی محتوا: $(wc -l < /proc/cpuinfo) خط"
خروجی
-r--r--r-- 1 root root 0 Oct 3 08:33 /proc/cpuinfo
/proc/cpuinfo: empty
ولی محتوا: 72 خط

مثال ۸: /dev، دستگاه‌ها هم فایل‌اند

Section titled “مثال ۸: /dev، دستگاه‌ها هم فایل‌اند”

دیسک، ترمینال، حتی «هیچ» یک فایل است:

Terminal window
ls /dev | head -20 | tr '\n' ' '; echo
echo "--- /dev/null (سیاه‌چاله):"
echo "این متن گم می‌شود" > /dev/null
echo "هیچ‌چیز چاپ نشد؛ کد خروج: $?"
echo "--- /dev/zero (منبع بی‌پایان بایت صفر):"
head -c 8 /dev/zero | od -c | head -1
echo "--- /dev/urandom (بایت تصادفی؛ ۴ بایت):"
head -c 4 /dev/urandom | od -An -tx1 | wc -w
خروجی
core fd full mqueue null ptmx pts random shm stderr stdin stdout tty urandom zero
--- /dev/null (سیاه‌چاله):
هیچ‌چیز چاپ نشد؛ کد خروج: 0
--- /dev/zero (منبع بی‌پایان بایت صفر):
0000000 \0 \0 \0 \0 \0 \0 \0 \0
--- /dev/urandom (بایت تصادفی؛ ۴ بایت):
4

/dev/null هر چه بنویسی را دور می‌ریزد (برای ساکت کردن خروجی)، /dev/zero بایت صفر بی‌پایان می‌دهد و /dev/urandom بایت تصادفی. این‌ها «فایل ویژه» هستند، و دیسک‌ها (/dev/sda، /dev/nvme0n1) هم همین‌طورند.

مثال ۹: «همه‌چیز فایل است»، نوع فایل‌ها

Section titled “مثال ۹: «همه‌چیز فایل است»، نوع فایل‌ها”

دستور file نوع هر چیزی را می‌گوید:

Terminal window
file /etc/hostname /dev/null /bin /usr/bin /etc/os-release
echo "--- یک برنامه‌ی واقعی:"
file /usr/bin/ls | cut -c1-80
خروجی
/etc/hostname: ASCII text
/dev/null: character special (1/3)
/bin: symbolic link to usr/bin
/usr/bin: directory
/etc/os-release: symbolic link to ../usr/lib/os-release
--- یک برنامه‌ی واقعی:
/usr/bin/ls: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynam

یک فایل متنی، یک دستگاه (character special)، لینک‌های نمادین، پوشه، و یک برنامه‌ی اجرایی (ELF). در لینوکس همه با یک رابطه‌ی ساده (باز کردن، خواندن، نوشتن) کار می‌کنند و برای همین ابزارهای متنی ساده (cat، grep، echo) روی همه‌چیز می‌چرخند: دستور cat /proc/cpuinfo با پردازنده حرف می‌زند.

پشت پرده: درخت واحد و mount

Section titled “پشت پرده: درخت واحد و mount”

در ویندوز هر دیسک حرف خودش را دارد. در لینوکس یک درخت واحد از / داریم و دیسک‌ها و پارتیشن‌ها را روی یکی از پوشه‌ها سوار (mount) می‌کنند. مثلاً دیسک دوم می‌تواند روی /data یا /mnt/backup سوار شود و برای برنامه‌ها فقط یک پوشه به نظر برسد. حتی /proc و /dev و /tmp (که ممکن است در حافظه باشد) همین‌طور «سوار شده»اند:

Terminal window
mount | grep -E " on (/proc|/dev|/sys|/tmp) " | cut -c1-90 | head -5
خروجی
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
bash: /proc/cpuinfo: Permission denied

نمایش دقیق‌تر و دیسک‌ها در درس منابع سیستم می‌آید. پس «مسیر یک فایل» فقط یک آدرس در درخت است، و اینکه روی کدام دیسک (یا در حافظه یا از راه شبکه) باشد، جزئیات پشت پرده است.

استاندارد FHS (Filesystem Hierarchy Standard) تعیین می‌کند چه چیزی کجا برود تا همه‌ی توزیع‌ها شبیه هم باشند؛ همین است که یک مقاله‌ی «تنظیمات nginx در /etc/nginx» روی Ubuntu و Debian و Fedora یکی است.

پوشه محتوا مثال
/ ریشه‌ی درخت —
/bin, /sbin, /lib میانبر به /usr/... (در Ubuntu جدید) /bin → usr/bin
/boot فایل‌های راه‌اندازی (هسته، GRUB) vmlinuz
/dev دستگاه‌ها /dev/null، /dev/sda
/etc تنظیمات (متنی) /etc/hostname، /etc/ssh/sshd_config
/home پوشه‌ی کاربرها /home/ali
/root پوشه‌ی خانه‌ی root —
/usr برنامه‌ها، کتابخانه‌ها، مستندات /usr/bin/ls
/usr/local نرم‌افزار نصب‌شده توسط خود مدیر —
/opt نرم‌افزار اضافه و مستقل /opt/google
/var داده‌ی متغیر /var/log، /var/lib
/tmp فایل‌های موقت —
/proc اطلاعات هسته و پروسه‌ها (مجازی) /proc/cpuinfo
/sys اطلاعات و تنظیمات دستگاه‌ها (مجازی) /sys/class/net
/run داده‌ی زمان اجرا (از آخرین بوت) /run/systemd
/mnt, /media محل سوار کردن دیسک‌ها /mnt/backup
/srv داده‌ی سرویس‌هایی که سرور ارائه می‌دهد /srv/www
دستور کار
ls / فهرست ریشه
ls -F / با نشانه‌ی نوع (/ پوشه، @ لینک)
ls -a ~ شامل فایل‌های مخفی
tree -L 1 -d / نمای درختی یک سطح، فقط پوشه‌ها
file X نوع فایل
cat /proc/cpuinfo اطلاعات پردازنده

/tmp ممکن است پاک شود (ریبوت یا پاکسازی خودکار). راه‌حل: فایل‌های ماندگار در /home یا /var/lib یا /srv.

۲) ویرایش /proc به‌عنوان فایل معمولی

Section titled “۲) ویرایش /proc به‌عنوان فایل معمولی”
Terminal window
echo hi > /proc/cpuinfo

فایل‌های /proc اجازه‌ی نوشتن معمولی نمی‌دهند (Permission denied)؛ بعضی (مثل /proc/sys) با root برای تنظیم هسته به کار می‌روند. راه‌حل: /proc را فقط بخوان (مگر آگاهانه و با مستندات).

۳) فکر کردن «/etc فقط برای root است»

Section titled “۳) فکر کردن «/etc فقط برای root است»”
Terminal window
cat /etc/hostname
ls -l /etc/shadow
خروجی
pc
-rw-r----- 1 root shadow 665 Oct 3 19:21 /etc/shadow

خواندن بیشتر فایل‌های /etc برای همه آزاد است (مثل hostname)، ولی بعضی مثل /etc/shadow (رمزها) محدود به root‌اند (دقت به دسترسی -rw-r-----). راه‌حل: هر وقت Permission denied دیدی دسترسی‌ها را با ls -l بخوان (درس دسترسی‌ها).

۴) نگاه کردن در مسیر ویندوزی

Section titled “۴) نگاه کردن در مسیر ویندوزی”
Terminal window
ls C:\Users
خروجی
ls: cannot access 'C:Users': No such file or directory

در لینوکس درایو C: نیست و جداکننده / است (نه \). راه‌حل: مسیرها /home/ali/.... و حروف کوچک/بزرگ مهم‌اند (/Home پوشه‌ی دیگری است).

۵) فراموش کردن -a و گم شدن فایل‌های مخفی

Section titled “۵) فراموش کردن -a و گم شدن فایل‌های مخفی”
Terminal window
echo "ls معمولی:"; ls ~
echo "--- ls -a:"; ls -a ~
خروجی
ls معمولی:
--- ls -a:
.
..
.bash_logout
.bashrc
.profile

پوشه‌ی خانه‌ی این محیط تازه است، پس ls ~ هیچ‌چیز نشان نمی‌دهد؛ ولی ls -a سه فایل تنظیمات مخفی را نشان می‌دهد. ممکن است فکر کنی پوشه خالی است در حالی که فایل‌های مهم (مثل .bashrc) آنجاست. راه‌حل: ls -a.

✎ تمرینآسان

فایل تنظیمات hostname را پیدا کن و محتوایش را ببین؛ بگو در کدام پوشه است و چرا.

دیدن جواب
Terminal window
ls -l /etc/hostname
cat /etc/hostname
خروجی
-rw-r--r-- 1 root root 3 Oct 3 08:33 /etc/hostname
pc

در /etc است چون تنظیمات سیستم همان‌جا نگه داشته می‌شود.

✎ تمرینمتوسط

تمرین اصلی: برای هر مورد پوشه‌ی درست را با یک دستور نشان بده: (۱) لاگ‌های سیستم (۲) تنظیمات SSH (۳) دستور ls (۴) تعداد هسته‌های CPU. برای هر کدام فقط یک ls یا cat یا which بنویس.

دیدن جواب
Terminal window
echo "۱) لاگ‌ها:"; ls /var/log | head -3
echo "۲) تنظیمات SSH:"; ls /etc/ssh | head -3
echo "۳) برنامه‌ی ls:"; which ls
echo "۴) هسته‌های CPU:"; grep -c ^processor /proc/cpuinfo
خروجی
۱) لاگ‌ها:
README
alternatives.log
apt
۲) تنظیمات SSH:
moduli
ssh_config
ssh_config.d
۳) برنامه‌ی ls:
/usr/bin/ls
۴) هسته‌های CPU:
8
✎ تمرینسخت

یک «گزارش نقشه‌ی سیستم» بساز: برای هر یک از پوشه‌های /etc، /var، /usr، /home، /tmp، /proc تعداد آیتم‌های داخلش را چاپ کن (با ls | wc -l) و برای هر کدام یک جمله‌ی توضیح بنویس. از یک حلقه‌ی ساده‌ی for استفاده کن.

دیدن جواب
Terminal window
for d in /etc /var /usr /home /tmp /proc; do
printf "%-6s %4s آیتم\n" "$d" "$(ls $d | wc -l)"
done
خروجی
/etc 139 آیتم
/var 12 آیتم
/usr 9 آیتم
/home 2 آیتم
/tmp 27 آیتم
/proc 65 آیتم

مثلاً /proc به‌خاطر پروسه‌های در حال اجرا (پوشه‌های عددی) تعدادش نسبتاً زیاد است و /home فقط کاربرهای عادی را دارد.

؟ آزمونک
  1. تنظیمات سیستم و برنامه‌ها معمولاً در کدام پوشه است؟

  2. لاگ‌ها و داده‌ی متغیر (مثل دیتابیس) کجاست؟

  3. /proc چیست؟

  4. نوشتن چیزی در /dev/null چه می‌کند؟

  5. اصل «همه‌چیز فایل است» یعنی…

  6. فایل‌هایی که با نقطه شروع می‌شوند را کدام flag نشان می‌دهد؟

  • لینوکس یک درخت واحد از / دارد (نه درایو جدا)؛ دیسک‌ها روی پوشه‌ها mount می‌شوند.
  • /etc تنظیمات، /var داده‌ی متغیر (لاگ و دیتابیس)، /home کاربرها، /usr برنامه‌ها، /tmp موقت، /opt نرم‌افزار مستقل.
  • /proc و /sys نمای زنده‌ی هسته‌اند و /dev دستگاه‌ها؛ /dev/null سیاه‌چاله است.
  • همه‌چیز فایل است: برای همین ابزارهای ساده روی همه‌چیز کار می‌کنند.
  • فایل‌های مخفی با . شروع می‌شوند و با ls -a دیده می‌شوند.
  • استاندارد FHS چیدمان را بین توزیع‌ها یکسان نگه می‌دارد.
برگه‌ی تقلب این درس
دستورکاری که می‌کند
ls /فهرست ریشه
ls -F /با نشانه‌ی نوع
ls /etcتنظیمات
cat /etc/hostnameنام ماشین
ls /var/logلاگ‌ها
cat /proc/cpuinfoاطلاعات CPU
ls -a ~پوشه‌ی خانه با فایل‌های مخفی
tree -L 1 -d /درخت یک‌سطحی از پوشه‌ها
file /dev/nullنوع فایل