هدایت ورودی در لینوکس که در اصطلاح به آن Input میگویند یکی از قابلیتهای کاربردی این سیستم عامل است. هدایت ورودی و خروجی (Input/Output) در سیستم عامل لینوکس به مدیریت جریان دادهها بین دستگاهها و برنامههای کاربردی مختلف اشاره دارد. به طور پیش فرض در لینوکس دستگاه ورودی استاندارد صفحه کلید شما و دستگاه خروجی استاندارد صفحه نمایش شما است. در لینوکس دستگاههای ورودی و خروجی به عنوان فایل مدل سازی شده و توسط سیستم عامل مدیریت میشوند. در ادامه قصد داریم انواع هدایت ورودی و هدایت خروجی در لینوکس را شرح دهیم و کاربرد هریک را با شما در میان بگذاریم، اگر قصد استفاده از "سیستم عامل لینوکس" را دارید، حتما این مقاله را تا انتها دنبال نمایید.
هدایت ورودی و هدایت خروجی در Linux
به صورت کلی سه نوع جریان داده در Linux وجود دارد که از این جریانها در لینوکس برای هدایت فرمانهای مختلف ورودی و خروجی استفاده میشود. در واقع هدایت ورودی و هدایت خروجی در لینوکس با این سه نوع جریان انجام میشود، این جریانها به شرح زیر است:
کد استاندارد جریانها |
شماره جریان |
نوع جریان |
|
< - ورودی استاندارد |
stdin (0) |
ورودی استاندارد |
standard input (stdin) |
> - خروجی استاندارد |
stdout (1) |
خروجی استاندارد |
standard output (stdout) |
2> - خطای استاندارد |
stderr (2) |
خطای استاندارد |
standard error (stderr) |
I/O چیست؟
منظور از I/O در لینوکس دستگاههایی همچون موس، صفحه کلید، مانیتور، پرینتر، دیسکها و سایر دستگاههایی هستند که اطلاعات به سیستم میدهند یا از آن اطلاعات دریافت میکنند. در واقع اصطلاح I/O مخفف دو کلمه ورودی /خروجی یعنی input/output است. در واقع ورودی / خروجی را میتوان در لینوکس communication between an information processing system and the outside world بیان کرد.
هدایت خروجی در Linux چطور انجام می شود؟
خروجی استاندارد یا همان هدایت خروجی در لینوکس توسط یک برنامه تولید میشود، برای هدایت خروجی در لینوکس باید از کاراکتر “<”استفاده کنیم تا هدایت خروجی در لینوکس یا همان Output به درستی انجام شود. در زیر یک مثال از هدایت خروجی در لینوکس را میتوانید مشاهده نمایید:
ls -al > listings |
همان طور که در کد زیر میتوان مشاهده کرد با استفاده از این کد خروجی صفحه نمایش شما به فایل "listings" سیستم عامل Linux هدایت میشود. حتما در زمان تایپ این فرمان از نام صحیح فایل استفاده کنید، چون ممکن است فایل دیگری به اشتباه فراخوانی شود.
اگر نمی خواهید فایلی مجددا در خروجی نوشته شود باید از عملگر " >> " استفاده کنید و همانند تصویر زیر کد را به سیستم بدهید:
همچنین شما میتوانید خروجی استاندارد را علاوه بر فایلها به دستگاهها هم به شکل صحیح هدایت کنید. با استفاده از کد خروجی زیر میتوانید به سیستم لینوکس فرمان خواندن فایل را بدهید. در کد زیر دستور cat فایل music.mp3 را میخواند و خروجی را به /dev/audio میفرستند که دستگاه صوتی است. اگر تنظیمات صدا در رایانه شخصی شما صحیح باشد، این دستور فایل music.mp3 را پخش میکند.
$ cat music.mp3 > /dev/audio |
هدایت ورودی در لینوکس چطور انجام می شود؟
ورودی استاندارد یا همان هدایت ورودی درLinux توسط یک برنامه تولید میشود، برای هدایت ورودی در لینوکس باید از کاراکتر “>”استفاده کرد تا هدایت ورودی در لینوکس یا همان Input به درستی انجام شود. ورودی استاندارد یا I/O اصطلاحی برای ورودی یا ورودیهایی است که یک برنامه مبتنی بر دستور خط فرمان دریافت میکند. در فرآیند استفاده تعاملی، این ورودی معمولا از صفحه کلید بدست میآید. بسیاری از دستورات میتوانند از مرکزی به نام ورودی استاندارد، ورودی مورد نظر شما را بپذیرند. به طور مثال با استفاده از کد زیر میتوانید از برنامه ایمیل در لینوکس استفاده کنید و از طریق یک ترمینال ایمیل مورد نظر را ارسال نمایید.
Mail -s "Subject" to-address < Filename |
همانند تصویر زیر و با استفاده از این کد در لینوکس فایل را با ایمیل میتوان به پیوست و برای گیرنده ارسال کرد.
توجه داشته باشید که ترتیب هدایت ورودی یا خروجی مهم نیست تنها ضروری است که از عملگرهای هدایت یعنی “>” و “<” بعد از سایر آپشنها و آرگومان های دستور مورد نظر استفاده کنیم.
تغییر مسیر استاندارد خطاها در لینوکس
برای تغییر مسیر استاندارد خطاها در لینوکس باید به طور صریح شماره توصیفگر فایل را مشخص کنید، به طور مثال دستور زیر یک خطا را هنگام اجرای یک کاربر معمولی سیستم بدون امتیازات ایجاد میکند:
$ ls -l /root/ |
شما میتوانید خطای استاندارد را به یک فایل به صورت زیر تغییر دهید:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log |
برای اضافه کردن خطای استاندارد، از دستور زیر استفاده کنید:
$ ls -l /root/ 2>>ls-error.log |
خط لوله (Pipeline) در لینوکس چیست؟
همان طور که در قسمت قبل اشاره کردیم، ترتیب دستورهای ورودی یا خروجی مهم نیست و حتی میتوان با استفاده از خط لوله (Pipeline) چند دستور را به یکدیگر وصل کرد که با استفاده از Pipeline ها خروجی استاندارد یک دستور به ورودی استاندارد دستور دیگر ارسال میشود.
چطور از فیلترها در هدایت ورودی و خروجی (I/O) در لینوکس استفاده کنیم؟
از خط لوله یا Pipeline ها برای وصل کردن دستورات ورودی و خروجی به هم استفاده میشود، فیلترها هم نوعی خط لوله هستند که ورودی استاندارد را دریافت کرده و عملی را روی آن انجام داده و نتیجه حاصل را به خروجی استاندارد ارسال میکنند. برای ارسال یک دستور خاص در لینوکس میتوانید به راحتی فیلترها را باهم ترکیب کنید و پردازشهای قدرتمندی روی اطلاعات مورد نظر خود انجام دهید، در جدول زیر تمامی دستورات فیلترها در لینوکس با جزئیات ذکر شده است.
دستورات فیلتر |
توضیح |
sort |
مرتب کردن ورودی استاندارد و ارسال حاصل مرتب شده به خروجی استاندارد |
uniq |
دریافت یک رشته مرتبشده و حذف خطوط تکراری از ورودی |
grep |
بررسی تمامی خطوط ورودی و نمایش خطوطی که الگوی مشخصی از کاراکترها را دارند |
fmt |
فرمت کردن متن از ورودی استاندارد و ارسال به خروجی |
pr |
تقسیم ورودی به صفحات با اضافه کردن header و footer جهت آمادهسازی برای چاپ |
head |
ارسال چند خط ابتدایی از ورودی به خروجی (مفید برای بدست آوردن عنوان فایل) |
tail |
ارسال چند خط از انتهای ورودی به خروجی (مفید برای مشاهده محتوای اخیر فایلهای لاگ) |
tr |
ترجمه کاراکترها (مثلاً تبدیل حروف بزرگ به کوچک یا برعکس و تغییر کاراکتر پایان خط) |
sed |
ویرایش جریان ورودی را انجام میدهد، از آن برای ترجمههای پیچیده تر از tr استفاده میکنند |
awk |
زبان برنامهنویسی قوی برای طراحی فیلترها |
سخن پایانی
در این مقاله در مورد نحوه هدایت ورودی و خروجی (I/O) در لینوکس به تفصیل صحبت کردیم تا کسانی که از این سیستم عامل قدرتمند استفاده میکنند به راحتی بتوانند با استفاده از نکات گفته شده هدایت ورودی و خروجی در لینوکس را انجام دهند.
سوالات متداول
هدایت ورودی و هدایت خروجی در لینوکس چیست؟
I/O Redirection مخفف عبارت Input Output Redirection به معنی هدایت ورودی خروجی در لینوکس است و با استفاده از این امکان میتوان ورودی و خروجی فرمانهای لینوکس را به فایلها و از فایلها هدایت نمود و همچنین چندین فرمان قدرتمند ترکیبی ایجاد کرد.
کاربران در سیستم عامل لینوکس میتوانند چه دسترسیهایی را داشته باشند؟
خواندن یا read : مجوز خواندن محتویات یک فایل است. نوشتن یا write : مجوز ذخیره کردن اطلاعات بر روی فایل مورد نظر و قرار دادن آن بر روی دیسک است. اجرا کردن یا Execute : مجوز اجرا کردن یک فایل یا وارد شدن به یک دایرکتوری است.
فیلترها در هدایت ورودی و خروجی (I/O) در لینوکس چه نقشی دارند؟
فیلترها در واقع نوعی خط لوله هستند که ورودی استاندارد را دریافت کرده و عملی را روی آن انجام داده و نتیجه حاصل را به خروجی استاندارد ارسال میکنند.
آیا میتوان جریان استاندارد ورودی و خروجی را در لینوکس ترکیب کرد؟
بله، با استفاده از دستورات خط لوله (Pipeline) میتوان به راحتی جریان استاندارد ورودی و خروجی را در لینوکس با هم ترکیب کرد.