لطفا وارد شوید یا ثبت‌نام کنید تا به انجمن‌ها دسترسی کامل داشته باشید.



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
قدرت و کارایی عالی خط فرمان در گنو/لینوکس
2008-02-23, 03:38 PM,
ارسال : #21
 
پیشنهاد میکنم اعلان شل خود را رنگی کنید!
بطور نمونه:
کد :
PS1='\[\033[30m\033[43m\][\u@\h \W]\$\[\033[m\] '
این دستور را میتوانید به فایل ~/.bashrc اضافه کنید.
رنگی بودن اعلان شل، بر اساس تجربهء شخصی، کمک بزرگی درجهت خوانایی و پیدا کردن سریع ابتدا و انتهای خروجی فرمانهای مختلف است و در صرفه جویی در وقت و انرژی و کاهش فشار روی چشمان ارزشمند شما بطرز کاملا مشهودی موثر است.
بخصوص وقتی فرمانی خروجی طولانی و شاید چند صفحه ای دارد.
وقتی در محیط ترمینال امولیتور بوسیلهء اسکرولبارها دنبال ابتدا و انتهای خروجی مشخصی میگردیم این نیاز بشدت احساس میشود.

--------------------------------------

یک تابع ساده که بازهم میتوانید به ~/.bashrc اضافه کنید:
کد :
hlp () { $1 --help | less; };

و در خط فرمان بدین صورت نمونه از آن میتوانیم استفاده کنیم:

کد :
hlp diff

بجای diff هر برنامهء دیگری که پارامتر --help را میپذیرد میتواند قرار بگیرد.

این تابع ساده شما را از تایپ خط فرمان تکراری و طولانی تری مثلا بصورت diff --help | less رها میکند.

در محیط less، میتواند با کلیدهایی مثل PgDown و PgUp میان صفحات مختلف خروجی حرکت کنید، با کلید q نیز از این محیط خارج شوید.

راستی دوستان این طور فرمانها دیگه خیلی خاص و منحصر به شل یونیکسی نیستن. چون تاپیک موضوعش کمی فرق میکنه و بیشتر سعی داشته قدرت و کارایی رو با مثالهای نغز و موارد ممتاز یا انحصاری و برنامه های خط فرمان برجسته نشون بده. وگرنه فرمان و امکانات و ابتکارات مختلف بسیار زیاد هستن.
میخواستم تاپیک دیگری برای درج اینطور فرمانها و کاربردهای عادی ساده و روزمره ایجاد کنم؛ ولی بعلت مختصر بودن مطلب، و ضمنا مفید بودن درج این مطالب مکمل برای استفادهء بهینه و خوشایند از این محیط، مطالب رو در همینجا درج کردم.


Only God

I Wish I Was Buddha
کاش بودا بودم

Live And Let Live
زندگی کن و بگذار زندگی کنند

Forgive And Be Forgiven
ببخش و بخشیده شو

مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-02-23, 03:57 PM,
ارسال : #22
 
نقل قول :پیشنهاد میکنم اعلان شل خود را رنگی کنید!
بطور نمونه:
کد :
کد:
PS1='\[\033[30m\033[43m\][\u@\h \W]\$\[\033[m\] '

مرسی٬ جالب بود. من قبلن از یه همچین چیزی استفاده می کردم:
کد :
[mroshan@cyrex ~]$ PS1="--------------------------
> $PS1"
--------------------------
[mroshan@cyrex ~]$ echo "technotux"
technotux
--------------------------
[mroshan@cyrex ~]$
ولی ایده شما جالبتره. توی سیستم من بکگراوند متن رنگی شد. فکر کنم خود متن رنگی باشه قشنگ تره!
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-02-23, 04:24 PM,
ارسال : #23
 
بله بکگراند رنگی میشه.
خب رنگ و اینکه فورگراند باشه یا بکگراند (یا هردو) بسته به سلیقه و تنظیمات دیگر و تشخیص خود شماست.
زمینه ترمینال بنده رنگی هست (زرد روشن) و این ترکیب باهاش هماهنگی داره و خوب خوانا و ملایم هست بنظر بنده.
هدفم تفکیک و تشخیص سریع بوده نه فقط قشنگی.
این یک ترکیبی هست که از دو کیلومتری هم قابل تشخیصه و احتمال شباهت و قاطی شدنش با بخشهای دیگه ناچیزه :wink:


Only God

I Wish I Was Buddha
کاش بودا بودم

Live And Let Live
زندگی کن و بگذار زندگی کنند

Forgive And Be Forgiven
ببخش و بخشیده شو

مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-03-17, 01:20 PM,
ارسال : #24
 
بازم یک نیاز جدید پیش آمد و تصمیم گرفتم با امکانات خط فرمان حلش کنم.
در فکر یک برنامه بودم که آلارم زماندار باشه؛ یعنی سر زمان معینی آدم رو خبر کنه.
طراحیش وقت و انرژی زیادی برد؛ ولی عوضش بارها قابل استفاده هست و مزایایی داره. ضمنا هدف تسلط و شناخت بیشتر نسبت به شل قدرتمند و برنامه های گسترده و مجهز و قابل انعطاف محیط گنو/لینوکس هم بوده. در مدتی که روی این برنامه کار میکردم چیزهای مفید و جالبی یاد گرفتم و با ساختار پایهء تحسین برانگیز گنو/لینوکس بیشتر آشنا شدم.

زمان زیادی با رایانه کار میکنم و بارها کارهای دیگری رو که داشتم و باید در زمان بخصوص یا با تاخیر معینی انجام میدادم یادم رفته؛ آخرینش خطر انفجار یک قوطی کنسر لوبیا روی اجاق گاز بوده!! حیف شد لوبیاها همه نیم سوخته شده بودن و انداختمشون دور.
شاید شما هم با همین مشکلات برخورد کرده باشید!

عرضم به حضور شما که در محیط گرافیکی برنامه های قابل توجهی هست همونطور که میدونید. در زیرمنوی PIM فدورا هم هست.
ولی مزایا و معایب خودشون رو دارن. باید بگم با نیازی که بنده دارم مزایای اونها خیلی بدردم نمیخوره یا مهم نیستن.
درمقابل به یک چیزی ساده، سریع، مطمئن، کم مصرف و سخت جون و مطمئن نیاز دارم. البته در عین داشتن انعطاف بقدر کافی.
این برنامه های گرافیکی در عین مجهز بودن چندان صرفه هم ندارن روی سیستم ضعیف ما! فقط یک رابط گرافیکی و کلی قیافه دارن که عملا برامون فرقی نمیکنه و منابع سیستم رو بیخودی پاش هدر میکنیم. موقعی که سیستم سنگین شده کمی طول میشکن تا بیان بالا فقط.
ضمنا در محیط تماما متنی هم کار نمیکنن.
خب سخن کوتاه!
از اینرو شد که این برنامه رو نوشتیم که به شکل یک تابع شل هست. اون رو در bashrc قرار میدیم و تمام. البته نسخهء فایل اسکریپتش رو هم تست کردم و شدنی هست (البته با حالت تابعش کمی فرق میکنه و چیزهایی باید بهش اضافه بشه). اینطوری میشه یک اسکریپت در مسیر اجرایی قرار داد که فرضا بشه از کادر run هم براحتی اجراش کرد.
اما بهرصورت خیلی اوقات بنده یک شل باز دارم؛ ضمنا ترمینال امولیتور هم که تقریبا همه جا هست؛ از kate تا konqueror.

خب این برنامهء ما حتی نسبت به اون برنامه های گرافیکی مزایایی هم داره واقعا!
مجموعا کار کردن باهاش برای کاربردهای بنده (و شاید بعضی افراد دیگه) فکر میکنم راحتتر و سریعتر باشه.
یک مزیت این برنامه هم اینه که درصورتیکه حتی محیط گرافیکی بسته یا ریستارت بشه (که خودتون میدونید بعضی وقتا پیش میاد یا لازم میشه)، لاگ آوت یا سویچ کاربر کنید به هر علتی، آلارم ما از بین نمیره و به کار خودش ادامه میده؛ حتی در حالتیکه شما هنوز لاگین مجدد نکردید!
شما میتونید در محیط تماما متنی و محیط گرافیکی بطور یکسانی بکار بگیریدش، بدون اینکه به محیط دسکتاپ وابسته باشید و دچار بی ثباتی و تغییراتش باشید.
البته بنده با صوت مشکلاتی داشتم که فکر میکنم کاملا مربوط به خود سیستم هست تا این برنامه. یعنی در بعضی اکانتها که کاملا لاگ آوت میکنیم و دیگه با اون کاربر هیچ کجا روی سیستم نیستیم، صدا پخش نمیشه (گرچه بقیهء بخشها اجرا میشن)؛ بعضی وقتها ورود به یک اکانت دیگه باعث قطع صدا در اکانت دیگر میشه.
همونطور که گفتم اینها مربوط به سیستم هست و ارتباطی با این برنامه نداره. یعنی در محیط گرافیکی هم این قضیه صادق هست و چه درمورد برنامه های خط فرمان و چه برنامه های مالتی مدیای گرافیکی همینطور هست.
بهرحال این نکته رو گفتم بعنوان یک تجربه، که حواستون باشه به این قضیه و ازش مطمئن بشید قبل از اینکه روی پخش صدا در هر حالتی اتکا کنید.
البته ممکنه سیستم شما اصلا چنین اشکالی نداشته باشه.
بهرحال اگر داره یا نداره؛ اگر فهمیدید علتش چیه و/یا چطور میشه حلش کرد، به بنده هم اطلاع بدید لطفا.

این برنامه در خط فرمان انعطاف و هوشمندی نسبتا خوبی هم داره و میتونه برای کاربردهای متنوعی بکار بره.
استفاده از برنامهء date به ورودیش انعطاف خوبی داده. میشه هر فرمتی رو که برنامهء date میپذیره بهش داد (تنها حالت بدون آرگومان رو به تاخیر زمانی صفر ثانیه نگاشت کردم؛ یعنی اگر برنامه بدون آرگومان اجرا بشه حاصلش اجرای فوری آلارم هست (این با تاریخ تعیین شده توسط برنامهء date فرق داره)).
برنامه رو با آرگومان help فراخوانی کنید تا اطلاعاتی راجع به کارکردش بده.
کدها هم خوب داکیومنت شدن. حجمش زیاد شده بخاطر توضیحاتی که در کد داده شده؛ میشه برای کاربرد عملی تمام کامنتها رو برداشت (توصیه میشه؛ فکر میکنم منابعی مصرف میکنن).
کد :
alarm() {
#this is a function for reminding you things while working
#(but you can also use it for delayed execution of some tasks)
#havent you ever lost an overheated conserve while working with computer, like me? ;D
#many other things (of course sometimes more serious)
#may happen due to forgetting some jobs in their time.
#I have forgotten them many times because of being
#intensively concentrated on other activities while I had been working on the computer.

#I think I have self-documented this code good.
#explanatory comments are below of each corresponding line or functionally separate part of the code.
#this program is tested in this environment: Fedora 5 GNU/Linux;
#it runs in BASH, utilizes the `date', `mesg', `write', `nice', `sox', `id', `stat', `find, and `sleep' programs;

local usage="usage: alarm [time [alert_message [external_program]]
examples:
alarm 30min 'calling joe'
alarm '1 hour 20 min' '' 'halt -p'
alarm 21:30
alarm 60sec
alarm '120 secondes'
alarm 10min 'hello\\\\n this is a test\\\\n    how are you?'
alarm 'tomorrow 5:30 am'
alarm 1min30sec
note that arguments containing spaces must be quoted.
invoking with no args executes an immediate alarm."
#this variable contains usage help message with some examples
#note that `local' is a BASH builtin

if [[ $1 = --help || $1 = -h || $1 = help || $1 = -help ]]
then echo -e "$usage\n
this is a program for setting a reminder alarm at the specified time.
time can be a certain time/date or delay in any format which
the date program accepts (see its manual for detailed explanations).
you can specify a custom alert message, and also a command
to be ran at the specified time, if you want."
return; fi
#if user requested help with with some of its common styles,
#we show him a help message (including the usage message)
#the `return' command causes exiting the alarm function/stoping execution of the next commands.

if [[ $# -gt 3 ]]; then echo -e "too many arguments!\nprobably you must quote some args (do they contain spaces?)\n\n$usage"; return; fi
#number of arguments has exceeded the maximum meaningful (probably some args must be quoted).
#we print an appropriate error message with the usage message.

if [[ $# != 0 ]]; then local t="$1"; else local t=0; fi
#if there are no args specified at all, sets the sleep time to 0, i.e. immediate alarm.

if [[ $# != 0 ]]; then
#---------------------------------
#if there were no args, we should not calculate and display alarm time.
#in this case, wait time is set to 0.
#but if the user has specified an equivalent 0 wait time (e.g. `0sec'), we should calculate it
#and also display it to him (I think we should; think of a script that utilizes our prog,
#and also redirects its output to a file for example) .

echo -n "current time: "; date

echo -n 'alarm time:   '
if ! date -d "$t"; then echo -e "\n$usage"; return; fi
#we check to see if the first arg (time/delay) is acceptable by the date program;
#note that probably all possible forms/values of the date's arg
#are not very meaningful for our little job and may be just mistakes.
#but this check seems to be sufficient for our job. its as simple as required to be really worth doing.

local now=$(date '+%s')
#its really necessary! we put current timestamp into a variable.
#calculating it directly in the arithmetic below sometimes
#results in bogus negative value (that causes `time in the past' error)
#due to a race condition (only in cases of the 0 wait times)
t=$(($(date -d "$t" '+%s')-$now))
#we must convert anything specified by the user to a delay in secondes;
#because we need seconds for passing to the sleep program.
#date program with -d and %s will convert anything to secondes past the epoch.
#(I think it is what is often called a unix timestamp).
#so indeed one important step (converting input, regardless of its format, to secondes) is done this way.
#we get the current moment timestamp, convert user specified time to timestamp,
#and finally the difference between them is what we want!
#we pass that difference to the `sleep' and the `sleep' will sleep so many secondes!

if [[ $t -lt 0 ]]; then echo -e "calculated time is in the past!\n\n$usage"; return; fi
#do you want an alarm in the past?!!

echo -n 'that is '
if [[ $t != 0 ]]; then
if [[ $t -ge 3600 ]]; then echo -n "$(( $t / 3600 )) hour(s) "; fi
if (( $t % 3600 >= 60 )); then echo -n "$(( $t % 3600 / 60 )) minute(s) "; fi
if (( $t % 60 )); then echo -n "$(( $t % 60 )) second(s) "; fi
echo 'later.'
else echo 'now.'
fi
echo
#now we have seconds to be elapsed from the present time;
#with some div and mod arithmetics we convert it to
#hours, minutes, and secondes and display it to the user.

fi
#---------------------------------

local tty=$(tty)
#we are on which tty dev file?
local tty_owner=$(stat -c '%U' $tty)
#gets the tty dev file owner.
#note that this may be different from `whoami/id -un' output; you may have used su.
#in those cases, tty owner is the original user, not the su-ed user.
#having several shells with several users (at least your ordinary user account besides the root)
#is not rare at all. for example in recent times I have had three users at the same time for testing & learning
#the cvs system (I am now reading its manual; and indeed developing this program with it).

local f= xtty=n p=-99999999999
#we want that pts which writing to it brings a box
#with our message within, to the user. (I discovered it lonely! :D)
#according to my tests, it is the pts file with the oldest creation time
#that of course belongs to the user.
#we set xtty's value to n, that is an indication of an unreal value (real pts files are started at 0).
#by checking its value after executing the compare loop
#we can know if any pts-es were existent at all (we might be on a real terminal only).
#likewise, p is an unreal timestamp value.
for i in $(find /dev/pts/ -mindepth 1 -user $tty_owner -printf '-%C@ %f '); do
#this find command line brings the names of all the relative
#(same owner as the tty owner) existing pts files into the looping values of the `for' command.
#we prefix change times with minus (that effectively makes them negative numbers)
#so that they can be recognized from the pts file names (>=0)
if [[ $i -lt 0 ]]; then
#i<0 means that $i is the file's change time
if [[ $i -gt p ]]; then  p=$i; f=y; fi
#if the current timestamp is bigger from the previous one
#(bigger negative number means smaller positive number (absolute value)),
#we set previous to current and also set a flag indicating that the next loop variable's value
#that is a file name should be set as the xtty (oldest found so far).
elif [[ $f ]]; then xtty=$i; f=
#if $i isnt less that zero (is a file name), and assignment flag is on (1), set xtty and reset the flag.
fi
done
#we have the oldest (according to its change time - is it the right way? I am not sure!) pts file now.

if [[ $xtty != n && $(mesg) =~ 'n' ]]; then
mesg y 2>/dev/null
#2>/dev/null is redirecting the command's error output (written to the stderr) to the `null' device
if [[ $(mesg) =~ 'n'  ]]; then
echo -e "warning: cant enable the message sending.
thus we may not send a message to the X tty at the specified time.
probably you su-ed before invoking the alarm.
if so, change the user to the tty owner (login user) and then execute the alarm again
or enable mesg (with the 'mesg y' command).
probably you must exit from the current user or use the sudo to do so.\n"
else mesg n
fi
fi
#if tty owner isnt the current user (we have su-ed) sending message with the `write' program
#would fail if the tty's message receiving/sending is disabled; another user cant change that
#(but superuser always can!).
#we only issue a warning to inform the user and continue.
#note: you can put the `mesg y' command in your bashrc file (user or system-wide) to solve this problem.

if ! sox -q -t nul /dev/zero -v 0 -t alsa default synth 0.01 2>/dev/null; then
echo -e 'warning: apparently alarm sound cant be played.\ncheck if you can play sounds under this user.\n'
fi
#you must have `sox'! our program uses `sox' to generate an alarm sound on the fly.
#although you may replace it with another method/program if you wish; I think it is not hard at all.
#since I had sound problems with my system (when several accounts are involved concurrently)
#I wrote this test so that before going to the sleep we can inform ourselves and the user of that
#the alarm sound cant be played. sound is really important! but again we dont stop and continue.
#you can solve the sound problem (if you succeed please tell me too),
#change the user (probably with su), or you may havent sound at all.

(
#this open brace creates a command group containing
#all of the commands after it and before its corresponding close brace.
#commands are executed in a subshell;
#that will be run in the background (because of the `&' after the closing brace) as one job.
#note: process id of this  job will be printed by the shell on the terminal;
#you can use it to kill the job to cancel the alarm.

: hmalarm
#this command does nothing.
#its rule is just as an identifier for the `disown' command to refer to.

alert="\a\n\n${2:-<<<<<<<>>>>>>>\n<<< Alarm! >>>\n<<<<<<<>>>>>>>}\n"
#set the alert message which will be sent to the terminal and via the write program.
#its value is choosed from the 2rd command line argument
#or a default value if no (non-empty) command line message argument is specified.
#it also includes a terminal beep! (\a)

sleep $t
#wait $t seconds. next lines are not executed until sleep is finished.

echo -e "$alert"
#its time to wake up!
#we send alert message to the attached terminal, if any
#(terminal may be closed before sleep was finished; even the user may be logged out).

f=
xtty=n
p=-99999999999
for i in $(find /dev/pts/ -mindepth 1 -user $tty_owner -printf '-%C@ %f '); do
if [[ $i -lt 0 ]]; then
if [[ $i -gt p ]]; then  p=$i; f=y; fi
elif [[ $f ]]; then xtty=$i; f=
fi
done
#we search for xtyy again (after sleep)
#see a detailed explanation of this code above.
#user may have done some actions during the sleep time.
#e.g. logged out, logged in (with X) for the first time after invoking alarm, logged out
#and after some other users logged in (thus its xtty would probably be different).
#we dont want to send its alert message to another user.

#-----------------------
if [[ $xtty != n ]]; then
#we will attempt to send the alert message to ourselves via the first pts (that brings a box in X).
#or no (condition=false) if no pts related to the alarm invoking user were found.
if [[ $(mesg) =~ 'y' ]]; then mesg='y'; else mesg='n'; fi
#we want to send an alert message to ourselves;
#so we must turn mesg on before doing so (although it may be on already).
#note that this has an effect only when attached tty isnt closed yet.
#thus we save its current setting, so that we can restore it to its previous setting after doing our job.
mesg y 2>/dev/null
#enables the message receiving/sending (we need only sending)
echo -e  "$alert" | write $tty_owner /dev/pts/$xtty 2>/dev/null
#sends the alert message with the `write' program.
mesg $mesg 2>/dev/null
#restores the mesg setting
fi
#------------------------

if [[ $(id -u) != 0 ]]; then sox -q -t nul /dev/zero -t alsa default synth 2 square 100-4000 repeat 2 2>/dev/null &
else nice --7 sox -q -t nul /dev/zero -t alsa default synth 2 square 100-4000 repeat 2 2>/dev/null &
#if alarm is executing under superuser its better to increase its scheduling priority with the nice program
fi
#generating an alarm sound on the fly, thanks to sox.
#nice increases its process priority so that it dosnt play interrupted.
#at least my system is so weak that such command line generated sounds are interrupted easily.
#but if we have not executed it under superuser privileges, we cant set a negative niceness.

if [[ $3 ]]; then eval "$3 &"; fi
#executes an optional arbitrary external command passed via the 3rd argument on the command line.
#note that if you dont specify that `&', the subshell will remain until the external program exits (see its process tree).
#regardless of it, we need quoting too, even if we havent an `&' (test with something like "echo '1 2          3'").

) &
# this `&' causes the command group to be ran in the background;
#and your shell's prompt will be ready immediately.

disown '%?hmalarm'
#the final small, but important command.
#we disown this job (command group identified by 'hmalarm')
#so that exiting the shell dosnt kill our alarm process.
#it survives independently almost in every (normal) situations
#(whats an exception to this? do you know? if so please tell we too).
#even if the user has logged out, yet the alarm process runs.
#but at least in my system there was some problems with the alarm sound in these situations;
#so check it carefully before relying on it;
#as a special case also check to see if other GUI logins with other user accounts have any effects on it.
#of course the user can kill the alarm process with some administrative tool if he wants
#(e.g. with the `kill' program, process management GUIs of DEs, etc.)
}

این برنامه حداکثر ۳ پارامتر میگیره که همه اختیاری هستن.
پارامتر اول زمان هست؛ پارامتر دوم پیغامی هست که نمایش داده میشه (موقعی که زمان تعیین شده میرسه)؛ و پارامتر سوم یک خط فرمان هست که میتونیم تعیین کنیم تا موقع رسیدن زمان تعیین شده اجرا بشه (میتونه هر خط فرمان و برنامه ای در محیط متنی یا گرافیکی باشه).
اگر هر پارامتری که میخواد تعیین بشه، فاصلهء خالی یا بقیهء کاراکترهای جداکنندهء خاص رو داره، باید در کوتیشن قرار بگیره.
برنامه بدون پارامتر هم کار میکنه؛ اما صرفا بدون تاخیر عملیات آلارم (اطلاع رسانی) رو انجام میده.
اطلاع رسانی هم از چند طریق بطور همزمان هست: یک پیغام بسادگی با فرمان echo به ترمینالی که آلارم رو set کرده فرستاده میشه (که اگر این ترمینال هنوز باز باشه، پیغام درش دیده میشه)؛ یک پیغام توسط برنامهء write به خود کاربر ارسال میشه که طوری که روی سیستم بنده هست و تست کردم در محیط گرافیکی توسط یک پنجرهء مربوطه به اطلاع کاربر میرسه؛ یک صدای آلارم قوی پخش میشه؛ در نهایت اگر برنامه ای برای اجرا تعیین شده باشه اونهم اجرا میشه.
توجه کنید که این برنامه در محیط فدورا ۵، با BASH تست شده.
برای کارایی مطمئن تر با این برنامه، احتمالا باید فرمان mesg y رو هم به bashrc خودتون اضافه کنید.
البته این فقط درحالتی مهم هست که شما از خط فرمان کاربران su شده میخواید آلارم رو اجرا کنید؛ چون در اینصورت اگر mesg فعال نباشه، برنامه نمیتونه فعالش کنه و پیغام رو بفرسته (چون tty owner نیست)؛ البته درصورتی که کاربر جاری superuser نباشه. البته در نهایت این فقط یک پیغام هست و نه چیز دیگه، ضمن اینکه این پیغام روی ترمینالی که برنامه ازش اجرا شده هم فرستاده میشه، صدا هم که پخش میشه اگر مشکلی با پخش صوت نداشته باشیم.

از نظر و پیشنهاد شما دربارهء این برنامه خوشحال میشم.
ضمنا اگر روی سیستم و شرایط شما مشکل و نقصی بود یا باگی در برنامه پیدا کردید و همچنین سوال داشتید و غیره، لطفا درمیان بگذارید.
این برنامه دوره و تست شده، ولی بازهم ممکنه جایی از دست در رفته باشه و باگ و نقصی داشته باشه؛ ممکنه بعدا بازهم تغییر کنه (اگر تغییر کرد پست رو ویرایش میکنم). بهرحال تازه برای کار خودم روی سیستم نصبش میکنم؛ فعلا آخرین نتیجهء نهایی رو که بدست اومده درج کردم.


Only God

I Wish I Was Buddha
کاش بودا بودم

Live And Let Live
زندگی کن و بگذار زندگی کنند

Forgive And Be Forgiven
ببخش و بخشیده شو

مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2008-11-17, 06:08 PM,
ارسال : #25
 
همه ما در ویندوز با نرم‌افزارهای دریافت websiteکار کرده‌ایم، دست‌کم اسمWebZip یا WebsiteDownloader به‌گوشمان خورده است و کمابیش با کارشان آشنایی داریم.
اما برای دریافت کامل یک وبگاه در لینوکس چه طور می‌توان این کار را کرد؟

برای دریافت کامل یک website، به‌منظور مشاهده آفلاین یا هر چیز دیگری، با کمک wget می‌توان کار را پیش برد.

کد :
wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains website.org --no-parent www.website.org/tutorials/html/

این دستور وب‌سایت زیر را به طور کامل دانلود می‌کند.

http://www.website.org/tutorials/html/

انتخاب‌هایی (Option) که در این دستور استفاده کردیم، بدین شرح است:

recursive -- : تمام وب‌سایت را دانلود کن.

domains website.org-- : لینک‌های خارج از دومین website.org را دنبال نکن.

page-requisites --: تمام عناصر موجود در صفحه را دریافت کن (تصاویر، css و از این دست چیزها).

html-extension --: فایل را با پسوند .html ذخیره کن.

convert-links--:لینک‌ها را طوری تبدیل کن که بشود به‌طور آفلاین ازشان استفاده کرد.

restrict-file-names=windows --: اسم فایل‌ها را طوری عوض کن که در ویندوز هم کار کنند.

no-clobber--:هیچ فایلی را بازنویسی نکن (در مواردی به‌کار می‌رود که دانلود قطع شده باشد و بخواهد مجدداً از سر گرفته شود).

no-parent --: یعنی مسیرهای بالاتر از/tutorials/html را باز نکن.
پیوند خبر:
http://www.jamejamonline.ir/papertext.as...0949685508

==========

نقل شده از: http://foss.ir/modules.php?op=modload&na...=0&thold=0


Only God

I Wish I Was Buddha
کاش بودا بودم

Live And Let Live
زندگی کن و بگذار زندگی کنند

Forgive And Be Forgiven
ببخش و بخشیده شو

مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2009-02-15, 04:05 AM,
ارسال : #26
 
افراد مسلط به شل و خط فرمان، ماهیت و قدرت واقعی شل و برنامه های خط فرمان لینوکس رو نشون دادن.

وقتی بشناسیش دیگه نمیتونی ولش کنی. فقط علاقهء همینطوری نیست. بلکه ازش کار برمیاد. کارهایی که توی محیط دیگه ای نمیشه به این راحتی کرد و گاهی خیلی سخت و حتی غیرممکنه.
شل و برنامه های خط فرمان بخصوص خیلی بدرد برنامه نویسها و ادمین های قهار هم میخورن. بخصوص برنامه نویسهای حرفه ای که خیلی بیشتر خودشون تمام کد رو ایجاد و ترکیب میکنن.
بعضیا فکر میکنن اونها همهء کد ایجاد شده رو تایپ میکنن، اما جالب اینه که خیلی وقتها درواقع مقدار چیزی که تایپ میکنن درمقابل مقدار کد تولید شده خیلی کمتر هست و سرعت زیادی هم در برنامه نویسی دارن.
من خودم در تایپ کردن کد خیلی بی میل هستم و بخش عمدهء کار رو با کپی و پیست انجام میدم (البته بدینوسیله ادعا نمیکنم که برنامه نویس خبره ای هستم!!). به تجربه متوجه شدم که کارایی این روش خیلی بیشتر هست و در تایپ دستی اطمینان کم هست و خطا و باگهای آشکار و پنهان زیادی میتونه ایجاد بشه و وقت زیادی هم تلف میشه.
بنظر من حتی انجام کارهایی که در محیطهای مجهز مخصوص و مثلا ویژوال هم کاملا و بصورت عادی و استانداردی قابل انجام هستن، خیلی وقتها میتونه در روش هوشمندی که ابزارهای عمومی تر برنامه نویسی رو همزمان با خط فرمان و روشهای هوشمندانهء ترکیب بکار میگیره سریعتر باشه.
کپی و پیست کردن و ویرایش هوشمندانهء کد از یک رفرنس یا بخش برنامه به بخش دیگهء برنامه فقط یک بخش از یک کدنویسی هوشمندانه هست.
برنامه نویسی اغلب درگیر مسایل متعدد خارج از محیط ادیتور متن هم میشه که باید شناسایی و پیدا بشن و اغلب به درون محیط متن کشیده بشن.
من بعنوان یک برنامه نویس وب تاحالا استفاده های زیادی از خط فرمان کردم.
امروز یک مورد جالب دیگه این بود که باید یکسری فایل رو از یکسری دایرکتوری ابتدا پیدا کرده و بعد در یک آرایه جاوااسکریپت درج میکردم. کار مربوط به یک سایت میشد که برنامه نویسان اصلی فراموش کرده بودن امکانی رو در تک تک صفحات متعدد لازمه قرار بدن. شاید چون متوجه شده بودن که طاقت فرسا و زمانبر هست!!

با برنامه find در خط فرمان هم فایلها مورد نظری رو پیدا میکردم (که اسمشون الگوی خاصی داشت)، بدون اینکه چیزی از قلم بیفته (اگر خودمون با چشم نگاه میکردیم یا حتی در محیط گرافیکی سیستم عامل جستجو میکردیم امکانش خیلی بیشتر بود)، و هم با آپشن -printf برنامهء find خروجی رو طوری فرمت میکردم که مستقیما بصورت فرمت آرایهء جاوااسکریپت مورد نظر باشه و کوتیشن و کاما هم برام تایپ شده باشه و از همون محیط کنسول مستقیما کپی کرده و داخل فایل HTML پیست کنم و لازم نباشه خودم با کلیدهای مکان نما اینور و اونور برم و کوتیشن و کاما اضافه کنم.
تعداد این فایلها و دایرکتوریها اونقدری زیاد بود که تمام این عملیات صرفه جویی قابل توجهی در وقت و انرژی ایجاد کنه. ضمنا فکر کنید با یک کاراکتر کم و زیاد و پس و پیش میتونه مشکل پیش بیاد؛ مشکلاتی که گاهی قابل تشخیص هم نیستن، چون ظاهرا خطایی پیش نمیاد، اما برنامه ناقص یا باگدار میشه.
مثلا آرایه های من مربوط به Preload کردن تصاویر منوهایی بودن که اگر هم اسم تصاویر درست تایپ نشده بودن یا چیزی از قلم افتاده بود لزوما تشخیص داده نمیشدن، چون ظاهر صفحه چیزی رو نشون نمیداد و حتی تمام بخشهای صفحه ظاهرا درست کار میکرد. یک تست جامع و دقیق عملی هم صرف نظر از امکانات و هوشمندی لازم برای ایجادش، برای تشخیص چنین مواردی علاوه بر اینکه خودش مستعد خطا هست وقت و انرژی زیادی صرف میکنه.

نگاه کردن دقیق و دوباره و دوبارهء کدها و چک کردن همه چیز و همهء عملیات انجام شده هم ضمن اینکه وقتی کارگر بی مزد و مواجب ما (رایانه) میتونه برامون انجامشون بده ظلم درحق چشمان عزیز ماست، اتلاف وقت و انرژی در راهی هست که خودش باز قطعیتی نداره و جای خطا درش هست.

خب اینبار بازهم من کار رفع نقص کدهای دیگران رو انجام دادم (واسه سایت داییم!). اما حالا اگر روزی خودم خواستم سایتی رو طراحی کنم و چنین شرایطی داشتم میگم: خب Preload رو توی دفترچهء یادداشتم مینویسم تا دست آخر با خط فرمان خیلی سریعتر و راحتتر درستش کنم!!

تمام اینا که گفتم بخاطر این بود که:

۱- بعضی فکر میکنن اون خط فرمان بی ریخت و بدوی چیست و بعضیای دیگه لابد مرض دارن یا قدیمی پسند هستن که باهاش کار میکنن؛ درحالیکه قضیه خیلی وقتها میتونه چیز دیگه ای باشه و بعکس افرادی که در سوی دیگر هستن حق دارن فکر کنن که دیگران بدون خط فرمان چطوری با مشقت زندگی میکنن!!

۲- قابلیت ها و امکانات و روش های قدرتمند و پیشرفتهء استفاده از خط فرمان در برنامه نویسی رو متذکر بشم.


Only God

I Wish I Was Buddha
کاش بودا بودم

Live And Let Live
زندگی کن و بگذار زندگی کنند

Forgive And Be Forgiven
ببخش و بخشیده شو

مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


رفتن به انجمن :


کاربران در حال مشاهده موضوع : 1 مهمان