کاراکترهای خاص در لینوکس و کاربرد آن ها
کاراکترهای خاص در لینوکس
در این مقاله به معرفی کاراکترهای خاص در لینوکس، Bash و یا سیستمهای مشابه یونیکس خواهیم پرداخت. منظور از کاراکترهای ویژه (~، *، |، > و غیره) میباشد. کاراکترهای خاص مجموعهای از نمادها هستند که Bash به دو روش مختلف با آنها برخورد میکند. وقتی شما آنها را در Bash وارد میکنید، آنها به عنوان دستورات عمل میکنند و به پوسته میگویند که یک عملکرد خاصی انجام دهد. آنها را میتوان به عنوان دستورات تک کاراکتری در نظر گرفت.
گاهی اوقات، احتمال دارد که فقط به چاپ یک کاراکتر نیاز داشته باشید و خواهان این باشید که آن کاراکتر به عنوان یک نماد جادویی عمل نکند. در چنین مواقعی، روشی وجود دارد که شما میتوانید از یک کاراکتر برای نمایش خود آن به جای اجرای ویژگی خاص آن استفاده کنید. در ادامه، ما کاراکترهای خاص و نحوه استفاده از آنها را بررسی خواهیم کرد.
کاراکتر ~ مخفف Home Directory
تیلدا (~) یا tilde مخفف دایرکتوری اصلی شما است. این بدان معناست که شما مجبور نیستید مسیر کامل دایرکتوری اصلی خود را در دستورات تایپ کنید. در هر کجای فایل سیستم که هستید، می توانید از این دستور برای رفتن به فهرست اصلی خود استفاده کنید:
cd ~
همچنین می توانید از این دستور با مسیرهای نسبی استفاده کنید. به عنوان مثال، اگر جایی در فایل سیستم هستید که در دایرکتوری اصلی شما نیست و می خواهید به دایرکتوری kaliboys که خود آن نیز در دایرکتوری site قرار دارد وارد شوید، از tilde برای انجام این کار استفاده کنید:
cd ~/site/kaliboys
کاراکتر . مخفف Current Directory
نقطه (.) یا dot نشان دهنده دایرکتوری فعلی است. اگر از آرگومان -a
در دستور ls
استفاده کنید، کاراکتر dot را در فهرست های دایرکتوری مشاهده می کنید.
ls -a
همچنین می توانید از نقطه در دستورات برای نشان دادن مسیر دایرکتوری فعلی خود استفاده کنید. به عنوان مثال، اگر می خواهید یک اسکریپت را از دایرکتوری فعلی اجرا کنید، آن را به این صورت صدا کنید:
./script-kaliboys.sh
این به Bash میگوید که در فهرست فعلی فایل را جستجو کند. به این ترتیب، دایرکتوری های موجود در مسیر شما را برای مطابقت اجرایی یا اسکریپت جستجو نمی کند.
کاراکتر .. مخفف Parent Directory
نقطه دوتایی (..) یا double dot نشان دهنده دایرکتوری والد دایرکتوری فعلی شما است. شما می توانید از این برای بالا رفتن یک سطح در درخت دایرکتوری استفاده کنید.
cd ..
همچنین می توانید از این دستور با مسیرهای نسبی استفاده کنید. به عنوان مثال، اگر می خواهید یک سطح در درخت دایرکتوری بالا بروید و سپس دایرکتوری دیگری را در آن سطح وارد کنید.
همچنین میتوانید از این تکنیک برای انتقال سریع به دایرکتوری در همان سطح درخت دایرکتوری با فهرست فعلی خود استفاده کنید. شما یک سطح بالا می روید و سپس یکی را به دایرکتوری دیگری پایین می آورید.
cd ../gc_help
کاراکتر / مخفف Path Directory Separator
کاراکتر (/) که اغلب فقط اسلش نامیده می شود برای جدا کردن دایرکتوری ها در نام مسیر استفاده کنید.
ls ~/site/kaliboys
علامت اسلش نشان دهنده کوتاه ترین مسیر دایرکتوری ممکن است. از آنجایی که همه چیز در درخت دایرکتوری لینوکس از دایرکتوری ریشه شروع می شود، می توانید از این دستور برای انتقال سریع به دایرکتوری ریشه استفاده کنید:
cd /
کاراکتر # مخفف Comment or Trim Strings
علامت # یا هشتک در برنامهنویسی و اسکریپتنویسی در محیطهای شل مانند Bash، به شما این امکان را میدهد تا توضیحاتی بنویسید یا از یک رشته بخشی را حذف کنید. این کارها به شما کمک میکنند کدهای خود را توضیح دهید و به سادگی اطلاعات اضافی را از رشتهها حذف کنید.
# This is a comment about a variable's value example_variable="Example value"
استفاده از علامت هش برای نوشتن توضیحات در کد یک شیوه عالی برای توضیح عملکرد کد به همراه گذاشتن نکات مهم است. این توضیحات توسط شل نادیده گرفته میشوند و تنها به منظور توضیحات برای برنامهنویس یا تیم توسعه انسانی هستند.
شما همچنین میتوانید از علامت هشتک برای قطع کردن بخشی از یک رشته استفاده کنید. این کار باعث حذف متنی خاص از ابتدای رشته میشود. برای مثال، فرض کنید میخواهیم “Hello, World!” را به “World!” تغییر دهیم.
example_string="Hello, World!" echo ${example_string#Hello, }
در این مثال، ما از علامت هش برای حذف “Hello, ” از ابتدای رشته استفاده کردیم و نتیجه تنها “World!” خواهد بود. این تغییر تنها در خروجی دستور echo تاثیر دارد و متغیر اصلی تغییر نمیکند.
کاراکتر ? مخفف Single Character Bash Wildcard
پوسته Bash از سه علامت عام پشتیبانی می کند که یکی از آنها علامت سوال (؟) است. شما برای جایگزینی کاراکترها در قالب های نام فایل از حروف عام استفاده می کنید. نام فایلی که حاوی یک علامت عام است، الگویی را تشکیل میدهد که با طیفی از نامهای فایل مطابقت دارد، نه فقط با یکی.
علامت سوال دقیقا یک کاراکتر را نشان می دهد. الگوی نام فایل زیر را در نظر بگیرید:
ls kaliboys?.txt
این به معنای “فهرست کردن هر فایلی با نامی است که با “kaliboys” شروع می شود و هر کاراکتری قبل از پسوند نام فایل دنبال می شود.”
همچنین می توانید از علامت سوال برای یافتن تمام فایل هایی با تعداد کاراکتر مشخص در نام فایل ها استفاده کنید. در این قسمت تمام فایل های متنی که دقیقاً شامل پنج کاراکتر در نام فایل هستند فهرست می شود:
ls ?????.txt
کاراکتر * مخفف Character Sequence Bash Wildcard
می توانید از علامت ستاره (*) برای هر دنباله ای از کاراکترها، از جمله بدون کاراکتر استفاده کنید. الگوی نام فایل زیر را در نظر بگیرید:
ls kaliboys*
این دستور با تمام فایل هایی که «source» نامیده می شوند، صرف نظر از پسوند فایل مطابقت دارد.
ls source.*
کاراکتر [] مخفف Character Set Wildcard
همانطور که در بالا توضیح داده شد، شما از علامت سوال برای نمایش هر کاراکتر و از ستاره برای نشان دادن هر دنباله ای از کاراکترها (شامل بدون کاراکتر) استفاده می کنید.
به عنوان یک مثال ساده، فرض کنید که شما میخواهید تمام فایلهایی که نام آنها با “image” آغاز میشود و دارای پسوندهای “jpg” یا “png” هستند را جستجو کنید. شما میتوانید از کاراکترهای مجموعه کاراکتری به این صورت استفاده کنید:
ls *[iI][mM][aA][gG][eE]*.[jJ][pP][gG] *[iI][mM][aA][gG][eE]*.[pP][nN][gG]
در اینجا، [iI][mM][aA][gG][eE] نمایانگر هر حرفی از کاراکترهای “image” یا “Image” است و [jJ][pP][gG] و [pP][nN][gG] به ترتیب نمایانگر پسوندهای “jpg” و “png” هستند. این دستور موجب نمایش تمام فایلهایی میشود که با “image” آغاز میشوند و پسوند آنها “jpg” یا “png” است.
کاراکتر ; مخفف Shell Command Separator
می توانید هر تعداد دستور را که دوست دارید در خط فرمان تایپ کنید، به شرطی که هر یک از آنها را با یک نقطه ویرگول (;) جدا کنید. در مثال زیر این کار را انجام خواهیم داد:
ls > kaliboys.txt; wc -l kaliboys.txt; rm kaliboys.txt
توجه داشته باشید که فرمان دوم حتی در صورت عدم موفقیت اولین فرمان اجرا می شود، حتی در صورت عدم موفقیت فرمان دوم اجرا می شود و به همین ترتیب.
اگر می خواهید دنباله اجرا را در صورت عدم موفقیت یک فرمان متوقف کنید، به جای نقطه ویرگول از علامت (&&) که به معنیه and می باشد، استفاده کنید:
cd ./doesntexist && cp ~/Documents/reports/*.
کاراکتر & مخفف Background Process
کاراکتر “&” وظیفه ای جالب در لینوکس و محیط ترمینال دارد. این کاراکتر به شما اجازه میدهد تا یک فرآیند را به عنوان پسزمینه اجرا کنید. وقتی یک دستور را در ترمینال لینوکس وارد میکنید و آن دستور اجرا میشود، پس از اتمام آن، شما به خط فرمان باز میگردید تا دستورات دیگر را وارد کنید. این عملیات به طور معمول در یک یا دو لحظه انجام میشود.
اما وقتی یک برنامه بزرگتر مانند “gedit” را اجرا میکنید، تا زمانی که برنامه بسته نشود، ترمینال شما قفل میشود و نمیتوانید از آن برای اجرای دستورات دیگر استفاده کنید.
با استفاده از کاراکتر “&” میتوانید برنامه را به عنوان یک فرآیند پسزمینه اجرا کنید. به عبارت سادهتر، شما میتوانید برنامه را اجرا کنید و به استفاده از ترمینال خود ادامه دهید. برای انجام این کار، شما کافی است که کاراکتر “&” را به انتهای دستور اضافه کنید. به عنوان مثال:
gedit command_address.page &
وقتی این دستور را اجرا میکنید، Bash شماره فرآیند راهاندازی شده را به شما نشان میدهد و سپس شما را به خط فرمان باز میگرداند. از این پس، میتوانید به استفاده از ترمینال خود برای وارد کردن دستورات دیگر ادامه دهید و برنامه “gedit” به عنوان یک پسزمینه (background) اجرا میشود.
کاراکتر > مخفف Input Redirection
کاراکتر “>” در محیط لینوکس به عنوان “ورودی هدایت” شناخته میشود. این کاراکتر به شما این امکان را میدهد که دادهها را از یک فایل به عنوان ورودی به یک دستور ارسال کنید.
بسیاری از دستورات لینوکس میتوانند ورودیهای خود را از دو منبع مختلف دریافت کنند:
1. از یک فایل: شما میتوانید دادهها را از یک فایل خوانده و به عنوان ورودی به یک دستور ارسال کنید. برای انجام این کار، از کاراکتر “>” استفاده میکنید. به عنوان مثال:
sort < input.txt
در این مثال، دستور “sort” دادههای موجود در فایل “input.txt” را میخواند و آنها را مرتب میکند.
2. از خروجی یک دستور دیگر: کاراکتر “>” به شما امکان میدهد دادهها را از یک فایل به عنوان ورودی به یک دستور ارسال کنید. برای مثال:
wc -l < input.txt
در این مثال، دستور “wc -l” تعداد خطوط موجود در فایل “input.txt” را شمارش میکند. ورودی این دستور از فایل “input.txt” گرفته میشود و نتایج در ترمینال نمایش داده میشود.
کاراکتر < مخفف Output Redirection
شما میتوایند از کاراکتر “<” برای تغییر مسیر (یا هدایت) خروجی یک دستور به یک فایل استفاده میکنید. این کاراکتر به شما امکان میدهد نتایج یک دستور را در یک فایل ذخیره کنید.
در مثال زیر، ابتدا دستور “ls” اجرا میشود و خروجی آن (لیست فایلها و پوشهها) با استفاده از “<” به فایلی به نام “files.txt” هدایت میشود:
ls > files.txt
سپس با استفاده از دستور “cat” میتوانیم محتوای فایل “files.txt” را در ترمینال نمایش دهیم:
cat files.txt
در مثال دیگر، از شماره 2 و “<” برای تغییر مسیر خروجی پیامهای خطا به فایل “errors.txt” استفاده میشود:
wc doestexist.txt 2> errors.txt
اگر فایل “doestexist.txt” وجود نداشته باشد، هر پیام خطای مربوطه در فایل “errors.txt” ذخیره میشود. سپس با دستور “cat” میتوانید محتوای فایل “errors.txt” را مشاهده کنید:
cat errors.txt
این کارها به شما امکان میدهند نتایج دستورات را به فایلها منتقل کنید و به جای نمایش در ترمینال، آنها را در فایلها ذخیره کنید تا بعداً بتوانید آنها را بررسی کنید یا به دیگران ارسال کنید.
کاراکتر | مخفف Pipe
کاراکتر “|” یا پایپ در محیط لینوکس به شما امکان میدهد تعدادی دستور را به یکدیگر متصل کرده و خروجی یک دستور را به عنوان ورودی به دستور بعدی ارسال کنید. این عملیات به شما اجازه میدهد دستورات مختلف را با هم ترکیب کرده و نتایج پیچیدهتری از دادهها به دست آورید.
در مثال زیر، ما سه دستور را با کمک کاراکتر پایپ به یکدیگر متصل کردهایم:
cat words.txt | grep [cC] | sort -r
cat words.txt
: این دستور محتوای فایل “words.txt” را نمایش میدهد.grep [cC]
: این دستور از محتوای خروجی دستور قبلی (cat) تمام خطوطی را استخراج میکند که حاوی حروف “c” کوچک یا بزرگ باشند.sort -r
: این دستور نتایج استخراج شده توسط دستور grep را مرتب میکند. آرگومان “-r” به معنای مرتبسازی به صورت معکوس (نزولی) است.
شما تمام خطوطی را که حاوی حروف “c” کوچک یا بزرگ باشند را از فایل “words.txt” استخراج میکنید، سپس این خطوط را به ترتیب معکوس (نزولی) نمایش میدهید. این به شما امکان میدهد به سادگی دادههای خود را فیلتر کرده و مرتب سازی کنید.
کاراکتر ! مخفف Pipeline logical NOT and History Operator
علامت تعجب (!) در لینوکس به عنوان عملگر منطقی “NOT” و همچنین برای دسترسی به تاریخچه دستورات استفاده میشود.
1. عملگر منطقی “NOT”: در سیستمهای لینوکس و دستورات خط فرمان، از علامت تعجب (!) به عنوان “NOT” منطقی استفاده میشود. به عبارت ساده، اگر شما یک دستور را با این علامت شروع کنید، عملی که باعث میشود دستور نادرست باشد، درست میشود و برعکس
2. دسترسی به تاریخچه دستورات: شما میتوانید از علامت تعجب (!) برای دسترسی به تاریخچه دستورات خود استفاده کنید. برای مثال:
!!
: این دستور آخرین دستور را اجرا میکند. به عبارت دیگر، دستوری که به تازگی اجرا شده است.!24
: این دستور، دستور با شماره 24 از تاریخچه دستورات را اجرا میکند. شماره دستور معمولاً توسط دستور history نمایش داده میشود.
کاراکتر $ مخفف Variable Expressions
در پوسته Bash، متغیرها مانند ظرفهایی برای نگهداری انواع اطلاعات هستند. شما میتوانید به آنها مقادیر اختصاص دهید و در ترمینال از این مقادیر برای اجرای دستورات و نمایش اطلاعات استفاده کنید.
دسترسی به متغیرها: برای دسترسی به مقادیر متغیرها در Bash، از علامت دلار ($) قبل از نام متغیر استفاده میشود. به عنوان مثال:
- echo $USER: این دستور نام کاربری فعلی را نمایش میدهد.
- echo $HOME: این دستور مسیر دایرکتوری اصلی کاربر را نمایش میدهد.
- echo $PATH: این دستور مسیرهای جستجوی دستورات اجرایی را نمایش میدهد.
ایجاد متغیر: برای ایجاد یک متغیر در Bash، باید یک نام برای آن انتخاب کنید و مقدار مورد نظر را برای آن تعیین کنید. ایجاد متغیر شامل اسم متغیر و علامت مساوی (=) و مقدار میشود. مثلاً:
- kaliboys=love: این دستور یک متغیر به نام “kaliboys” ایجاد میکند و به آن مقدار “love” را اختصاص میدهد.
- Number=2023: این دستور یک متغیر به نام “Number” ایجاد میکند و به آن مقدار 2023 را اختصاص میدهد.
استفاده از پرانتز در متغیرها: میتوانید از پرانتزهای خودکار (یا curly braces) {} برای تغییر مسیر و عملهای پردازشی بر روی مقادیر متغیرها استفاده کنید. به عنوان مثال:
- echo ${MyString}: این دستور مقدار متغیر “MyString” را نمایش میدهد.
- echo ${MyString:6}: این دستور زیررشتهای را از موقعیت ششم متغیر “MyString” به بعد نمایش میدهد.
- echo ${MyString:0:6}: این دستور زیررشتهای از موقعیت صفرم متغیر “MyString” با طول شش کاراکتر را نمایش میدهد.
- echo ${MyString:4:4}: این دستور زیررشتهای را از موقعیت چهارم متغیر “MyString” با طول چهار کاراکتر نمایش میدهد.
Quoting Special Characters
اگر می خواهید از یک کاراکتر خاص به عنوان یک کاراکتر عادی استفاده کنید، باید به پوسته Bash بگویید. به این کار نقل قول می گویند و سه راه برای انجام آن وجود دارد.
اگر متن را در گیومه (“…”) قرار دهید، این مانع از عمل Bash بر روی اکثر کاراکترهای خاص می شود و آنها فقط چاپ می کنند. یک استثنای قابل توجه، علامت دلار ($) است. همچنان به عنوان کاراکتر عبارات متغیر عمل می کند، بنابراین می توانید مقادیر متغیرها را در خروجی خود قرار دهید.
به عنوان مثال، این دستور تاریخ و زمان را چاپ می کند:
echo "Today is $(date)"
اگر متن را مانند شکل زیر در یک نقل قول (‘…’) قرار دهید، عملکرد همه کاراکترهای ویژه متوقف می شود:
echo 'Today is $(date)'
برای جلوگیری از عملکرد کاراکتر زیر به عنوان یک کاراکتر خاص، می توانید از یک بک اسلش ( \ ) استفاده کنید.. مثال زیر را ببینید:
echo "Today is \$(date)"
نتیجه گیری
در این مقاله به معرفی کاراکترهای خاص در لینوکس پرداختیم و کاربردهای مختلف آنها را برای شما توضیح دادیم. این کاراکترها ابزارهای قدرتمندی هستند که به کاربران لینوکس امکان میدهند تا دستورات خود را بهبود ببخشند و کارایی سیستمهای خود را افزایش دهند.
عالی