تجربه‌های مفید و کاربردی Linux و Weblogic

این وبلاگ برای به اشتراک گذاشتن تجربه‌های کسب شده مرتبط با سیستم عامل Linux و weblogic می‌باشد.

تجربه‌های مفید و کاربردی Linux و Weblogic

این وبلاگ برای به اشتراک گذاشتن تجربه‌های کسب شده مرتبط با سیستم عامل Linux و weblogic می‌باشد.

۴ مطلب در شهریور ۱۳۹۷ ثبت شده است

  • ۰
  • ۰

tar hidden files in linux

شما اگر دستور tar  را با استفاده از * اجرا کنید، tar فایل‌های hidden را نادیده می‌گیرد و آن‌ها را tar نمی‌کند. راه حل ساده‌ی این موضوع استفاده از "." به جای "*" است.

 

#(cd /home/mahmoud/Desktop ;tar cvf - .) | (cd /root/; tar xvf -)

 

دستور بالا محتویات Desktop کاربر mahmoud را در /root کپی می‌کند (شامل فایل‌های hidden در Desktop)

 

ولی اگر دستور به شکل زیر استفاده می‌شد تنها فایل‌های غیرhidden را کپی می‌کرد:


#(cd /home/mahmoud/Desktop ;tar cvf - *) | (cd /root/; tar xvf -)

  • Mahmoud Kazemi
  • ۰
  • ۰

زمانی که شما فایل بزرگی برای کپی کردن دارید. بعد از زدن دستور کپی شما سنسی نسبت به میزان کپی انجام شده ندارید، مگر اینکه به مقصد کپی رجوع کرده و مدام با دستوراتی مانند ls یا du از روند کپی باخبر شوید.

ابزار مناسبی با نام pv جهت این پایش وجود دارد. این ابزار یک progress bar و copy rate و میزان کپی انجام شده و میزان زمان سپری شده را به شما نشان می‌دهد.

syntax کلی این ابزار به شکل زیر است:

pv filename
pv filename > /path/to/output
pv options filename | command1
pv options filename | command1 > output.file
pv filename | command1
command1 | pv | command2
pv -options input.file | command1 | pv -options > output.file


ما در اینجا به چند مثال ساده و کاربردی اشاره خواهیم کرد:

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

اصلاحیه:

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

#SRC="/source/folder"; TRG="/target/folder/"; tar cf - "$SRC" | pv -s $(du -sb "$SRC" | cut -f1) | tar xf - -C "$TRG"

اگر می‌خواهید یک فایل با نام RealPerson_History_970508.rar را به نام Real.rar کپی کنید می‌توانید از دستور زیر استفاده کنید:

[root@mahmoud-pc ‍‍‍~]# pv RealPerson_History_970508.rar > Real.rar
23MB 0:00:02 [ 106MB/s] [========>                                                                                                            ]  5% ETA 0:00:32

شما می‌توانید با استفاده از سوئیچ L برای دستور کپی transfer rate تعیین کنید :

[root@mahmoud-pc ‍‍‍~]# pv -L 1m RealPerson_History_970508.rar > Real.rar
23MB 0:00:02 [ 106MB/s] [========>                                                                                                            ]  5% ETA 0:00:32

که باعث می‌شود حداکثر سرعت کپی شما ۱مگابایت بر ثانیه باشد.


اگر قصد کپی دایرکتوری را دارید می‌توانید از دستور tar و ترکیب آن با pv  استفاده کنید (مزیت tar این است که جزء ابزارهای backup گیری است و از مزایای این ابزارها بهره می‌برد)


[root@mahmoud-pc~]# (cd /home/mahmoud/ ; tar cf - .) | pv  | (cd /home/testuser ; tar xf -)
61MB 0:00:02 [14.8MB/s] [        <=>                                                                                                                  ]

خیلی مختصرا با این موضوع پرداخته شد ولی بیشتر منظور از این مطلب آشنایی دوستان با این ابزار و طرز کار آن و همینطور یادگیری tarدوبل (به جهت کپی فایل و دایرکتوری) بود.


با سپاس




  • Mahmoud Kazemi
  • ۰
  • ۰

ASM configuration to use multipath

ارتباط multipath و oracleasm

برای اینکه شما از قابلیت multipath و یا سرویس‌هایی از این قبیل مانند powerpath برای کاهش ریسک افتادن اوراکل خود می‌خواهید بهره ببرید، تنها نصب و کانفیگ Multipath کافی نمی‌باشد. شما می‌بایست ASM خود را نیز برای کار با سرویس Multipath تطبیق دهید. ما زمانی از Multipath استفاده می‌کنیم که مسیر (path)های زیادی (بیشتر از یک مسیر) از سیستم عامل به دیسک‌های اوراکل برقرار باشد.

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

وقتی دیسکی پشت سرویس Multipath قرار می‌گیرد یک نام مانند mpatha به آن اختصاص می‌یابد که به‌طور مثال دو مسیر sdb و sdc برای دیسک موردنظر موجود می‌باشد. در نتیجه این دیسک در سیستم عامل با سه نام sdb,sdc,mpatha دیده می‌شود. اگر شما asm را برای این منظور کانفیگ نکرده باشید و آن را با کانفیگ پیش‌فرض رها کرده باشید هیچ تضمینی وجود ندارد که به سراغ کدام مسیر برود و از آن استفاده کند. اگر به صورت تصادفی از maptha استفاده کند شما به صورت تصادفی سرویس multipath  را در بازی دارید ولی اگر هر مسیر دیگری را انتخاب کند دیگر شما از قابلیت‌های multipath برخوردار نخواهید بود. برای کانفیگ asm کافی‌ست شما در فایل /etc/sysconfig/oracleasm دو خط زیر را اضافه کنید:

ORACLEASM_SCANORDER="dm"

ORACLEASM_SCANEXCLUDE="sd"

مقادیر موجود بین “” به عنوان prefix درنظر گرفته می‌شوند.

با استفاده از مغیر اول شما اولویت scan دیسک‌های خود را مشخص می‌کنید، به این معنی که به asm می‌گویید که نخست به سراغ مسیرهای multipath برود.

با استفاده از متغیر دوم شما به asm می‌گویید که دیسک‌هایی که با sd شروع می‌شوند را در فرآیند scan نادیده بگیرد و به این ترتیب از اختصاص مسیرهای غیرmultipathی به asm جلوگیری می‌کند.

مشکلی که برای من پیش آمده بود این بود که بعد از کانفیگ asm برای استفاده از multipath ، باز هم asm به سراغ لایه‌ی multipath نمی‌رفت و مسیرهایی از قبیل sdb را به عنوان دیسک asm خود درنظر می‌گرفت. پس از کمی جستجو متوجه شدم فایل /etc/sysconfig/oracleasm در اصل یک symbolic link به فایل /etc/sysconfig/oracleasm-_dev_oracleasm  است که این لینک شکسته شده است. که در ابتدا مجبور به پاک کردن فایل /etc/sysconfig/oracleasm و پس از آن ساخت یک لینک جدید شدم که باعص برطرف شدن مشکل شد.

#ll /etc/sysconfig/oracleasm*

lrwxrwxrwx  1 root root  24 Dec 20  2013 /etc/sysconfig/oracleasm -> oracleasm-_dev_oracleasm

-rw-r--r--. 1 root root 976 May 21  2014 /etc/sysconfig/oracleasm-_dev_oracleasm

 

حال از کجا بفهمیم که asm آیا از سرویس multipath استفاده می‌کند یا خیر؟

دستور

Oracleasm listdisks لیست دیسک‌های asm را به ما می‌دهد.

احتمالا با دستور

Oracleasm querydisk –p

آشنایی دارید. این دستور در اصل لیست دیسک‌های متناظر دیسک‌های ASMی را در سیستم عامل به ما می‌دهد. این دستور در این مورد به شما کمکی نخواهد کرد چرا که مثلا برای شما برای دیسک DATA01 در ASM خروجی با سه خط

DATA01 is a valid disk on mpatha

….                                            On sdb

                                             on sdc

مشاهده خواهید کرد. هر سه مسیر به یک دیسک منتهی می‌شوند ولی ASM از کدام مسیر استفاده می‌کند؟

با استفاده از سوئیچ d  در دستور Oracleasm querydisk  شما خروجی مانند زیر خواهید یافت

Disk "DATA01" is a valid ASM disk on device [253,200]

و سپس با استفاده از دستورات زیر(و major-minor number)دقیقا مشاهده خواهید کرد که آیا asm در حال حاضر از سرویس multipath شما استفاده می‌کند یا خیر

#cat /proc/partitions | grep "\ 253\ " | grep "\ 200\ "

253      200  461371392 dm-200

                                                                                                                                                                                               

#ll /dev/* | grep dm-200

brw-rw----  1 root disk    253, 200 Sep  2 11:26 /dev/dm-200

lrwxrwxrwx 1 root root 9 Sep  2 11:26 253:200 -> ../dm-200

lrwxrwxrwx 1 root root      9 Sep  2 11:26 mpathcwp1 -> ../dm-200

هماگونه که مشاهده می‌فرمائید در حال حاضر asm از سرویس multipath استفاده می‌کند.

اگر اینگونه نبود شما زمانی که را اجرا می‌کردید نتیجه‌ای مانند زیر می‌یافتید:

# cat /proc/partitions | grep "\ 70\ " | grep "\ 65\ "

  70       65  461371392 sdcw1

که به وضوح می‌گوید که asm مسیر sdcw را برای کار برگزیده است.

  • Mahmoud Kazemi
  • ۰
  • ۰

split big text file

امروز میخواستم یک تجربه ساده را با شما در میان بگذارم. امروز یک تکست فایل با حجم ۲۰ گیگابایت به دستم رسید. باز کردن این فایل بخاطر حجم زیادش با مشکلات و کندی روبرو خواهد شد. حتما دوستان برای رهایی از این مشکل از ابزارهایی مثل head و tail استفاده کرده‌اند. اینبار بنده از ابزار split برای تقسیم این فایل بزرگ به قطعات کوچک‌تر استفاده کردم که از syntax ساده‌ای برخوردار می‌باشد.

Syntax

split [options] filename prefix

ممکنه شما بخواهید فایل خودتون رو بر اساس تعداد خطوط یا حجم فایل تقسیم‌بندی کنید. ولی اگر شما از دستور split با پیش‌فرض‌های default آن استفاده کنید فایل شما رو بر اساس تعداد خطوط (۱۰۰۰) به قطعات کوچک‌تر تقسیم می‌کند و برای Prefix از x استفاده می‌کند (‌به این صورت که بعد از x از aa شروع و به ترتیب ab و .... تا zz را برای فایل‌ها نامگذاری خواهد کرد).

اگر بخواهید فایل خود را بر اساس تعداد خطوط دلخواه تقسیم کنید از سوئیچ l استفاده کنید:

# split -l 200 systemlog
# ll
total 172
-rw-rw-r-- 1 root root 76294 Mar 25 12:02 systemlog
-rw-r--r-- 1 root root 14369 Mar 25 12:16 xaa
-rw-r--r-- 1 root root 12795 Mar 25 12:16 xab
-rw-r--r-- 1 root root 13566 Mar 25 12:16 xac
-rw-r--r-- 1 root root 13681 Mar 25 12:16 xad
-rw-r--r-- 1 root root 13840 Mar 25 12:16 xae
-rw-r--r-- 1 root root 8043 Mar 25 12:16 xaf
# cat xaa | wc -l; cat xab | wc -l; cat xac | wc -l; cat xad | wc -l; cat xae | wc -l; cat xaf | wc -l
200
200
200
200
200
99

و اگر بخواهید بر اساس سایز فایل آن را تقسیم کنیم می‌توانیم از سوئیچ b استفاده کنیم:

# split -b 500MB httpd.log
# ll -lh
total 1.9G
-rw-r--r-- 1 root root 954M Mar 25 12:35 httpd.log
-rw-r--r-- 1 root root 477M Mar 25 12:38 xaa
-rw-r--r-- 1 root root 477M Mar 25 12:38 xab

یا می‌توانید به‌جای MB از GB استفاده کنید.

با استفاده از سوئیچ d می‌توانید از 00 01 02 ... به‌جای aa, ab , ac ,.... به عنوان suffix استفاده کنید:

# split -d -b 200M httpd.log log
# ll -lh
total 1.9G
-rw-r--r-- 1 root root 954M Mar 25 12:35 httpd.log
-rw-r--r-- 1 root root 200M Mar 25 12:58 log00
-rw-r--r-- 1 root root 200M Mar 25 12:58 log01
-rw-r--r-- 1 root root 200M Mar 25 12:58 log02
-rw-r--r-- 1 root root 200M Mar 25 12:58 log03
-rw-r--r-- 1 root root 154M Mar 25 12:58 log04



مرجع:

https://linoxide.com/linux-how-to/split-large-text-file-smaller-files-linux/

  • Mahmoud Kazemi