HEXEDIT(1) General Commands Manual HEXEDIT(1)

hexedit - مشاهده و ویرایش فایل‌ها به صورت هگزادسیمال یا ASCII

hexedit [-s | --sector] [-m | --maximize] [-l<n> | --linelength <n>] [-h | --help] [filename]

برنامهٔ hexedit یک فایل را هم به صورت ASCII و هم به صورت هگزادسیمال نمایش می‌دهد. با توجه به اینکه فایل قطعه به قطعه خوانده می‌شود، فایل ورودی می‌تواند یک دستگاه (device) نیز باشد. شما می‌توانید فایل را ویرایش کرده و درون آن جستجو کنید.

قالب‌بندی نمایش بر اساس سکتورهای کامل.
تلاش برای بیشینه کردن اندازهٔ صفحهٔ نمایش.
نمایش رنگی. این ویژگی تنها در صورتی در دسترس است که سیستم‌عامل شما از آن پشتیبانی کند.
تنظیم صریح تعداد بایت‌های نمایشی در هر خط بر روی <n>.
نمایش نحوهٔ استفاده از برنامه.

<, > :  رفتن به ابتدا/انتهای فایل
Right:  نویسه بعدی
Left:   نویسه قبلی
Down:   خط بعدی
Up:     خط قبلی
Home:   ابتدای خط
End:    انتهای خط
PUp:    یک صفحه به جلو
PDown:  یک صفحه به عقب

F2:     ذخیره
F3:     بارگذاری فایل
F1:     راهنما
Ctrl-L: بازترسیم
Ctrl-Z: تعلیق
Ctrl-X: ذخیره و خروج
Ctrl-C: خروج بدون ذخیره
Tab:    جابه‌جایی hex/ascii
Return: رفتن به
Backspace: واگرد نویسه قبلی
Ctrl-U: واگرد همه
Ctrl-S: جستجو به جلو
Ctrl-R: جستجو به عقب

Ctrl-Space: تنظیم نشانه
Esc-W:  رونویسی
Ctrl-Y: چسباندن
Esc-Y:  چسباندن درون یک فایل
Esc-I:  پر کردن

o Right-Arrow, Left-Arrow, Down-Arrow, Up-Arrow - جابه‌جایی مکان‌نما.
o Ctrl+F, Ctrl+B, Ctrl+N, Ctrl+P - جابه‌جایی مکان‌نما.
o Ctrl+Right-Arrow, Ctrl+Left-Arrow, Ctrl+Down-Arrow, Ctrl+Up-Arrow - جابه‌جایی مکان‌نما به میزان n بار.
o Esc+Right-Arrow, Esc+Left-Arrow, Esc+Down-Arrow, Esc+Up-Arrow - جابه‌جایی مکان‌نما به میزان n بار.
o Esc+F, Esc+B, Esc+N, Esc+P - جابه‌جایی مکان‌نما به میزان n بار.
o Home, Ctrl+A - رفتن به ابتدای خط.
o End, Ctrl+E - رفتن به انتهای خط.
o Page up, Esc+V, F5 - یک صفحه بالا رفتن در فایل.
o Page down, Ctrl+V, F6 - یک صفحه پایین رفتن در فایل.
o <, Esc+<, Esc+Home - رفتن به ابتدای فایل.
o >, Esc+>, Esc+End - رفتن به انتهای فایل (برای فایل‌های عادی که دارای اندازه هستند).
o Ctrl+Z - تعلیق hexedit.
o Ctrl+U, Ctrl+_, Ctrl+/ - واگرد همه (نادیده گرفتن اصلاحات).
o Ctrl+Q - خواندن نویسه ورودی بعدی و درج آن (برای درج نویسه‌های کنترلی و کلیدهای مقید به دستورات کاربرد دارد).
o Tab, Ctrl+T - جابه‌جایی میان ASCII و هگزادسیمال.
o /, Ctrl+S - جستجو رو به جلو (در حالت ASCII یا هگزادسیمال؛ از TAB برای تغییر حالت استفاده کنید).
o Ctrl+R - جستجو رو به عقب.
o Ctrl+G, F4 - رفتن به یک موقعیت در فایل.
o Return - رفتن به یک سکتور در فایل در صورت استفاده از --sector، در غیر این صورت رفتن به یک موقعیت در فایل.
o Esc+L - نمایش صفحه با شروع از موقعیت کنونی مکان‌نما.
o F2, Ctrl+W - ذخیره کردن تغییرات.
o F1, Esc+H - راهنما (نمایش صفحهٔ راهنما).
o Ctrl+O, F3 - باز کردن فایلی دیگر.
o Ctrl+L - بازنمایش (تازه‌سازی) صفحهٔ نمایش (مفید در مواقعی که ترمینال به‌هم می‌ریزد).
o Backspace, Ctrl+H - واگرد تغییرات اعمال‌شده بر بایت قبلی.
o Esc+Ctrl+H - واگرد تغییرات اعمال‌شده بر بایت‌های قبلی.
o Ctrl+Space, F9 - قرار دادن نشانه در محل فعلی مکان‌نما.
o Esc+W, Delete, F7 - رونویسی ناحیهٔ انتخاب‌شده.
o Ctrl+Y, Insert, F8 - چسباندن (yank) ناحیهٔ رونویسی‌شده قبلی.
o Esc+Y, F11 - ذخیره ناحیهٔ رونویسی‌شده قبلی در یک فایل.
o Esc+I, F12 - پر کردن ناحیهٔ انتخاب‌شده با یک رشته.
o Esc+T - بریدن (truncate) فایل در موقعیت کنونی.
o Ctrl+C - خروج بدون قید و شرط (بدون ذخیره‌سازی).
o F10, Ctrl+X - خروج.

برای دستورهای Esc، گاهی می‌توان به‌جای Esc از کلید Alt استفاده کرد. موارد جالبی در اینجا وجود دارد (به‌ویژه برای فرانسوی‌ها :) egrave = Alt+H ،‏ ccedilla = Alt+G، و Alt+Y = ugrave.

در پایین صفحهٔ نمایش، خط وضعیت (الگوبرداری‌شده از emacs) قرار دارد. همانند emacs، نشانه‌های --، ** و %% به ترتیب به معنای اصلاح‌نشده، اصلاح‌شده و فقط‌خواندنی هستند. سپس نام فایلی که در حال ویرایش آن هستید نمایش داده می‌شود. در کنار آن، موقعیت کنونی مکان‌نما در فایل و به دنبال آن اندازهٔ کل فایل می‌آید. اندازهٔ کل فایل برای دستگاه‌ها (devices) کاملاً دقیق نیست.
در حالت --sector، سکتوری که مکان‌نما در آن قرار دارد نمایش داده می‌شود.

شما می‌توانید به صورت ASCII یا هگزادسیمال ویرایش کنید. جابه‌جایی میان این دو حالت با کلید Tab انجام می‌شود. هنگامی که فایل فقط‌خواندنی باشد، امکان ویرایش آن وجود ندارد. در صورت تلاش برای ویرایش یک فایل فقط‌خواندنی، پیام "File is read-only" اعلام می‌کند که فایل غیرقابل‌نوشتن است.
تغییرات تا زمان ذخیره شدن، به صورت برجسته (bold) نمایش داده می‌شوند. خط وضعیت مشخص می‌کند که آیا فایل را تغییر داده‌اید یا خیر.
هنگام ویرایش در حالت هگزادسیمال، تنها نویسه‌های 0,1,...,9،‏ a,b,...,f و A,B,...F مجاز هستند. کلیدهای دیگر به دستوری متصل نیستند (unbound). اولین باری که کلید نامتصل را فشار دهید، پنجرهٔ راهنما باز می‌شود. این راهنما دوباره باز نخواهد شد مگر اینکه مستقیماً آن را (با F1) فراخوانی کنید.
هنگام ویرایش در حالت ASCII، ممکن است وارد کردن نویسه‌هایی مانند / که به یک دستور متصل هستند دشوار باشد. راه‌حل استفاده از تابع درج نقل‌قولی (quoted insert) با Ctrl+Q است؛ کلیدی که پس از تابع درج نقل‌قولی فشرده شود توسط hexedit پردازش نخواهد شد (مشابه quoted-insert در emacs یا نویسهٔ \ در زبان C).

شما می‌توانید یک رشته را به صورت ASCII یا هگزادسیمال جستجو کنید. با کلید Tab می‌توانید میان این دو حالت جابه‌جا شوید. اگر رشته پیدا شود، مکان‌نما به ابتدای مکان منطبق منتقل می‌شود. اگر جستجو ناموفق باشد، پیام "not found" این موضوع را اعلام می‌کند. می‌توانید جستجو را با فشردن یک کلید لغو کنید.
جستجو در حالت هگزادسیمال کمی گیج‌کننده است. باید یک رشتهٔ هگزادسیمال با تعداد زوجی از نویسه‌ها وارد کنید. سپس جستجو می‌تواند بایت به بایت انجام شود. اگر می‌خواهید یک عدد بزرگ (مثلاً یک عدد ۳۲ بیتی) را جستجو کنید، باید از نمایش داخلی آن عدد در حافظه (مسئلهٔ little/big endian) آگاه باشید و آن را به همان صورتی که در حافظه ذخیره شده وارد کنید. برای نمونه، روی یک پردازندهٔ Intel (که little endian است)، باید ترتیب بایت‌ها را معکوس کنید: مقدار 0x12345678 در حافظه به صورت 0x78563412 ذخیره می‌شود و این همان رشته‌ای است که باید به موتور جستجو بدهید.
در صورت ویرایش شدن فایل، قبل از جستجو از شما پرسیده می‌شود که آیا مایل به ذخیرهٔ تغییرات هستید یا خیر.

برای جستجوهای پیشرفته‌تر، وصلهٔ (patch) ولکر شاتس (Volker Schatz) را در نشانی زیر ببینید: http://www.volkerschatz.com/unix/homebrew.html#hexedit

ابتدا بخشی از بافر را که می‌خواهید رونویسی کنید انتخاب نمایید: با قرار دادن نشانه (mark) در نقطهٔ مورد نظر شروع کنید. سپس به انتهای ناحیه‌ای که می‌خواهید رونویسی شود بروید (می‌توانید از دستور رفتن به موقعیت و توابع جستجو استفاده کنید). سپس آن را کپی کنید. پس از آن می‌توانید ناحیهٔ رونویسی‌شده را در فایل فعلی یا در فایلی دیگر بچسبانید.

شما همچنین می‌توانید ناحیهٔ انتخاب‌شده را با یک رشته یا یک نویسه پر کنید: بلوکی را که می‌خواهید پر شود انتخاب کنید (نشانه را تنظیم کرده و سپس به انتهای بلوک بروید)، و تابع پر کردن (F12) را فراخوانی کنید. سپس hexedit رشته‌ای را که می‌خواهید بلوک با آن پر شود از شما می‌پرسد.
کد برنامه برای پر کردن نواحی بسیار بزرگ بهینه‌سازی نشده است زیرا تغییرات را تا زمان ذخیره‌سازی در حافظه نگه می‌دارد. به همین دلیل اگر سعی کنید بلوک بزرگی را پر کنید، hexedit به شما هشدار خواهد داد.

هنگامی که نشانه تنظیم شود، ناحیهٔ انتخاب‌شده به صورت معکوس (reverse mode) نمایش داده می‌شود.
توجه داشته باشید که ناحیهٔ رونویسی‌شده حاوی تغییراتی است که تا زمان رونویسی انجام شده است. اما اگر آن تغییرات را واگرد (undo) کنید، محتوای بافر رونویسی تغییر نخواهد کرد. این نکته ممکن است بدیهی به نظر برسد اما یادآوری آن مفید است.

پیمایش صفحه بسته به اینکه در حالت --sector باشید یا خیر متفاوت است. در حالت عادی، پیمایش به صورت خط به خط است. در حالت سکتوری، پیمایش به صورت سکتور به سکتور انجام می‌شود. در هر دو حالت، می‌توانید با استفاده از Esc+L صفحه را مجبور کنید تا از موقعیتی مشخص شروع به نمایش کند.

od(1), hdump(1), hexdump(1), bpe(1), hexed(1), beav(1).

Pixel (Pascal Rigaux) <pixel@rigaux.org>،
صفحهٔ وب: http://rigaux.org

برنامهٔ hexedit یک نرم‌افزار متن‌باز است؛ هر کسی می‌تواند تحت شرایط مشخص‌شده در مجوز عمومی همگانی گنو (GNU General Public License)، نسخه‌هایی از hexedit را برای هر فردی بازتوزیع کند.

می‌توانید hexedit را در نشانی زیر بیابید:
https://github.com/pixel/hexedit/archive/1.6.tar.gz

هر چیزی که فکر می‌کنید می‌تواند جالب و مفید باشد...

مشکلاتی در کتابخانه curses ارائه‌شده همراه با Redhat 5.0 وجود دارد که باعث می‌شود hexedit ابعاد ترمینال را بسیار بزرگ تشخیص دهد. در نتیجه hexedit غیرقابل‌استفاده می‌شود.

میان‌برها روی برخی از دستگاه‌ها کار می‌کنند و روی برخی دیگر خیر. به همین دلیل برای هر عملکرد میان‌برهای متعددی تعریف شده است. ترکیب‌های کلیدی مانند Ctrl+Arrows و Alt+. در بیشتر مواقع آن‌طور که باید عمل نمی‌کنند. در سیستم‌های SUN، باید به جای Ctrl+V از فشردن دوبار آن یعنی Ctrl+V-Ctrl+V استفاده کنید (!)؛ و کلید Alt کلید لوزی‌شکل (diamond) است.

هنگام جستجو، جالب خواهد بود اگر مشخص شود جستجو به چه موقعیتی رسیده است. دیدن حرکت یک نشانگر همواره تحمل زمان انتظار را آسان‌تر می‌کند.

جستجوی هگزادسیمال می‌توانست به جای پیمایش بر مبنای ۸ بیت، بر مبنای پیمانهٔ ۴ بیت جستجو کند. قابلیت دیگر می‌توانست پر کردن (padding) جستجوهای هگزادسیمال با طول فرد با صفرهای اضافی باشد.

نمونه‌ای سراغ دارم که در آن نمایش صفحه کاملاً به‌هم می‌ریزد. به نظر می‌رسد این یک باگ در ncurses (یا شاید در xterm و rxvt) باشد؟؟ نمی‌دانم ایراد از استفادهٔ نادرست من از ncurses است یا خیر... به نظر می‌رسد این مشکل زمانی رخ می‌دهد که hexedit فقط یک فاصله در انتهای خطوط باقی می‌گذارد... اگر کسی راه‌حلی دارد، لطفاً به من اطلاع دهد!

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

12 July 1998