صفحهکلید و نمادها برای کار با ترمینال
اسم و جای نمادهایی که در دستورها زیاد میبینی (~ / \ | ' " ` $ # & * > <)، عوض کردن زبان صفحهکلید، و تلهی کاراکترهای شبیه هم: عدد فارسی، خطتیرهی بلند، کوتیشن کج و فاصلهی نشکن که هنگام کپی از تلگرام و Word دستور را خراب میکنند.
- حدود ۱۵ دقیقه مطالعه
- ۶ مثال اجراشده
- ۳ تمرین با جواب
- مقدماتی (از صفر مطلق)
- بهروزرسانی: ۲۹ مهر ۱۴۰۵
توی این درس یاد میگیری نمادهایی را که در همهی دستورها میبینی (مثل ~، /، |، $ و >) به اسم بشناسی و بدانی روی صفحهکلید کجا هستند، زبان صفحهکلید را سریع عوض کنی، و مهمتر از همه: کاراکترهای شبیه هم را تشخیص بدهی. عدد فارسی ۵ با عدد انگلیسی 5، خطتیرهی بلند – با خطتیرهی معمولی -، و کوتیشن کج ‘ با کوتیشن صاف ' برای چشم تو یکیاند ولی برای کامپیوتر نه. این درس جلوی ساعتها گیج شدن را میگیرد.
مسئله: «دقیقاً همان را نوشتم، ولی کار نمیکند!»
Section titled “مسئله: «دقیقاً همان را نوشتم، ولی کار نمیکند!»”یک دستور را از یک آموزش، پیام تلگرام یا فایل Word کپی میکنی، در ترمینال میچسبانی و خطا میگیری. دوباره نگاه میکنی: حرفبهحرف همان است. ولی نیست. در درس قبل دیدی هر حرف برای کامپیوتر یک عدد (کد یونیکد و چند بایت) است. بعضی حرفها شکل یکسان و کد متفاوت دارند، و ترمینال فقط کد را میبیند.
تشبیه: دوقلوهای همسان
Section titled “تشبیه: دوقلوهای همسان”کاراکترهای شبیه هم مثل دوقلوهای همسان هستند: از دور یکیاند، ولی کد ملیشان (کد یونیکد) فرق دارد. نگهبان ساختمان (ترمینال) فقط کارت شناسایی را نگاه میکند، نه صورت را. پس اگر بهجای دوقلوی «درست»، دوقلوی «اشتباه» را بفرستی، راهش نمیدهد، هر چقدر هم شبیه باشد.
نمادهایی که باید بشناسی
Section titled “نمادهایی که باید بشناسی”اینها را در همهی دورهها میبینی. لازم نیست معنیشان را حفظ کنی (هر کدام در درس خودش میآید)؛ فقط اسم و جای هر کدام را بدان تا وقتی آموزش گفت «پایپ بزن» یا «تیلدا»، معطل نشوی.
| نماد | اسم انگلیسی | اسم رایج فارسی | کجای صفحهکلید | کاربرد نمونه |
|---|---|---|---|---|
~ |
tilde | تیلدا | گوشهی بالا چپ، با Shift | پوشهی خانه: cd ~ |
` |
backtick | بکتیک | همان کلید تیلدا، بدون Shift | Markdown و بعضی دستورها |
/ |
slash | اسلش | کنار Shift راست | جداکنندهی مسیر در لینوکس: /home/ali |
\ |
backslash | بکاسلش | بالای Enter | جداکنندهی مسیر در ویندوز: C:\Users |
| |
pipe | پایپ | همان کلید بکاسلش، با Shift | خروجی یک دستور به دیگری |
- |
hyphen / dash | خطتیره، منفی | کنار عدد ۰ | گزینهها: ls -l |
_ |
underscore | زیرخط | همان کلید، با Shift | در اسم فایل: my_file.txt |
' |
single quote | کوتیشن تکی | کنار Enter | echo 'متن' |
" |
double quote | کوتیشن دوتایی | همان کلید، با Shift | echo "متن" |
$ |
dollar | دلار | Shift+4 | متغیر: $HOME |
# |
hash | هشتگ | Shift+3 | توضیح در اسکریپت؛ پرامپت root |
& |
ampersand | اَند | Shift+7 | اجرا در پسزمینه |
* |
asterisk / star | ستاره | Shift+8 | «هر چیزی»: *.txt |
> و < |
greater / less than | بزرگتر و کوچکتر | Shift+نقطه و Shift+ویرگول | فرستادن خروجی به فایل |
[ ] و { } و ( ) |
brackets, braces, parentheses | براکت، آکولاد، پرانتز | کنار P و عددهای ۹ و ۰ | گروهبندی و الگوها |
. |
dot | نقطه | پایین راست | پوشهی فعلی؛ فایل پنهان |
مثالهای عملی
Section titled “مثالهای عملی”دستورهای این درس روی Ubuntu اجرا شدهاند و فعلاً فقط ببین و بخوان؛ در دورهی لینوکس همه را خودت امتحان میکنی. نکتهی اصلی، پیام خطاهاست: یاد بگیری از روی آنها کاراکتر اشتباه را پیدا کنی.
مثال ۱: عدد فارسی
Section titled “مثال ۱: عدد فارسی”ترمینال عدد فارسی را عدد نمیداند. sleep باید چند ثانیه صبر کند؛ با عدد فارسی:
sleep ۵sleep: invalid time interval ‘۵’Try 'sleep --help' for more information.invalid time interval یعنی «این را بهعنوان مدت زمان نمیشناسم». برای کامپیوتر ۵ فارسی یک حرف است، نه عدد. حتی حساب ساده هم کار نمیکند:
echo $((۲+۲))bash: ۲+۲: syntax error: operand expected (error token is "۲+۲")با عدد انگلیسی (echo $((2+2))) جواب 4 است. قاعده: در دستورها، آدرس IP، شمارهی پورت و هر جای فنی، فقط عدد انگلیسی.
مثال ۲: خطتیرهی بلند
Section titled “مثال ۲: خطتیرهی بلند”برنامههایی مثل Word و تلگرام گاهی - یا -- را خودکار به خطتیرهی بلند (– یا —) تبدیل میکنند:
ls –lls: cannot access '–l': No such file or directoryls گزینهی -l را نشناخت و –l را اسم یک فایل فرض کرد. هر وقت خطایی دیدی که یک «گزینه» را در کوتیشن بهعنوان اسم فایل آورده، به خطتیره شک کن.
مثال ۳: کوتیشن کج
Section titled “مثال ۳: کوتیشن کج”کوتیشن صاف (' و ") برای shell معنی دارد. کوتیشن کج (‘ ’ و “ ”) که ویرایشگرهای متن بهجایش میگذارند، برای shell فقط یک حرف معمولی است:
echo "سلام دنیا"echo “سلام دنیا”ls ‘a.txt’سلام دنیا“سلام دنیا”ls: cannot access '‘a.txt’': No such file or directoryبا کوتیشن صاف، echo فقط متن را چاپ کرد. با کوتیشن کج، خود علامتها هم چاپ شدند (یعنی shell آنها را کوتیشن نفهمید)، و ls دنبال فایلی گشت که اسمش واقعاً با ‘ شروع میشود.
مثال ۴: فاصلهی نشکن (فاصلهی نامرئی)
Section titled “مثال ۴: فاصلهی نشکن (فاصلهی نامرئی)”این از همه موذیتر است. بعضی برنامهها بهجای فاصلهی معمولی یک فاصلهی نشکن (non-breaking space) میگذارند که اصلاً دیده نمیشود:
bash: ls -l: command not foundshell کل ls -l را یک کلمه دید (چون فاصلهی واقعی بینشان نبود) و دنبال برنامهای با اسم «ls -l» گشت. نشانهاش همین است: command not found برای دستوری که مطمئنی وجود دارد، و اسمی که در خطا آمده خودش فاصله دارد.
خطای «bash: ls -l: command not found» به احتمال زیاد یعنی…
جواب درست: بین ls و -l یک فاصلهی نامرئی غیرعادی (مثلاً فاصلهی نشکن) هست
اگر فاصلهی واقعی بود، shell فقط اسم ls را دنبالش میگشت؛ اینکه کل «ls -l» را اسم دستور فرض کرده یعنی فاصله واقعی نیست.
مثال ۵: کاراکترها را با چشم کامپیوتر ببین
Section titled “مثال ۵: کاراکترها را با چشم کامپیوتر ببین”دستور od بایتهای واقعی هر متن را (به مبنای ۱۶؛ درس بیت و بایت) نشان میدهد. دوقلوها را کنار هم بگذار:
echo -n "-" | od -An -tx1echo -n "–" | od -An -tx1echo -n "5" | od -An -tx1echo -n "۵" | od -An -tx1 2d e2 80 93 35 db b5خطتیرهی معمولی یک بایت است (2d)، خطتیرهی بلند سه بایت (e2 80 93). عدد 5 انگلیسی یک بایت (35)، و ۵ فارسی دو بایت (db b5). از دید کامپیوتر اینها هیچ شباهتی به هم ندارند.
مثال ۶: تیلدا و پوشهی خانه
Section titled “مثال ۶: تیلدا و پوشهی خانه”~ میانبر «پوشهی خانهی من» است، ولی فقط وقتی تنها و اول یک کلمه باشد و داخل کوتیشن نباشد:
echo ~echo "~"/home/ali~بدون کوتیشن، shell ~ را به /home/ali تبدیل کرد؛ داخل کوتیشن، همان علامت ماند. این را در درس ترمینال و shell دقیقتر میبینی.
پشت پرده: چرا ترمینال اینقدر سختگیر است؟
Section titled “پشت پرده: چرا ترمینال اینقدر سختگیر است؟”یک انسان وقتی ۵ یا 5 میبیند، معنی را میفهمد. ولی برنامهها متن را بایتبهبایت مقایسه میکنند: ls دنبال دقیقاً بایت 2d میگردد تا بفهمد یک گزینه شروع شده، و shell دنبال دقیقاً بایت 20 (فاصله) یا 27 (کوتیشن) میگردد تا دستور را به کلمهها خرد کند. این سختگیری عیب نیست: باعث میشود رفتار دستورها قابل پیشبینی باشد. فقط کافی است تو بدانی چه چیزی را به آن میدهی.
برای همین در این دورهها همهی دستورها داخل بلوک کد نوشته شدهاند: بلوک کد هیچ کاراکتری را «زیبا» نمیکند و همان بایتهای درست را نگه میدارد.
جدولهای مرجع
Section titled “جدولهای مرجع”| شبیهسازیشده | درست | نشانه در پیام خطا |
|---|---|---|
۰۱۲۳۴۵۶۷۸۹ (فارسی) |
0123456789 |
invalid، syntax error، operand expected |
– یا — |
- |
گزینهای مثل '–l' در خطا بهعنوان اسم فایل |
‘ ’ و “ ” |
' و " |
خود علامتها در خروجی چاپ میشوند |
| فاصلهی نشکن | فاصلهی معمولی | command not found با اسمی که فاصله دارد |
ي و ك عربی |
ی و ک فارسی |
جستجو و مقایسه جواب نمیدهد (درس قبل) |
اشتباهات رایج
Section titled “اشتباهات رایج”۱) کپی دستور از جای نامطمئن
Section titled “۱) کپی دستور از جای نامطمئن”متن پیامرسانها، Word و بعضی سایتها کاراکترها را «زیبا» میکنند. راهحل: دستور را از بلوک کد کپی کن، یا خودت تایپش کن (برای یاد گرفتن، تایپ کردن خودش بهتر است).
۲) تایپ با صفحهکلید فارسی
Section titled “۲) تایپ با صفحهکلید فارسی”اگر زبان صفحهکلید فارسی بماند، بهجای l حرف «م» و بهجای s حرف «س» تایپ میشود و خطای command not found برای اسمی فارسی میگیری. راهحل: قبل از ترمینال، زبان را انگلیسی کن.
۳) اشتباه گرفتن / و \
Section titled “۳) اشتباه گرفتن / و \”لینوکس و اینترنت (آدرس سایتها) از / استفاده میکنند و ویندوز از \. cd \home\ali در لینوکس کار نمیکند. راهحل: در لینوکس همیشه /.
۴) فراموش کردن Shift برای نمادها
Section titled “۴) فراموش کردن Shift برای نمادها”| و " و _ و ~ همه با Shift میآیند؛ بدون Shift، \ و ' و - و ` تایپ میشود که معنی کاملاً دیگری دارند. راهحل: بعد از تایپ، قبل از Enter، یک بار دستور را نگاه کن.
اسم این نمادها را بنویس و بگو روی صفحهکلید با کدام کلید میآیند: ~، |، $، \، _.
دیدن جواب
~تیلدا: گوشهی بالا چپ، با Shift.|پایپ: کلید بالای Enter (همان بکاسلش)، با Shift.$دلار: Shift+4.\بکاسلش: کلید بالای Enter، بدون Shift._زیرخط: کلید کنار ۰، با Shift.
(روی بعضی لپتاپها جای بکاسلش و پایپ فرق میکند؛ کنار Shift چپ یا کنار Backspace.)
تمرین اصلی: این سه خطا را بخوان و برای هر کدام بگو کدام کاراکتر اشتباه بوده و درستش چیست.
۱) ping: ۸.۸.۸.۸: Name or service not known۲) ls: cannot access '–la': No such file or directory۳) bash: cd /tmp: command not foundدیدن جواب
۱) آدرس IP با عدد فارسی نوشته شده. ping آن را اسم یک سایت فرض کرده و پیدایش نکرده. درست: ping 8.8.8.8.
۲) خطتیرهی بلند (–) بهجای -. ls آن را اسم فایل فرض کرده. درست: ls -la.
۳) بین cd و /tmp یک فاصلهی نشکن هست، برای همین shell کل «cd /tmp» را یک کلمه دیده. (اگر فاصله درست بود، shell دستور cd را پیدا میکرد؛ اینکه کل «cd /tmp» را اسم یک دستور فرض کرده یعنی فاصله واقعی نیست.) درست: دستور را دوباره خودت تایپ کن.
توضیح بده چرا echo -n "۵" | od -An -tx1 دو بایت چاپ میکند ولی echo -n "5" | od -An -tx1 یک بایت، و این به کدام موضوع درس «متن و encoding» برمیگردد.
دیدن جواب
عدد 5 انگلیسی جزو ۱۲۸ حرف اول (ASCII) است و در UTF-8 فقط یک بایت (35 در مبنای ۱۶، یعنی ۵۳) میگیرد. ۵ فارسی کد یونیکد U+06F5 دارد که خارج از ASCII است، پس UTF-8 آن را با دو بایت (db b5) ذخیره میکند. این همان مطلب درس قبل است: تعداد بایتها با تعداد حرفها یکی نیست، و حرفهای غیرانگلیسی در UTF-8 بیش از یک بایت میگیرند. چون بایتها کاملاً متفاوتاند، هیچ برنامهای ۵ را با 5 یکی نمیداند.
آزمونک
Section titled “آزمونک”علامت | چه نام دارد؟
جواب درست: پایپ (pipe)
پایپ خروجی یک دستور را به دستور دیگر میدهد؛ معمولاً با Shift و کلید بکاسلش.
چرا sleep ۵ کار نمیکند؟
جواب درست: ۵ فارسی برای کامپیوتر یک حرف است، نه عدد
در دستورها فقط عدد انگلیسی.
خطای «cannot access '–l'» نشانهی چیست؟
جواب درست: خطتیرهی بلند بهجای خطتیرهی معمولی
گزینهای که در کوتیشن بهعنوان اسم فایل آمده یعنی خطتیره درست نیست.
جداکنندهی مسیر در لینوکس کدام است؟
جواب درست: /
لینوکس /، ویندوز \.
امنترین راه برداشتن یک دستور از یک آموزش؟
جواب درست: کپی از بلوک کد یا تایپ دستی
بلوک کد کاراکترها را تغییر نمیدهد.
جمعبندی
Section titled “جمعبندی”- اسم و جای نمادهای اصلی را بدان: تیلدا
~، اسلش/، بکاسلش\، پایپ|، دلار$، ستاره*، کوتیشنها'و". - قبل از ترمینال صفحهکلید را انگلیسی کن (
Win+Space،Ctrl+Space،Super+Space). - عدد فارسی، خطتیرهی بلند، کوتیشن کج و فاصلهی نشکن برای چشم شبیهاند ولی برای کامپیوتر کاملاً متفاوت.
- پیام خطا سرنخ میدهد: گزینهای که اسم فایل شده، علامتهایی که چاپ شدهاند، یا
command not foundبا اسمی که فاصله دارد. - دستورها را از بلوک کد کپی کن یا خودت تایپ کن.
| دستور | کاری که میکند |
|---|---|
~ | تیلدا: پوشهی خانه |
/ | اسلش: جداکنندهی مسیر در لینوکس |
| | پایپ: خروجی به دستور بعدی |
$ | دلار: مقدار متغیر |
* | ستاره: هر چیزی |
' و " | کوتیشن تکی و دوتایی (صاف، نه کج) |
Win+Space / Ctrl+Space | عوض کردن زبان صفحهکلید |
echo -n "x" | od -An -tx1 | دیدن بایتهای واقعی یک کاراکتر |