Bash etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Bash etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
20 Ocak 2015 Salı
Linux / Unix : /dev/null Error Redirection and Other /dev files
What is the usage of " command > /dev/null 2>&1"?
/dev/null is a file which takes the input and doesn't print anything in return. /dev/null is kind of a garbage which doesn't have a limit. Therefore we could send anykind of error message in it and not be bothered.
"2" is the STDERR which is standard errors.
"1" is the STDOUT which is standard output.
We have 3 kind of output showed in the screenshot below.
find . -name scripts 2>&1: This command has the purpose of searching a file or folder named scripts. it also tells that all the errors to be showed in the screen
find . -name scripts 2>/dev/null: In here we are sending all the errors to our garbage. With this command we are preventing any kind of errors to be showed in the screen.
find . -name scripts > /dev/null 2>&1: This command all together stops printing the messages on the screen.
What else are there besides /dev/null ?
There are a whole lot of files besides it. Our Reference-1 tells all about it. But we can say that /dev/null is the most used one.
References:
1- /dev files - http://www.linux.org/threads/what-are-those-dev-files.4713/
2- Standard output - http://www.codecoffee.com/tipsforlinux/articles2/042.html
8 Ocak 2015 Perşembe
Linux / Unix : Port Checking - Port Control - Closing Ports - Açık Portları Görme
To find out which process is listening which port, we can use netstat.
There are various commands but netstat is enough:
Netstat - a command-line tool that displays network connections, routing tables, and a number of network interface statistics.
There are various commands but netstat is enough:
Netstat - a command-line tool that displays network connections, routing tables, and a number of network interface statistics.
Fuser - a command line tool to identify processes using files or sockets.
How to kill the process listening the open port?
Actually it is quite easy after you find the process id which is listening the port. For example according to the following output, we take the process id next to the service.
We then kill the process with kill command:
kill -9 1121
After we issue the netstat -a | grep 6100 command again, we wouldn't be seeing any service that is listening to that port.
lsof - a command line tool to list open files under Linux / UNIX to report a list of all open files and the processes that opened them.
[applmgr@T1VSTEBSAPP01 bea]$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:1626 0.0.0.0:* LISTEN 1545/tnslsnr
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5904 0.0.0.0:* LISTEN 1202/Xvnc
tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:6003 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6100 0.0.0.0:* LISTEN 1121/opmn
tcp 0 0 0.0.0.0:6004 0.0.0.0:* LISTEN 1202/Xvnc
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 :::6200 :::* LISTEN 1121/opmn
tcp 0 0 ::ffff:10.222.8.56:7801 :::* LISTEN 3132/java
tcp 0 0 ::ffff:10.222.8.56:12345 :::* LISTEN 2994/java
tcp 0 0 ::ffff:10.222.8.56:7001 :::* LISTEN 566/java
tcp 0 0 :::4443 :::* LISTEN 1195/httpd.worker
tcp 0 0 :::8000 :::* LISTEN 1195/httpd.worker
tcp 0 0 ::ffff:10.222.8.56:7201 :::* LISTEN 3174/java
tcp 0 0 ::ffff:10.222.8.56:7401 :::* LISTEN 3152/java
tcp 0 0 :::9999 :::* LISTEN 1195/httpd.worker
tcp 0 0 ::ffff:10.222.8.56:7601 :::* LISTEN 3147/java
tcp 0 0 :::6002 :::* LISTEN -
tcp 0 0 :::6003 :::* LISTEN -
tcp 0 0 ::1:6100 :::* LISTEN 1121/opmn
tcp 0 0 ::ffff:10.222.8.56:5556 :::* LISTEN 550/java
tcp 0 0 :::6004 :::* LISTEN 1202/Xvnc
tcp 0 0 :::22 :::* LISTEN -
To directly find out the information, the command below will be helpful:
$ netstat -tulpn | grep :80
One other helpful information is that by finding out he process number from the command above, we could verify which program is using this connection. For example port 1626 is used by the PID:1545 and program "tnslsnr". The command above can let us check it even further, although it is written in the output of the netstat command.
ls -l /proc/1138/exe
How to kill the process listening the open port?
Actually it is quite easy after you find the process id which is listening the port. For example according to the following output, we take the process id next to the service.
tcp 0 0 ::1:6100 :::* LISTEN 1121/opmn
We then kill the process with kill command:
kill -9 1121
After we issue the netstat -a | grep 6100 command again, we wouldn't be seeing any service that is listening to that port.
References:
1- Finding out which process is listening upon a port: http://www.cyberciti.biz/faq/what-process-has-open-linux-port/
26 Mart 2014 Çarşamba
Oracle Veritabanı: Bash Script İçerisinde SQL*PLUS ile Değer Girmek - Prompting For Input In Bash Script With SQL*Plus
Önceki yazımızda(Oracle Veritabanı: SQL*PLUS ve Script Etkileşimi - Interaction Between SQL*PLUS and Bash Shell Scripts - Execution of SQL Scripts) Bash Shell'de, SQL script'leriyle nasıl etkileşim haline geçebileceğimizi belirttik. Bu yazımızda da yazdığımız bir Bash Shell script'inin içinde çağırdığımız sql script'ine bir değer atamanın nasıl yapıldığını göstereceğiz.
--------------
#!/bin/bash
ls
sqlplus -s berke/berke <set serveroutput on;
declare
x char;
z char;
begin
select '&x' into z from dual;
dbms_output.put_line(z);
end;
/
exit;
EOF
ls
--------------
Yukarıdaki script içeriğimizde dual tablosundan bir select çekip orada da hangi değeri istediğimizi x değişkenine atıyoruz. Bu script'i çalıştırdığımızda ise bunu başaramıyoruz çünkü bize declare ile başlattığımız programımızın sonundaki yani "/" işaretinden sonraki ilk kelimeyi kendisine değer olarak almaktadır. Bu durumda x değişkenine exit kelimesi atanır.(x=exit) Biz burada kendimize bir değer sorulmasını istiyorsak bunu yapmanın 2 yolu vardır. İlki sql kodunu burada yazmaktansa bir script olarak çalıştırmaktır. 2'si ise dışardan değer olarak almaktır.
1- SQL Script'ini Shell Script İçerisinden Çağırmak:
İlk aşamada bash script'imizi aşağıdaki gibi oluştururuz.
------------
#!/bin/bash
ls
sqlplus -s apps/apps @deneme.sql
-----------
Deneme.sql adlı SQL script'imizi bize girdi(input) sorması için aşağıdaki gibi oluştururuz.
------------------
set serveroutput on;
select '&x' from dual;
exit;
-----------------
Örnek çıktısı aşağıdaki gibidir.
------------------------
Enter value for x: 10
old 1: select '&x' from dual
new 1: select '10' from dual
'1
--
10
------------------------
2- Dışardan Değer Atamak:
Buradaki mantığımızda script'imizin içerisinde kullanacağımız değeri script'e girmeden önce belirleriz. sonrasında SQL*Plus'a bağlandıktan sonra "$"'ı kullanaraktan o parametremizin değerini işleyebiliriz.
------------------------
#!/bin/bash
echo "Deger giriniz: \c"
read y
echo "Degerimiz: "$y
sqlplus -s apps/apps << EOF
set heading off;
set feedback off;
select $y from dual;
exit;
EOF
------------------------
Örnek Çıktı:
------------------------
Deger giriniz \c
10
Degerimiz: 10
10
------------------------
Modülerliği Arttırmak:
Script'imizi modüler yapmak içinse programımız tam bittiği anda değerlerimizi yerleştirebiliriz. Örneğin aşağıdaki programımızda 2 kere değer isteyen sonra da bu değerleri kullanan algoritma bulunmaktadır. Değişkenleri sürekli değiştirmektense programımızın sonuna program içerisinde herhangi bir yerde kullanılacak "a" ve "b" parametreleri için değerleri yerleştirebiliriz. Bu durumda a parametresinin değeri C ve b parametresini değeri D olur.(a='C' ve b='D')
---------------
ls
sqlplus -s apps/apps <set serveroutput on;
declare
d varchar2(10);
f varchar2(10);
begin
select '&a' into f from dual;
DBMS_OUTPUT.PUT_LINE(f);
select '&b' into d from dual;
dbms_output.put_line(d);
end;
/
C
D
exit;
EOF
---------------
Yukarıdaki script ile bash shell script'imizin içine değerlerde yapacağımız küçük değişikliklerle programımızın yönünü değiştirebiliriz.
Scriptimizin sonucu aşağıdaki gibidir.
---------------
Enter value for a: old 7: select '&a' into f from dual;
new 7: select 'C' into f from dual;
Enter value for b: old 9: select '&b' into d from dual;
new 9: select 'D' into d from dual;
C
D
PL/SQL procedure successfully completed.
---------------
Referanslar:
http://www.unix.com/shell-programming-scripting/24394-sqlplus-here-document-eof-vs-eof.html
http://www.oracle-base.com/articles/misc/oracle-shell-scripting.php
http://www.java2s.com/Tutorial/Oracle/0540__Function-Procedure-Packages/OutputtotheSQLplus.htm
--------------
#!/bin/bash
ls
sqlplus -s berke/berke <
declare
x char;
z char;
begin
select '&x' into z from dual;
dbms_output.put_line(z);
end;
/
exit;
EOF
ls
--------------
Yukarıdaki script içeriğimizde dual tablosundan bir select çekip orada da hangi değeri istediğimizi x değişkenine atıyoruz. Bu script'i çalıştırdığımızda ise bunu başaramıyoruz çünkü bize declare ile başlattığımız programımızın sonundaki yani "/" işaretinden sonraki ilk kelimeyi kendisine değer olarak almaktadır. Bu durumda x değişkenine exit kelimesi atanır.(x=exit) Biz burada kendimize bir değer sorulmasını istiyorsak bunu yapmanın 2 yolu vardır. İlki sql kodunu burada yazmaktansa bir script olarak çalıştırmaktır. 2'si ise dışardan değer olarak almaktır.
1- SQL Script'ini Shell Script İçerisinden Çağırmak:
İlk aşamada bash script'imizi aşağıdaki gibi oluştururuz.
------------
#!/bin/bash
ls
sqlplus -s apps/apps @deneme.sql
-----------
Deneme.sql adlı SQL script'imizi bize girdi(input) sorması için aşağıdaki gibi oluştururuz.
------------------
set serveroutput on;
select '&x' from dual;
exit;
-----------------
Örnek çıktısı aşağıdaki gibidir.
------------------------
Enter value for x: 10
old 1: select '&x' from dual
new 1: select '10' from dual
'1
--
10
------------------------
2- Dışardan Değer Atamak:
Buradaki mantığımızda script'imizin içerisinde kullanacağımız değeri script'e girmeden önce belirleriz. sonrasında SQL*Plus'a bağlandıktan sonra "$"'ı kullanaraktan o parametremizin değerini işleyebiliriz.
------------------------
#!/bin/bash
echo "Deger giriniz: \c"
read y
echo "Degerimiz: "$y
sqlplus -s apps/apps << EOF
set heading off;
set feedback off;
select $y from dual;
exit;
EOF
------------------------
Örnek Çıktı:
------------------------
Deger giriniz \c
10
Degerimiz: 10
10
------------------------
Modülerliği Arttırmak:
Script'imizi modüler yapmak içinse programımız tam bittiği anda değerlerimizi yerleştirebiliriz. Örneğin aşağıdaki programımızda 2 kere değer isteyen sonra da bu değerleri kullanan algoritma bulunmaktadır. Değişkenleri sürekli değiştirmektense programımızın sonuna program içerisinde herhangi bir yerde kullanılacak "a" ve "b" parametreleri için değerleri yerleştirebiliriz. Bu durumda a parametresinin değeri C ve b parametresini değeri D olur.(a='C' ve b='D')
---------------
ls
sqlplus -s apps/apps <
declare
d varchar2(10);
f varchar2(10);
begin
select '&a' into f from dual;
DBMS_OUTPUT.PUT_LINE(f);
select '&b' into d from dual;
dbms_output.put_line(d);
end;
/
C
D
exit;
EOF
---------------
Yukarıdaki script ile bash shell script'imizin içine değerlerde yapacağımız küçük değişikliklerle programımızın yönünü değiştirebiliriz.
Scriptimizin sonucu aşağıdaki gibidir.
---------------
Enter value for a: old 7: select '&a' into f from dual;
new 7: select 'C' into f from dual;
Enter value for b: old 9: select '&b' into d from dual;
new 9: select 'D' into d from dual;
C
D
PL/SQL procedure successfully completed.
---------------
Referanslar:
Etiketler:
Bash,
Komutlar,
Linux,
Oracle,
Oracle Veritabanı,
Programlama,
Shell,
Sql,
Unix,
veritabani_islemleri
20 Mart 2014 Perşembe
Oracle Veritabanı: SQL*PLUS ve Script Etkileşimi - Interaction Between SQL*PLUS and Bash Shell Scripts - Execution of SQL Scripts
-Bir bash script'i içerisinden prosedür çağırmak için:
ls
sqlplus berke/berke << eof
select sysdate from dual;
declare
begin
dbms_output.put_line('abcde');
end;
/
exit;
/
eof
ls
Bu script'i çağırdığımızda aşağıdaki gibi bir sonucun çıktığını görebiliriz.
Bu script'in amacı bir bash script içerisinden sql ile sonuç çıkartıp gerekli cevapları alıp devamında işletim sistemi komutlarını girebiliriz. Böyle bir durumla maintenance script'i yazarken karşılaşmıştım. RAM'de hafıza durumu, cpu durumu gibi kontrolleri yaptıktan sonra SQL ile SQL*PLUS'a bağlanıp oradan çeşitli komutlar çalıştırıp yine tekrar işletim sistemine geri dönmek için bu şekilde komut yazmam gerekmişti.
-Klasör içerisindeki SQL script'ini çalıştırmak için kısaca script'imizin başına '@' işaretini ekleyerek devam edebiliriz.
-Sysadmin olarak sql script'inin bash'ten çalıştırılması için aşağıdaki örneğimizi kullanabiliriz.
-Sh içerisinden yani terminalden çok satırlı SQL çalışması:
Yukarıdaki örneğimizden farklı olarak bu sefer terminalden giriş yapmak istediğimizde aşağıdaki kodu kullanabiliriz. Diğer örneğimizde kodumuzu bir text'e yazmaktaydık.
sqlplus berke/berke << -eof
select sysdate from dual;
exit;
/
eof
-SQL*PLUS'ta çalıştırdığımız bir sorgunun sonucunu alıp bir değişkene atamak içinse aşağıdaki örneği kullanabiliriz. Burada "code" adlı değişkenimize değerimizi atamak için değerimizi sqlplus'tan gönderdiğimiz sorguyla atarız.
code=""
code=$(sqlplus -s berke/berke <set heading off;
select sysdate from dual where 1=2;
EOF)
a=$(code)
if [ "$a" == "no rows selected" ]; then
echo "Tarih çıkmadı"
else
echo "Tarih $a"
ls
sqlplus berke/berke << eof
select sysdate from dual;
declare
begin
dbms_output.put_line('abcde');
end;
/
exit;
/
eof
ls
./abcd.sh
abcd.sh addm awr db_control.sh
abcd.sh1 addmrpt.sql awrrpt.sql db_control.sql
SQL*Plus: Release 11.2.0.2.0 Production on Thu Mar 20 15:22:32 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> SQL> SQL>
SYSDATE
---------
20-MAR-14
SQL> 2 3 4 5 abcde
PL/SQL procedure successfully completed.
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
abcd.sh addm awr db_control.sh
abcd.sh1 addmrpt.sql awrrpt.sql db_control.sql
-Klasör içerisindeki SQL script'ini çalıştırmak için kısaca script'imizin başına '@' işaretini ekleyerek devam edebiliriz.
sqlplus berke/berke @abcd.sql
sqlplus -s "/ as sysdba" @$ORACLE_HOME/rdbms/admin/awrrpt.sql
sqlplus berke/berke << -eof
select sysdate from dual;
exit;
/
eof
-SQL*PLUS'ta çalıştırdığımız bir sorgunun sonucunu alıp bir değişkene atamak içinse aşağıdaki örneği kullanabiliriz. Burada "code" adlı değişkenimize değerimizi atamak için değerimizi sqlplus'tan gönderdiğimiz sorguyla atarız.
code=""
code=$(sqlplus -s berke/berke <
select sysdate from dual where 1=2;
EOF)
a=$(code)
if [ "$a" == "no rows selected" ]; then
echo "Tarih çıkmadı"
else
echo "Tarih $a"
Etiketler:
Bash,
Komutlar,
Linux,
Oracle,
Oracle Veritabanı,
Programlama,
Shell,
Unix,
veritabani_islemleri
4 Mart 2014 Salı
Linux / Unix : Svmon Command - Swap Space - Virtual Memory - How To Check Page Swap Size in IBM AIX - Page Swap Size Nasıl Bulunur?
Linux üzerinde bulunan RAM page adı verilen parçalara bölünmektedir. Swap işlemi memory'de bulunan bir page'in disk üzerinde bulunan bir alana kopyalanmasıdır. Bu kopyalama ile RAM'de boşaltılmış olur. Fiziksel hafıza ile bu swap alanının toplamı virtual memory'i oluşturur.
Swap işlemi 2 nedenden ötürü önemlidir. İlki sistemin daha fazla memory'e ihtiyaç duyması halinde, physical memory'de yer yoksa az kullanılan page'ler disk'e kopyalanır ve böylece diğerlerine yer açılır. Diğer bir neden ise bir uygulamanın başta çok büyük bir alanı kendine ayırması ve sonrasında kullanmaması halinde bu alana ihtiyaç duyulmasıdır. Sistem bu ihtiyaç durumunda memory'i swap ederek alan oluşturur.
Swap işleminin dezavantajı disk'lere ulaşımın yavaşlığıdır. Memory'e ulaşım milisaniyeler cinsinden ifade edilirken disk'lere çok daha yavaş erişilir.
Swap Space Ne Kadar Büyük Olmalıdır?
Swap space alanı mutlaka olması gereken bir alandır. Hafıza alanımız yeterince büyük değilse ve hafıza da yer kalmaz ise sistem çöker. Swap space ile ilgili best practice memory'nin 2 katı olmasıdır; ancak bu alan gözlemlenmelidir. Gerekirse büyütülmelidir.
Swap Space Nasıl Kontrol Edilir?
Alan kontrolünü yapabilecek bir sürü komut varken svmon komutu en kullanışlılardandır.
Svmon komutu tek başına kullanıldığında hafızayla ilgili genel bilgileri verir.
Bir Process'in Ne Kadar Alan Kullandığı Nasıl Bulunur?
Örnek kullanımı aşağıdaki gibidir. 30343234 yazan yere kendi PID'imiz konulabilir.
Bu örneği vermemizin sebebi sistemin ihtiyaçlarının belirlenirken bunun sisteme göre yapılmasıdır. Sistemdeki kaynaklar fazla kullanıldığı durumda makine çökebilir.
Swap işlemi 2 nedenden ötürü önemlidir. İlki sistemin daha fazla memory'e ihtiyaç duyması halinde, physical memory'de yer yoksa az kullanılan page'ler disk'e kopyalanır ve böylece diğerlerine yer açılır. Diğer bir neden ise bir uygulamanın başta çok büyük bir alanı kendine ayırması ve sonrasında kullanmaması halinde bu alana ihtiyaç duyulmasıdır. Sistem bu ihtiyaç durumunda memory'i swap ederek alan oluşturur.
Swap işleminin dezavantajı disk'lere ulaşımın yavaşlığıdır. Memory'e ulaşım milisaniyeler cinsinden ifade edilirken disk'lere çok daha yavaş erişilir.
Swap Space Ne Kadar Büyük Olmalıdır?
Swap space alanı mutlaka olması gereken bir alandır. Hafıza alanımız yeterince büyük değilse ve hafıza da yer kalmaz ise sistem çöker. Swap space ile ilgili best practice memory'nin 2 katı olmasıdır; ancak bu alan gözlemlenmelidir. Gerekirse büyütülmelidir.
Swap Space Nasıl Kontrol Edilir?
Alan kontrolünü yapabilecek bir sürü komut varken svmon komutu en kullanışlılardandır.
> svmon
size inuse free pin virtual mmode
memory 2621440 1516979 1104461 695843 1331351 Ded
pg space 524288 11881
work pers clnt other
pin 545891 0 0 149952
in use 1327380 22 189577
PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 571859 6713 213667 382263
m 64 KB - 59070 323 30136 59318
Bir diğer komut da lsps komutudur.>lsps -a
Page Space Physical Volume Volume Group Size %Used Active Auto Type Chksum
hd6 hdisk2 rootvg 28160MB 6 yes yes lv 0
Svmon komutu tek başına kullanıldığında hafızayla ilgili genel bilgileri verir.
>svmon -O summary=basic,unit=MB
Unit: MB
--------------------------------------------------------------------------------------
size inuse free pin virtual available mmode
memory 10240.00 5922.37 4317.63 2717.96 5197.25 4587.64 Ded
pg space 2048.00 46.4
work pers clnt other
pin 2132.21 0 0 585.75
in use 5181.73 0.09 740.55
Bir Process'in Ne Kadar Alan Kullandığı Nasıl Bulunur?
Örnek kullanımı aşağıdaki gibidir. 30343234 yazan yere kendi PID'imiz konulabilir.
svmon -P 30343234 -O summary=basic,unit=MB
Bu örneği vermemizin sebebi sistemin ihtiyaçlarının belirlenirken bunun sisteme göre yapılmasıdır. Sistemdeki kaynaklar fazla kullanıldığı durumda makine çökebilir.
28 Şubat 2014 Cuma
Linux / Unix : Shell Scripting Parametreler ve Değişkenler - Shell Scripting Parameters and Variables
Değişkenler ve parametreler programlama dillerinin datayı gösterme şekilleridir. Değişkenler birer etiket gibidirler. Bilgsayarın memory'sine atanmış bir alanı temsil ederler. Değişkenler aritmetik işlemler de ve string(yazı) işlenmesinde kullanılırlar.
Burada değişkenin değerini görebilmek için $ ifadesi kullanmamız gerekir. Eğer kullanmazsak direk olduğu gibi kullanılır.
Değişkenin çift tırnak işareti içinde kullanılması önemli değildir; ancak tek tırnak içinde kullanılırsa o zaman değişken referansı kaldırılır.
Bir komutun sonuçlarının bir parametreye yüklenmesi için de aşağıdaki gibi yapılır.
Çift tırnak konmaz ise çıktı yan yana gösterilir.
Boşlukların korunması için çift tırnak kullanırız.
Değişken Tipleri:
Shell script'lerinde değişkenlerin tipleri bulunmamaktadır. Bu değişkenler özetle karakter string'leridir. Sadece duruma göre bu parametreler üzerinde aritmetik operasyonlar yapılabilmektedir.
Null değişkenlerin tanımlanması aşağıdaki gibi olabilir. Sonrasında bununla ilgili işlem yapabiliriz.
Bir değişken oluşturulması programın herhangi bir aşamasında aşağıdaki şekildeki gibi olabilir; ancak bu kodun okunulabilirliğini bozar.
Özel Değişkenler:
Script içerisinde scriptin adını değişkenlerini ve bulunduğu klasörü gösteren parametre ifadeleri bulunur. Aşağıda bununla ilgili bir örnek görebiliriz.
Bu örneğimizde $# ifadesiyle parametre sayısını, $* ile bütün parametrelerimizi, $0 ile script'imizin adını, $1 $2 $3 ...${10} değişkenleriyle de script'imize parametre olarak eklediğimiz değerleri görebiliriz. 9. parametreden sonrasını {} işaretleri arasına almalıyız.
Burada değişkenin değerini görebilmek için $ ifadesi kullanmamız gerekir. Eğer kullanmazsak direk olduğu gibi kullanılır.
>variable1=23
>echo variable1
variable1
> echo $variable1
23
Değişkenin çift tırnak işareti içinde kullanılması önemli değildir; ancak tek tırnak içinde kullanılırsa o zaman değişken referansı kaldırılır.
> echo '$variable'
$variable
Bir komutun sonuçlarının bir parametreye yüklenmesi için de aşağıdaki gibi yapılır.
>a=$(ls -l)
veya
>a=`ls -l`
Çift tırnak konmaz ise çıktı yan yana gösterilir.
echo $a
total 2720 drwx--x--x 2 oracle oinstall 256 Aug 13 2013 Mail -rwxr-x--- 1 oracle oinstall 73 Feb 28 15:22 a.sh -rw-r--r-- 1 oracle oinstall 605169 Feb 21 11:29 abc.html -rwxrwxrwx 1 oracle oinstall 2466 Feb 28 16:15 abc.log -rw-r--r-- 1 oracle oinstall 3116 Feb 25 2013 adstats.sql -rw-r--r-- 1 oracle oinstall 705299 Feb 05 09:31 awrrpt.html drwxr-xr-x 4 oracle oinstall 4096 Feb 28 09:27 control_scripts -rw-r--r-- 1 oracle oinstall 40224 Feb 14 2013 core drwxr-xr-x 3 oracle oinstall 256 Jan 08 2013 oradiag_oracle -rw-r--r-- 1 oracle oinstall 304 Jan 08 2013 profile.11g.db -rw-r--r-- 1 oracle oinstall 3200 May 03 2013 smit.log -rw-r--r-- 1 oracle oinstall 1357 Jan 09 2013 smit.script -rw-r--r-- 1 oracle oinstall 1756 Jan 09 2013 smit.transaction -rw------- 1 oracle oinstall 183 Aug 16 2013 tdpoerror.log
Boşlukların korunması için çift tırnak kullanırız.
>echo "$a"
total 2720
drwx--x--x 2 oracle oinstall 256 Aug 13 2013 Mail
-rwxr-x--- 1 oracle oinstall 73 Feb 28 15:22 a.sh
-rw-r--r-- 1 oracle oinstall 605169 Feb 21 11:29 abc.html
-rwxrwxrwx 1 oracle oinstall 2466 Feb 28 16:15 abc.log
-rw-r--r-- 1 oracle oinstall 3116 Feb 25 2013 adstats.sql
-rw-r--r-- 1 oracle oinstall 705299 Feb 05 09:31 awrrpt.html
drwxr-xr-x 4 oracle oinstall 4096 Feb 28 09:27 control_scripts
-rw-r--r-- 1 oracle oinstall 40224 Feb 14 2013 core
drwxr-xr-x 3 oracle oinstall 256 Jan 08 2013 oradiag_oracle
-rw-r--r-- 1 oracle oinstall 304 Jan 08 2013 profile.11g.db
-rw-r--r-- 1 oracle oinstall 3200 May 03 2013 smit.log
-rw-r--r-- 1 oracle oinstall 1357 Jan 09 2013 smit.script
-rw-r--r-- 1 oracle oinstall 1756 Jan 09 2013 smit.transaction
-rw------- 1 oracle oinstall 183 Aug 16 2013 tdpoerror.log
Değişken Tipleri:
Shell script'lerinde değişkenlerin tipleri bulunmamaktadır. Bu değişkenler özetle karakter string'leridir. Sadece duruma göre bu parametreler üzerinde aritmetik operasyonlar yapılabilmektedir.
#!/bin/bash
a=100 #integer
let "a += 1"
echo "a = $a " # a = 101
Null değişkenlerin tanımlanması aşağıdaki gibi olabilir. Sonrasında bununla ilgili işlem yapabiliriz.
a='' # .veya a="" ... veya a=
echo "a = $a" # a =
let "a += 1" # Null değişkenler üzerine aritmetik operasyonlar yapılabilmektedir.
echo "a = $a" # a = 1
echo
Bir değişken oluşturulması programın herhangi bir aşamasında aşağıdaki şekildeki gibi olabilir; ancak bu kodun okunulabilirliğini bozar.
echo "a = $a" # a =
let "a += 1"
echo "a = $a" # a = 1
echo
Özel Değişkenler:
Script içerisinde scriptin adını değişkenlerini ve bulunduğu klasörü gösteren parametre ifadeleri bulunur. Aşağıda bununla ilgili bir örnek görebiliriz.
#!/bin/bash
MINPARAMS=10
echo
echo "Scriptimizin bulunduğu klasör adıyla birlikte \"$0\"."
echo " Scriptimizin adı \"`basename $0`\"."
echo
if [ -n "$1" ]
then
echo "Parametre #1 is $1" # diyez işaretinden kaçmak için tırnak işaretleri kullanılır.
fi
if [ -n "$2" ]
then
echo "Parametre #2 is $2"
fi
if [ -n "$3" ]
then
echo "Parametre #3 is $3"
fi
# ...
if [ -n "${10}" ] # 9. parametreden sonrakiler {} işaretleriyle belirtilmelidirler..
then
echo "Parametre #10 is ${10}"
fi
echo "-----------------------------------"
echo "Bütün parametreler sırasıyla: "$*""
if [ $# -lt "$MINPARAMS" ]
then
echo
echo "Bu script'e en az $MINPARAM kadar argüman gerekmektedir."
fi
echo
exit 0
Bu örneğimizde $# ifadesiyle parametre sayısını, $* ile bütün parametrelerimizi, $0 ile script'imizin adını, $1 $2 $3 ...${10} değişkenleriyle de script'imize parametre olarak eklediğimiz değerleri görebiliriz. 9. parametreden sonrasını {} işaretleri arasına almalıyız.
18 Şubat 2014 Salı
Linux / Unix Komutu: Date - Date Komutu Nedir? - Date Komutu Nasıl Kullanılır?
Linux / Unix sistemlerde tarih bilgisini görmek için kullanılan komut "Date" komutudur. Date komutunu çalıştırdığımızda aşağıdaki gibi günün tarih bilgisini elde ederiz
Date komutu genelde tek başına kullanıldığı gibi yanına çeşitli formatlarda alabilir. Format olarak bahsettiğimiz birimlerde tarih komutunda bulunan çeşitli verilerdir. Yani tarih komutundan sadece ayı almak istiyorsak %m veya sadece günü almak istiyorsak sadece %d formatını alabiliriz.
Tarihi sadece ay gün yıl olmak görmek istersek:
Sadece tarih görmek istersek:
Tarihi bir değişkene aktarmak istersek:
Bütün formatların listesi:
Referans:
http://unixhelp.ed.ac.uk/CGI/man-cgi?date
date
Tue Feb 18 09:59:03 MEST 2014
Date komutu genelde tek başına kullanıldığı gibi yanına çeşitli formatlarda alabilir. Format olarak bahsettiğimiz birimlerde tarih komutunda bulunan çeşitli verilerdir. Yani tarih komutundan sadece ayı almak istiyorsak %m veya sadece günü almak istiyorsak sadece %d formatını alabiliriz.
date +FORMAT
date +"%FORMAT"
date +"%FORMAT%FORMAT"
date +"%FORMAT-%FORMAT"
Tarihi sadece ay gün yıl olmak görmek istersek:
>date +"%m-%d-%y"
02-18-14
Sadece tarih görmek istersek:
>date +"%T"
10:10:22
Tarihi bir değişkene aktarmak istersek:
>NOW=$(date +"%m-%d-%Y")
>echo $NOW
02-18-2014
Bütün formatların listesi:
| %FORMAT String | Description |
|---|---|
| %% | a literal % |
| %a | locale's abbreviated weekday name (e.g., Sun) |
| %A | locale's full weekday name (e.g., Sunday) |
| %b | locale's abbreviated month name (e.g., Jan) |
| %B | locale's full month name (e.g., January) |
| %c | locale's date and time (e.g., Thu Mar 3 23:05:25 2005) |
| %C | century; like %Y, except omit last two digits (e.g., 21) |
| %d | day of month (e.g, 01) |
| %D | date; same as %m/%d/%y |
| %e | day of month, space padded; same as %_d |
| %F | full date; same as %Y-%m-%d |
| %g | last two digits of year of ISO week number (see %G) |
| %G | year of ISO week number (see %V); normally useful only with %V |
| %h | same as %b |
| %H | hour (00..23) |
| %I | hour (01..12) |
| %j | day of year (001..366) |
| %k | hour ( 0..23) |
| %l | hour ( 1..12) |
| %m | month (01..12) |
| %M | minute (00..59) |
| %n | a newline |
| %N | nanoseconds (000000000..999999999) |
| %p | locale's equivalent of either AM or PM; blank if not known |
| %P | like %p, but lower case |
| %r | locale's 12-hour clock time (e.g., 11:11:04 PM) |
| %R | 24-hour hour and minute; same as %H:%M |
| %s | seconds since 1970-01-01 00:00:00 UTC |
| %S | second (00..60) |
| %t | a tab |
| %T | time; same as %H:%M:%S |
| %u | day of week (1..7); 1 is Monday |
| %U | week number of year, with Sunday as first day of week (00..53) |
| %V | ISO week number, with Monday as first day of week (01..53) |
| %w | day of week (0..6); 0 is Sunday |
| %W | week number of year, with Monday as first day of week (00..53) |
| %x | locale's date representation (e.g., 12/31/99) |
| %X | locale's time representation (e.g., 23:13:48) |
| %y | last two digits of year (00..99) |
| %Y | year |
| %z | +hhmm numeric timezone (e.g., -0400) |
| %:z | +hh:mm numeric timezone (e.g., -04:00) |
| %::z | +hh:mm:ss numeric time zone (e.g., -04:00:00) |
| %:::z | numeric time zone with : to necessary precision (e.g., -04, +05:30) |
| %Z | alphabetic time zone abbreviation (e.g., EDT) |
Referans:
http://unixhelp.ed.ac.uk/CGI/man-cgi?date
16 Ocak 2014 Perşembe
Linux / Unix Komutu: Mailx - Mailx Komutu Nedir - Nasıl Kullanılır - Unix Sistemden Mail Göndermek - Hem Body'li Hem Attachment'lı Mail Göndermek - How To Use Mailx Command
Mailx komutuyla Unix ve Linux ortamlarda mail atabiliriz. Mailx komutunu tek başına kullanmak biraz zahmetlidir. Bu şekilde kullanabilmek mümkünse de genelde diğer bir komut ile birleşik olarak kullanılır.
Mailx Komutu Kullanımı:
ya da
Mailx komutundaki -s ile mailini subject kısımını doldururuz. Burada deneme olarak belirlemiş bulunmaktayız. Yukarıdaki gibi mail komutumuzu oluşturduğumuzda bize subject sorusunu sormaz.ama -s parametresini kullanmadan basarsak bize subject sorar. Subject ile ilgili cevabı verdikten sonra mesajın içeriğini doldururuz. Mesajı yazmayı bitirdiğimizde 'ctrl + D' tuşuna basıp maili bitiririz.
Mailimizi kendimiz yazmayacaksak ve bir komutun çıktısını yazdırıp kendimize mail atmak istiyorsak, komutların çıktısını toptan bir log dosyasına yazıp kendimize ya attachment olarak ya da mail olarak attırabiliriz.
Aşağıdaki komut ile log dosyamızın içerisindeki bilgileri kendimize mail olarak "deneme" konu adıyla attırırız.
Attachment Olarak Mail Nasıl Gönderilir?
Mail'e attachment koyabilmemiz için başka bir komut kullanmaktayız Bu komut uuencode'dur. Attachment'ı dolduracağımız dosyayı önce okuturuz. Burada içinde bilgi olan abc.log dosyasını okuyup sonrasında uuencode ile binary dosyalara çeviririz. Attachment içerisinde nasıl bir isimle görülmesini istiyorsak uuencode'da o ismi yazarız. Ben burada "uuencode abc.log" şeklinde yazsam da oraya istediğimiz adı koyabiliriz. Bu ad attachment dosyasının adı olarak mail'de gözükecektir. Sonrasında ise standart olarak mailx komutumuzu kullanırız.
Attachment'lı Mail Nasıl Gönderilir?
Attachment'lı mail olarak göndermenin diğer konu başlığımızdan farkı mailimizin içerisinde attachment ve body olmasıdır. Üstteki mail komutunda dosya attachment olarak eklenir ancak body kısmına yazı yazılmaz.
Bu konu başlığımızda ise hem body de text göndermek için, hem de attachment olarak dosya göndermek nasıl olur onu göstereceğiz.
Bunun için en başta attachment dosyası hazırlanması gerekir. Attachment olarak göndermek istediğimiz dosyayı uuencode komutuyla birlikte attachment dosyasının ismini görmek istediğimiz şekilde formatlarız. Yani abc.log olarak sistemde bulunan dosyayı abcd.txt olarak mail'imize ekleriz.
Sonrasında bu attachment dosyasını body kısmında görülmesi istenen dosyayla birleştiririz.
Bütün text'ler hazırlandıktan sonra mail gönderilmeye hazır hale gelir.
Bu şekilde mail'imizin içeriğinde hem göndereceğimiz dosyanın text'ini, hem de kendisini attachment olarak göndermiş oluruz.
Mailx Komutunda From Kısmının Ayarlanması:
Mailx komutuna "-r" argümanını kullanaraktan from kısmını ayarlayabiliriz. Aşağıdaki örnekte "adapcctl.sh" adlı dosya içinde text olan herhangi bir dosya iken, -r argümanı "from" kısmını belirler -s "subject" kısmını belirlerken "to" kısmını da "abc" den sonraki mail adresi belirler.
Referans:
http://www.nyayapati.com/srao/2010/03/sending-email-with-a-body-and-attachment-from-unix/
Mailx Komutu Kullanımı:
mailx berke.oz@abc.com.tr
ya da
mailx -s deneme berke.oz@abc.com.tr
Mailx komutundaki -s ile mailini subject kısımını doldururuz. Burada deneme olarak belirlemiş bulunmaktayız. Yukarıdaki gibi mail komutumuzu oluşturduğumuzda bize subject sorusunu sormaz.ama -s parametresini kullanmadan basarsak bize subject sorar. Subject ile ilgili cevabı verdikten sonra mesajın içeriğini doldururuz. Mesajı yazmayı bitirdiğimizde 'ctrl + D' tuşuna basıp maili bitiririz.
Mailimizi kendimiz yazmayacaksak ve bir komutun çıktısını yazdırıp kendimize mail atmak istiyorsak, komutların çıktısını toptan bir log dosyasına yazıp kendimize ya attachment olarak ya da mail olarak attırabiliriz.
Aşağıdaki komut ile log dosyamızın içerisindeki bilgileri kendimize mail olarak "deneme" konu adıyla attırırız.
more abc.log | mailx -s deneme berke.oz@abc.com.tr
Attachment Olarak Mail Nasıl Gönderilir?
Mail'e attachment koyabilmemiz için başka bir komut kullanmaktayız Bu komut uuencode'dur. Attachment'ı dolduracağımız dosyayı önce okuturuz. Burada içinde bilgi olan abc.log dosyasını okuyup sonrasında uuencode ile binary dosyalara çeviririz. Attachment içerisinde nasıl bir isimle görülmesini istiyorsak uuencode'da o ismi yazarız. Ben burada "uuencode abc.log" şeklinde yazsam da oraya istediğimiz adı koyabiliriz. Bu ad attachment dosyasının adı olarak mail'de gözükecektir. Sonrasında ise standart olarak mailx komutumuzu kullanırız.
more abc.log | uuencode abc.log | mailx -s deneme berke.oz@abc.com.tr
Attachment'lı Mail Nasıl Gönderilir?
Attachment'lı mail olarak göndermenin diğer konu başlığımızdan farkı mailimizin içerisinde attachment ve body olmasıdır. Üstteki mail komutunda dosya attachment olarak eklenir ancak body kısmına yazı yazılmaz.
Bu konu başlığımızda ise hem body de text göndermek için, hem de attachment olarak dosya göndermek nasıl olur onu göstereceğiz.
Bunun için en başta attachment dosyası hazırlanması gerekir. Attachment olarak göndermek istediğimiz dosyayı uuencode komutuyla birlikte attachment dosyasının ismini görmek istediğimiz şekilde formatlarız. Yani abc.log olarak sistemde bulunan dosyayı abcd.txt olarak mail'imize ekleriz.
uuencode abc.log abc.log > abcd.txt
Sonrasında bu attachment dosyasını body kısmında görülmesi istenen dosyayla birleştiririz.
cat abc.log abcd.txt > birlestirilmis_text_adı.txt
Bütün text'ler hazırlandıktan sonra mail gönderilmeye hazır hale gelir.
mailx -s "Statü Kontrolü" berke.oz@abc.com.tr < birlestirimis_text_adı.txt
Bu şekilde mail'imizin içeriğinde hem göndereceğimiz dosyanın text'ini, hem de kendisini attachment olarak göndermiş oluruz.
Mailx Komutunda From Kısmının Ayarlanması:
Mailx komutuna "-r" argümanını kullanaraktan from kısmını ayarlayabiliriz. Aşağıdaki örnekte "adapcctl.sh" adlı dosya içinde text olan herhangi bir dosya iken, -r argümanı "from" kısmını belirler -s "subject" kısmını belirlerken "to" kısmını da "abc" den sonraki mail adresi belirler.
more adapcctl.sh | mailx -r "deneme@deneme.com" -s "abc" ber@mailinator.com
Referans:
http://www.nyayapati.com/srao/2010/03/sending-email-with-a-body-and-attachment-from-unix/
2 Ocak 2014 Perşembe
Linux / Unix: Sistemdeki Tarih Dosyasının Genişletilmesi - Expanding The Size Of History File
Linux ve Unix sistemlerde komutlarımızın korunduğu bir dosya vardır. Bu dosyada gönderdiğimiz komutların geçmişi yer alır. Sınırlı sayıda komut tutma ayarından dolayı belli bir limitten sonra gönderilen komutlar eskisini ezerek kaydedilir. Geçmiş komutlarımızı görmemizi sağlayan komutumuz "history" komutudur.
Bu komutu gönderdiğimizde aşağıdaki gibi bir çıktı getirir. Burada daha önceden gönderdiğimiz en son 500 komut yer almaktadır.
History komutu göstereceği çıktıyı kullanıcımızın $HOME klasöründe .bash_history adlı dosyadan alır ve yeni komutları oraya ekler.
.bash_history dosyası bizim işlerimizde çok kullanışlı olabilir. Eskiden gönderdiğimiz komutlara tekrar ulaşmamız gerekebilir. O yüzden bu dosyanın büyüklüğü önemlidir. Bunu arttırmamız için aşağıdaki komutları .profile dosyamıza atmamız gerekir.
Bash'lerle ilgili daha fazla bilgi için buradaki yazımıza bakabiliriz.
http://berkeoz1.blogspot.com/2013/07/linuxunix-ortamnda-shelllerin-rolu.html
.profile adlı dosyamız da kullanıcımızın $HOME adlı klasöründe yer almaktadır.
Buradaki dosyamıza aşağıdaki satırları ekleriz.
Sonuçta dosyamızın görüntüsü aşağıdaki gibi olur.
Yukarıdaki eklentilerle tarih dosyamızda artık hangi komutun ne zaman uygulandığı görülebilinmektedir.
history
Bu komutu gönderdiğimizde aşağıdaki gibi bir çıktı getirir. Burada daha önceden gönderdiğimiz en son 500 komut yer almaktadır.
History komutu göstereceği çıktıyı kullanıcımızın $HOME klasöründe .bash_history adlı dosyadan alır ve yeni komutları oraya ekler.
more $HOME/.bash_history
.bash_history dosyası bizim işlerimizde çok kullanışlı olabilir. Eskiden gönderdiğimiz komutlara tekrar ulaşmamız gerekebilir. O yüzden bu dosyanın büyüklüğü önemlidir. Bunu arttırmamız için aşağıdaki komutları .profile dosyamıza atmamız gerekir.
Bash'lerle ilgili daha fazla bilgi için buradaki yazımıza bakabiliriz.
http://berkeoz1.blogspot.com/2013/07/linuxunix-ortamnda-shelllerin-rolu.html
.profile adlı dosyamız da kullanıcımızın $HOME adlı klasöründe yer almaktadır.
vi $HOME/.profile
Buradaki dosyamıza aşağıdaki satırları ekleriz.
export HISTTIMEFORMAT="%d/%m/%y %T "
export HISTSIZE=5000
export HISTFILESIZE=5000
Sonuçta dosyamızın görüntüsü aşağıdaki gibi olur.
Yukarıdaki eklentilerle tarih dosyamızda artık hangi komutun ne zaman uygulandığı görülebilinmektedir.
21 Kasım 2013 Perşembe
Linux / Unix: Shell Scripting For Loops - For Döngüleri
Bu yazımızda daha önceden bahsettiğimiz While döngülerine ve If/Else koşullarına ek olarak For döngülerini işleyeceğiz.
For döngülerinde belirli bir işin sınırlı bir sayıda tekrar edilmesi sağlanır. Temel syntax aşağıdaki gibidir.
for degisken in {1..N}
do
komut
done
1'den 10'a yazdıran örnek aşağıdaki gibidir.
for x in {1..10}
do
echo $x
done
Peki döngümüze bir artış miktarı koymamız için ne yapmamız gerekir? Bunun için son bash versiyonuna ihtiyacımız lazım. Yani ${BASH_VERSION} parametresi v4.0+ olmalıdır.
for x in {1..10..2}
do
echo $x
done
Bu for örneğimizde ise bir klasöre yazdırdığımız dosya adlarını terminale bastırırız. Örnekte asıl vurgulamak istediğimiz şey " ` " işaretinin kullanımıdır. Ayrıca bir dosya içerisindeki verilerin alınıp satır satır incelenmesidir.
ls > abc.log
for x in `cat abc.log`
do
echo "Bu dosyanin adi:" $x
done
Bu durumda abc.log adlı dosyamızın adı :
>more abc.log
Mail
a.sh
abc.html
abc.log
adstats.sql
awrrpt.html
control_scripts
core
oradiag_oracle
profile.11g.db
smit.log
smit.script
smit.transaction
tdpoerror.log
20 Kasım 2013 Çarşamba
Linux / Unix: Shell Scripting While Conditions - While Koşulları
Önceki yazımızda If/Else koşulunu incelemiştik. Bu yazımızda da While yapısını inceleyeceğiz. While yapısında içerideki kodlar tekrar tekrar çalıştırılabilinir. Genel syntax'ı aşağıdaki gibidir.
Burada sonsuz döngü oluşması için içerideki koşulun asla yanlış hale gelmemesi gerekir. İçerideki koşul herhangi bir boolean ifade yani doğru veya yanlış bir ifade olabilir.
Buradaki örnekte 1'den 5'e kadar sayıları yazdırırız.:
Aşağıdaki örneğimizde de faktoriyel hesabı yaptırmaktayız. Bu örnekte sayac'ımızı dışardan vermekteyiz. Yani bu programı "abc.sh" olarak kaydedip "chmod 777 abc.sh" olarak yetkilerini verdikten sonra "./abc.sh 5" şeklinde çalıştırdığımızda bize 5 faktoriyelin cevabını verir.
Continue İfadesi:
While döngülerinde continue ifadesi bir sonraki iterasyona geçmek için kullanılır. Yani örnek olarak sayacımız 10'dan geriye sayarken 5'te atlamasını istiyorsak, 5 bizim için istisna bir değerse, if deyip değerimiz 5'e geldiğinde atlamasını isteyebiliriz.
Continue syntax'ı aşağıdaki gibidir.
Break İfadesi:
Break ifadesi bizi direk döngüden çıkaran bir ifadedir. Yani yukarıdaki örneğimizdeki döngüde "continue" bizi bir iterasyon sonrasına gönderirken, break ile döngüyü tamamen kırabiliriz. Bu şekilde örneğin while döngümüzün de sonsuz olmasını engelleyebilir, kendimize bir çıkış yolu yaratabiliriz.
while [ koşul ]
do
komutlar
done
Burada sonsuz döngü oluşması için içerideki koşulun asla yanlış hale gelmemesi gerekir. İçerideki koşul herhangi bir boolean ifade yani doğru veya yanlış bir ifade olabilir.
Buradaki örnekte 1'den 5'e kadar sayıları yazdırırız.:
#!/bin/bash
x=1
while [ $x -le 5 ]
do
echo " $x "
x=$(( $x + 1 ))
done
Aşağıdaki örneğimizde de faktoriyel hesabı yaptırmaktayız. Bu örnekte sayac'ımızı dışardan vermekteyiz. Yani bu programı "abc.sh" olarak kaydedip "chmod 777 abc.sh" olarak yetkilerini verdikten sonra "./abc.sh 5" şeklinde çalıştırdığımızda bize 5 faktoriyelin cevabını verir.
#!/bin/bash
x=$1 #Sayac
a=1
echo $x;
while [ $x -gt 0 ]
do
a=$(( $a * $x ))
x=$(( $x - 1 ))
done
echo $a
Continue İfadesi:
While döngülerinde continue ifadesi bir sonraki iterasyona geçmek için kullanılır. Yani örnek olarak sayacımız 10'dan geriye sayarken 5'te atlamasını istiyorsak, 5 bizim için istisna bir değerse, if deyip değerimiz 5'e geldiğinde atlamasını isteyebiliriz.
Continue syntax'ı aşağıdaki gibidir.
while [ koşul ]
do
ifadeler
if (koşul) #Örnek olarak x=5 ise
then
continue
fi
ifadeler
done
Break İfadesi:
Break ifadesi bizi direk döngüden çıkaran bir ifadedir. Yani yukarıdaki örneğimizdeki döngüde "continue" bizi bir iterasyon sonrasına gönderirken, break ile döngüyü tamamen kırabiliriz. Bu şekilde örneğin while döngümüzün de sonsuz olmasını engelleyebilir, kendimize bir çıkış yolu yaratabiliriz.
while [ koşul ]
do
ifadeler
if (koşul) #Örnek olarak x=5 ise
then
break
fi
ifadeler
done
Linux / Unix: Shell Scripting If/Else Conditions - If/Else Koşulları
Scriptlerimizin daha interactive yani etkileşimli olması için bazı soruların sorulması ve bunlara göre işlemlerinin değiştirilmesi gerekir. Verdiğimiz cevaplara veya değişkenlere göre farklı şartların devreye girmesi gerekir. Bu etkileşimli yapının devreye sokulmasında koşullu ifadeler çok önemli bir yer tutar. Bu koşullu ifadelere örnek verirsek if/else, while, do while ifadeleri kullanılabilinir.
Bu ifadelerden ilk if/else'i inceleyeceğiz. If/else'i bir örnek üzerinden inceleyelim.
Yukarıdaki örneğimizde kullanıcıdan bir numara girmesini istiyoruz. Bu numaraya göre de işlem yaptırıyoruz. Buradaki syntax'ımıza göre önce if ile başlayıp sonra karşılaştırmamızı yaptırıyoruz. Ertesinde then diyip koşulumuzun doğru olması durumunda bulunduğumuz klasör de ls çekip içeriklere bakarken, 1 dışında herhangi bir numara girince "yanlış" şeklinde bir uyarı çıkarmaktadır. En sonunda "fi" denerek işlem bitirilir.
Burada syntax ve boşluklar çok önemlidir. if'ten sonra bir boşluk sonra köşeli parantezlerden sonrada birer boşluk bırakılması önemlidir.
Buradaki örnekte ise yas aralıkları kontrol edilmektedir. Kullanıcının girdiği yaşa göre bir sonuç döndürmektedir. Burada farklı olan "else" yerine "elif" örneği verilmiştir.
Shell Scripting'deki Karşılaştırma Operatörleri:
İf/Else Örneği:
Örneğimizin amacı `pwd` ile "$PWD" komutlarının sonucu aynıdır. Bu yüzden kullanıcıların kafaları karışabilinir. " ` " işareti " ' " bu işaretle karıştırılmamalıdır.
Bu ifadelerden ilk if/else'i inceleyeceğiz. If/else'i bir örnek üzerinden inceleyelim.
#!/bin/bash
echo "Yapmak istediginiz islem icin lutfen numara giriniz.\n"
read var1
echo "var1=$var1"
if [ "$var1" == "1" ];
then
ls;
else
echo "Yanlis";
fi
Yukarıdaki örneğimizde kullanıcıdan bir numara girmesini istiyoruz. Bu numaraya göre de işlem yaptırıyoruz. Buradaki syntax'ımıza göre önce if ile başlayıp sonra karşılaştırmamızı yaptırıyoruz. Ertesinde then diyip koşulumuzun doğru olması durumunda bulunduğumuz klasör de ls çekip içeriklere bakarken, 1 dışında herhangi bir numara girince "yanlış" şeklinde bir uyarı çıkarmaktadır. En sonunda "fi" denerek işlem bitirilir.
Burada syntax ve boşluklar çok önemlidir. if'ten sonra bir boşluk sonra köşeli parantezlerden sonrada birer boşluk bırakılması önemlidir.
Buradaki örnekte ise yas aralıkları kontrol edilmektedir. Kullanıcının girdiği yaşa göre bir sonuç döndürmektedir. Burada farklı olan "else" yerine "elif" örneği verilmiştir.
#!/bin/sh
echo "Yaş giriniz.:"
read yas
if [ "$yas" -lt 20 ] || [ "$yas" -ge 50 ]; then
echo "yas aralıgının dısında ."
elif [ "$yas" -ge 20 ] && [ "$yas" -lt 30 ]; then
echo "20'den büyük 30'tan küçük"
elif [ "$yas" -ge 30 ] && [ "$yas" -lt 40 ]; then
echo "30'dan büyük 40'tan küçük"
elif [ "$yas" -ge 40 ] && [ "$yas" -lt 50 ]; then
echo "40'tan büyük 50'den küçük"
fi
Shell Scripting'deki Karşılaştırma Operatörleri:
-eq eşittir
-ne eşit değildir
-lt küçüktür
-le küçük eşittir
-gt büyüktür
-ge büyük eşittir
== eşittir
!= eşit değildir
İf/Else Örneği:
Örneğimizin amacı `pwd` ile "$PWD" komutlarının sonucu aynıdır. Bu yüzden kullanıcıların kafaları karışabilinir. " ` " işareti " ' " bu işaretle karıştırılmamalıdır.
LOG_DIR=/home/users/oracle
if [ `pwd` != "$LOG_DIR" ] #veya: if [ "$PWD" != "$LOG_DIR" ]
then
echo "Oracle Home'unda değilsiniz."
exit;
fi
11 Kasım 2013 Pazartesi
Linux / Unix : Linux Paketlerinin Tanımının Gösterilmesi Komutu - Kurulu Paketlerin Gösterilmesi
Linux / Unix Ortamlarda Kurulu Paketlerin Gösterilmesi:
Linux'ta kurulu paketlerin gösterilmesi için rpm komutunu kullanabiliriz. rpm -qa komutuyla kurulu paketlerin listesini karşımıza çıkarabiliriz.
Paketler İle İlgili Daha Fazla Bilginin Gösterilmesi:
Yukarıdaki komutla karşımıza çıkan paketlerin arasından istediğimiz paketle ilgili daha fazla bilgi istersek aşağıdaki komutu kullanabiliriz.
Linux'ta kurulu paketlerin gösterilmesi için rpm komutunu kullanabiliriz. rpm -qa komutuyla kurulu paketlerin listesini karşımıza çıkarabiliriz.
rpm -qa
Paketler İle İlgili Daha Fazla Bilginin Gösterilmesi:
Yukarıdaki komutla karşımıza çıkan paketlerin arasından istediğimiz paketle ilgili daha fazla bilgi istersek aşağıdaki komutu kullanabiliriz.
>rpm -qi zip
>rpm -qi zip
Name : zip Relocations: /opt/freeware
Version : 2.3 Vendor: (none)
Release : 3 Build Date: Sat Nov 23 00:55:40 MEST 2002
Install date: Sat Sep 1 14:12:28 MEDT 2007 Build Host: emperor.aixpclab.austin.ibm.com
Group : Applications/Archiving Source RPM: zip-2.3-3.src.rpm
Size : 323779 License: IBM_ILA
URL : http://www.info-zip.org/pub/infozip/Zip.html
Summary : A file compression and packaging utility compatible with PKZIP.
Description :
The zip program is a compression and file packaging utility. Zip is
analogous to a combination of the UNIX tar and compress commands and
is compatible with PKZIP (a compression and file packaging utility for
MS-DOS systems).
Install the zip package if you need to compress files using the zip
program.
6 Ekim 2013 Pazar
Linux / Unix : Redhat Hostname Değişimi Nasıl Yapılır? - Hostname Değiştirmek
Redhat işletim sistemi /etc/sysconfig/network altındaki bilgileri okuyarak hostnam bilgisini belirtir. Bu kayıt işlemi her seferinde /etc/rc.d/rc.sysinit script'i ile yapılır.
/etc/sysconfig/network dosyasının içinde aşağıdaki gibi örnek bilgiler bulunur.
Hostname'in değiştirilmesi için root olarak buradaki dosyadaki "hostname" parametresinin değiştirilmesi gerekir.
Geçici olarak değiştirmek istiyorsak root olarak hostname komutunu kullanabiliriz.
Yukarıdaki şekilde kullanırsak hostname'in adını geçici olarak değiştirmiş oluruz. Halbuki /etc/sysconfig/network dosyasını root olarak değiştirirsek kalıcı olarak "hostname"'i değiştirmiş oluruz.
/etc/sysconfig/network dosyasının içinde aşağıdaki gibi örnek bilgiler bulunur.
NETWORKING=yes
HOSTNAME=”plain.domainname.com”
GATEWAY=”192.168.0.1?
GATEWAYDEV=”eth0?
FORWARD_IPV4=”yes”
Hostname'in değiştirilmesi için root olarak buradaki dosyadaki "hostname" parametresinin değiştirilmesi gerekir.
su - root
vi /etc/sysconfig/network
Geçici olarak değiştirmek istiyorsak root olarak hostname komutunu kullanabiliriz.
hostname berke
Yukarıdaki şekilde kullanırsak hostname'in adını geçici olarak değiştirmiş oluruz. Halbuki /etc/sysconfig/network dosyasını root olarak değiştirirsek kalıcı olarak "hostname"'i değiştirmiş oluruz.
4 Ekim 2013 Cuma
Linux / Unix Komutu : Diff Komutu Kullanımı - Dosyaların Karşılaştırılması ve Aradaki Farkların Bulunması
Diff komutu ile 2 dosya birbirleriyle karşılaştırılırlar. En fazla 3 dosya karşılaştırılabilinir. Bu karşılaştırma sonucunda farklı olan satırları belirtir. Birbirleriyle karşılaştırıp farklılıkları gösterir.
En çok ne için kullanılabilinir?
1- Dosyalardeki değişiklikleri kontrol etmek için.
2- Konfigürasyon dosyalarındaki farklara bakmak için.
Nasıl Kullanılır?
Kullanımı çok basittir. diff komutu yanına 2 tane parametre alır dosya adı olarak.
Buradaki kullanımda abc ve abc1'i 2 farklı dosya adı olarak vermekteyiz.
En çok kullanılan argümanıysa -u'dur. Bu argüman ile de en son ne zaman değişiklik yapıldığı da görülür.
abc1 dosyası en yakın tarihte değiştirilmiş iken 1 den 6 ya kadar olan satırlarda sadece 2. ve 3. satırlarda farklılık bulunmaktadır.
En çok ne için kullanılabilinir?
1- Dosyalardeki değişiklikleri kontrol etmek için.
2- Konfigürasyon dosyalarındaki farklara bakmak için.
Nasıl Kullanılır?
Kullanımı çok basittir. diff komutu yanına 2 tane parametre alır dosya adı olarak.
diff abc abc1
Buradaki kullanımda abc ve abc1'i 2 farklı dosya adı olarak vermekteyiz.
En çok kullanılan argümanıysa -u'dur. Bu argüman ile de en son ne zaman değişiklik yapıldığı da görülür.
>diff -u abc abc1
--- abc 2013-10-04 11:11:54.000000000 +0300
+++ abc1 2013-10-04 11:15:56.000000000 +0300
@@ -1,6 +1,6 @@
a
- a
- a
+ ax
+ axd
a
a
a
abc1 dosyası en yakın tarihte değiştirilmiş iken 1 den 6 ya kadar olan satırlarda sadece 2. ve 3. satırlarda farklılık bulunmaktadır.
16 Eylül 2013 Pazartesi
Linux / Unix Komutu : Xargs Kullanımı
Xargs komutu argüman listesi oluşturmak için kullanılır. Oluşturulan argüman listesine göre de başka komutları tetikler. Argüman listesi demek başka komutların kullanımı sonucu çıkan sonuçların listelenmesidir.
Bu çıkan sonuçlar xargs tarafından okunur ve bunları pipe "|" ile birleştirilen devamındaki komutla çalıştırır. Xargs en iyi örneklerle açıklanabilinir.
Xargs Kullanımı
veya
Yukarıdaki örnekte echo ile birlikte gelen ifadeler xargs tarafından argüman olarak okunur ve echo ile ekrana basulır. Xargs komutu burada bütün argümanları tek bir ifade olarak algılar. Eğer bunların teker teker limitlenmesini istiyorsak "-n 1" şeklinde bir ifade eklemeliyiz. :
Başka bir örnekte daha iyi anlamamız için ls komutunu xargs ile birlikte kullanırız. Burada ls -lart komutuyla çıkan sonuçlardan aldığımızı veriyi xargs -n 1 ile teker teker ekranda gösteriririz.:
Bu örneğimizde ise .bak uzantılı dosyalar bulunur ve silinir.
Aşağıda sendmail komutuyla aldığım process bilgilerini kullanıp buradan awk komutuyla pid bilgisini alıp silebiliriz.
Bu çıkan sonuçlar xargs tarafından okunur ve bunları pipe "|" ile birleştirilen devamındaki komutla çalıştırır. Xargs en iyi örneklerle açıklanabilinir.
Xargs Kullanımı
$ echo 1 2 3 4 5 6 | xargs echo
veya
$ echo 1 2 3 4 5 6 | xargs
Yukarıdaki örnekte echo ile birlikte gelen ifadeler xargs tarafından argüman olarak okunur ve echo ile ekrana basulır. Xargs komutu burada bütün argümanları tek bir ifade olarak algılar. Eğer bunların teker teker limitlenmesini istiyorsak "-n 1" şeklinde bir ifade eklemeliyiz. :
$ echo 1 2 3 4 | xargs -n 1 1 2 3 4
Başka bir örnekte daha iyi anlamamız için ls komutunu xargs ile birlikte kullanırız. Burada ls -lart komutuyla çıkan sonuçlardan aldığımızı veriyi xargs -n 1 ile teker teker ekranda gösteriririz.:
ls -lart | xargs -n 1
total
16
-rwxr--r--
1
root
system
1188
Sep
28
2012
vrt_monitor.sh
drwxr-xr-x
2
root
system
256
Sep
28
2012
logs
drwxr-xr-x
3
root
system
256
Sep
28
2012
.
-rwxr-xr-x
1
root
system
1219
Sep
28
2012
twm_vfb.sh
drwxr-xr-x
6
applmgr
dba
256
Sep
16
14:14
..
Bu örneğimizde ise .bak uzantılı dosyalar bulunur ve silinir.
find . -name "*.bak" -type f -print | xargs /bin/rm -f
Aşağıda sendmail komutuyla aldığım process bilgilerini kullanıp buradan awk komutuyla pid bilgisini alıp silebiliriz.
ps -ef |grep sendmail | awk '{print $2}' | xargs kill -9
9 Eylül 2013 Pazartesi
Oracle Veritabanı: Linux / Unix Ortamda Oracle 11g nin Kaldırılması
Linux ve Unix ortamlarda Oracle'ı kaldırmak için bazı dosyaları kaldırmamız ve ertesinde de bazı lokasyonlara yazılan kayıtları silmemiz gerekir.
Database silinmeden önce temiz bir şekilde kapatılır.
sqlplus / as sysdba
SQL> shutdown abort;
SQL> exit
kill -9 -1
Database kapatıldıktan sonra kill komutunu veririz. Böyle database'i açan kullanıcının bütün process'leri kill edilir. "Kill -9 -1" tehlikeli bir komuttur. Root kullanıcısıyla çalıştırılmamalıdır. Oracle kullanıcısıyla çalıştırılmalıdır. (Çalışan Oracle Process'leri nasıl bulunur? Oracle Processleri) (Kill Komutu Kullanımı)
Yukarıda söylediğimiz gibi Oracle veritabanı ile ilgil bazı kayıtlar "/etc" altına yazılır. "oraInst.loc" klasöründe orainventory path'i bulunur. Oracle_Base altında değilse silinmesi gerekir.
ls -lrt /etc/ora*
-rw-r--r-- 1 root system 53 Dec 28 2011 /etc/oraInst.loc
-rw-rw-r-- 1 grid oinstall 883 Sep 27 2012 /etc/oratab
-rw-rw-r-- 1 oracle oinstall 61 Jul 22 14:10 /etc/oragchomelist
rm -rf /etc/ora*
Bundan sonraki adım Oracle dosyalarını silmektir. $ORACLE_BASE, $ORACLE_HOME'yu kapsadığı için kökten silebiliriz yani $ORACLE_BASE'i kaldırırız.
rm -rf $ORACLE_BASE
Database'in açık bir session'undan kalmış aşağıdaki dosyalar da silinir.
rm -rf /tmp/.oracle
rm -rf /var/tmp/.oracle
Bu işlemlerin ertesinde sistemde set edilmiş parametreler silinir. Bu parametreler genel olarak .bash_profile,.bashrc,.profile veya .bash altında bulunur.( Shell'ler )
Referans:
http://docs.oracle.com/cd/B28359_01/install.111/b32002/remove_oracle_sw.htm#LADBI402
Etiketler:
Bash,
Komutlar,
Linux,
Oracle,
Oracle Veritabanı,
Shell,
veritabani_islemleri
6 Eylül 2013 Cuma
Linux / Unix İşlem: Oracle Shell Scripting ve Loglama
Windows
Bu script dosyasını yarattıktan sonra abc.sh olarak kaydederiz. Bununla birlikte scriptimize çalıştırmak için chmod ile yetki vermemiz gerekir.
Unix ve Linux(Method 2)
Linux'taki başka bir metod ise yukarıdaki gibi bir tane sql dosyası bir tane de script dosyası yaratmak yerine sadece bir script dosyası yaratıp yukarıdaki işlerden kendimizi kurtarmamızı sağlar.
Buradaki script'imizede yukarıdaki örneğimizde verdiğimiz gibi tekrar chmod ile yetkilerini verdikten sonra çalıştırabiliriz. Bu methodumuzu Windows'ta da uygulayabiliriz. Yani orada da bir bat dosyası bir sql dosyası yaratmak yerine sadece bir bat dosyası çalıştırıp, bat dosyası içine aşağıdaki bilgileri bu örnek için yapıştırabiliriz.
Unix ve Linux'ta Script'ten Nasıl Değer Döndürebiliriz?
Yazdığımız scriptlerde amacımız eğer bir değer geri döndürmek ise sorgumuzun sonuçlarını alıp ekrana basmamız ve script içinde bu değeri işlememiz gerekir. Aşağıdaki örnekte employees tablosundan çektiğimiz sonuçları x değişkenimizin içine atarız. Sonrasında sql scriptinin içi bittiğinde console a geri döner ve eğer hiç bir sonuç yoksa bunu ekrana basar.
Script'lerden değer döndürmede sorun birden fazla satır ve değer geldiğinde oluşmaktadır. Bu durumda sonuçların parse edilmesi ve istenen sonucun ayrılması gerekmektedir; ancak tek sonuç geliyorsa işimiz kolaydır.
Windows'ta Oracle Script'leri çalıştırmak için ilk önce komutlarımızı windows'ta bir dizine kaydetmemiz lazım. Göstereceğimiz ilk örnek sql scripti yazmak ve çalıştırmak olacaktır.
Sql Script İçeriği:,
Sql scriptimizde bu örneğimizde basit bir işlem yapacağız. Sonrasında bunun çıktılarını göreceğiz. Aşağıda yazdığımız scriptimizi "C:\abc.sql" olarak kaydedelim.
CONNECT berke/berke
SPOOL C:\abc.log
SET LINESIZE 100
SET PAGESIZE 50
SELECT *
FROM hr.employees;
SPOOL OFF
EXIT;
Yukarıdaki script'de basitçe sample schema'mızdaki employees tablosuna bir select atarız.Çıkan sonuçları da C:\ dizinindeki abc.log 'unun içine atarız. Bağlanırkenki kullanıcı adı ve şifrenizi değiştirmeyi unutmayın. Buradaki kullanıcı hr tabloları üzerinde yetki sahibi bir kullanıcıdır.
Bu scriptimizi istersek sqlplus'ta çalıştırabiliriz.
cd C:\
sqlplus berke/berke
SQL>@abc.sql
Kendimizi yukarıdaki kodlardan da kurtarabiliriz. İşlemlerimizi daha otomatik bir hale getirmek için bir batch file yaratabiliriz. Bat dosyamızı C:\abc.bat olarak yaratalım.
cd C:\
sqlplus /nolog @C:\abc.sql
Bat dosyamız içerisine yukarıdaki kodları yazıp çalıştırırsak programımız istediğimiz gibi çalışır.
Peki bu bat file'ın otomatik çalıştırılması için ne yapılması gerekir?
Windows'ta bu işlem "Scheduled Tasks Wizard" adlı yerden gerçekleştirilir. (Start > Programs > Accessories > System Tools > Scheduled Tasks)
Unix ve Linux(Method 1)
Unix örneğimizde de yukarıda yazdığımız sql script örneğimizi kullanacağız. Sql scriptimizi alıp Linux veya Unix ortamlarda da aynı şekilde çalıştırabiliriz. Windows ortamdan farklı olarak batch dosyası yaratmak yerine bir script dosyası yaratırız.
#!/bin/bash
sqlplus /nolog @/home/oracle/Desktop/abc.sql
Bu script dosyasını yarattıktan sonra abc.sh olarak kaydederiz. Bununla birlikte scriptimize çalıştırmak için chmod ile yetki vermemiz gerekir.
chmod 777 /home/oracle/Desktop/abc.sh
Unix ve Linux(Method 2)
Linux'taki başka bir metod ise yukarıdaki gibi bir tane sql dosyası bir tane de script dosyası yaratmak yerine sadece bir script dosyası yaratıp yukarıdaki işlerden kendimizi kurtarmamızı sağlar.
#!/bin/bash
sqlplus /nolog << EOF
CONNECT berke/berke
SPOOL /home/oracle/Desktop/abc.log
SET LINESIZE 100
SET PAGESIZE 50
SELECT *
FROM hr.employees;
SPOOL OFF
EXIT;
EOF
Buradaki script'imizede yukarıdaki örneğimizde verdiğimiz gibi tekrar chmod ile yetkilerini verdikten sonra çalıştırabiliriz. Bu methodumuzu Windows'ta da uygulayabiliriz. Yani orada da bir bat dosyası bir sql dosyası yaratmak yerine sadece bir bat dosyası çalıştırıp, bat dosyası içine aşağıdaki bilgileri bu örnek için yapıştırabiliriz.
cd C:\
sqlplus /nolog <
Unix ve Linux'ta Script'ten Nasıl Değer Döndürebiliriz?
Yazdığımız scriptlerde amacımız eğer bir değer geri döndürmek ise sorgumuzun sonuçlarını alıp ekrana basmamız ve script içinde bu değeri işlememiz gerekir. Aşağıdaki örnekte employees tablosundan çektiğimiz sonuçları x değişkenimizin içine atarız. Sonrasında sql scriptinin içi bittiğinde console a geri döner ve eğer hiç bir sonuç yoksa bunu ekrana basar.
Script'lerden değer döndürmede sorun birden fazla satır ve değer geldiğinde oluşmaktadır. Bu durumda sonuçların parse edilmesi ve istenen sonucun ayrılması gerekmektedir; ancak tek sonuç geliyorsa işimiz kolaydır.
#!/bin/bash
x=`sqlplus -silent berke/berke <
2 Eylül 2013 Pazartesi
Linux / Unix Komutu: Crontab - Script Çalıştırma Zamanlaması ve Programlama
Crontab kullanılarak shell-script'lerini ve linux komutlarını belirli bir tarih ve zamanda çalıştırabiliriz. En bilinen örnek olarak her gün çalışacak bir backup içini crontab ile programlayabilir ve belirli bir zaman atayabiliriz.
Crontab'a Giriş Yapma:
Crontab -e ile crontab bilgisi ekleyebiliriz.
Crontab'a Giriş Formatı:
İlk olarak dakikalar belirtilir. Sonra saatler ve ayın hangi günü çalıştırılacağı gösterilir. En son olarak da shell scriptinin çalıştırılacağı dizin verilir. Tam format aşağıdaki gibidir.
{dakika} {saat} {ayın-hangi-günü-olduğu} {ay} {haftanın hangi günü olduğu} {script-dizini}
Örneğin ls komutumuzu veya abc.sh adlı dosyamızı haftanın her günü sabah saat 11 de çalıştırmak için crontab aşağıdaki gibi bir giriş yapmalıyız.
Crontab Örnekleri:
Hafta içi her gün akşam saat 11 de iş çalıştırılması
Her ayın 1. günü sabah saat 13.10 da iş çalıştırılması
Her 5 dakikada bir iş çalıştırılması
Her 5 dakikada bir iş çalıştırılması
Saat sabah 12'yi 1 geçe iş çalıştırılması
Crontab Opsiyonları:
crontab -e : crontab editlenmesi.
crontab -l : crontab işlerinin listelenmesi
Crontab'a Giriş Yapma:
Crontab -e ile crontab bilgisi ekleyebiliriz.
crontab -e
0 5 * * * /root/bin/backup.sh
Crontab'a Giriş Formatı:
İlk olarak dakikalar belirtilir. Sonra saatler ve ayın hangi günü çalıştırılacağı gösterilir. En son olarak da shell scriptinin çalıştırılacağı dizin verilir. Tam format aşağıdaki gibidir.
{dakika} {saat} {ayın-hangi-günü-olduğu} {ay} {haftanın hangi günü olduğu} {script-dizini}
- Dakika aralığı : 0 - 59
- Saat aralığı : 0 -23
- Ayın hangi günü olduğu bilgisi : 0 -31
- Ay : 1 - 12 {1=Ocak, 12 =Aralık}
- Haftanın hangi günü olduğu : 0 - 7 (0 veya 7 Pazar günüdür.)
Örneğin ls komutumuzu veya abc.sh adlı dosyamızı haftanın her günü sabah saat 11 de çalıştırmak için crontab aşağıdaki gibi bir giriş yapmalıyız.
0 11 * * 1,2,3,4,5 /home/users/berke/abc.sh
Crontab Örnekleri:
Hafta içi her gün akşam saat 11 de iş çalıştırılması
0 23 * * 1-5
Her ayın 1. günü sabah saat 13.10 da iş çalıştırılması
10 13 1 * *
Her 5 dakikada bir iş çalıştırılması
*/5 * * * *
Her 5 dakikada bir iş çalıştırılması
0,5,10,15,20,25,30,35,40,45,50,55 * * * *
Saat sabah 12'yi 1 geçe iş çalıştırılması
1 0 * * *
Crontab Opsiyonları:
crontab -e : crontab editlenmesi.
crontab -l : crontab işlerinin listelenmesi
Linux / Unix Komutu: Tee - Okuma ve Yazma
Tee komutu ile komutların çıktılarını hem görüntüleyip hem de log dosyalarına yazdırabiliriz. Böyle bir komuta ihtiyaç olmasının sebebi komutların çıktılarını hem log dosyasına yazılıp hem de ekranda görüntülenemiyor olmasıdır. Örneğin aşağıdaki gibi bir kullanımdan sonra ekranda görüntü göremeyiz.
Standard Output (Stdout) olarak nitelendirdiğimiz verileri tee komutunu kullanarak aşağıdaki gibi görebiliriz.
Yukarıdaki kullanımda ls çıktısının sonuçlarını hem abc.log da hem de ekran da görebiliriz. Yalnız bu kullanımda komutumuz her çalıştığında abc.log'un üzerine yazar. Bunu engellemek için -a argümanını kullanabiliriz.
Tee komutuyla yapabileceğimiz diğer önemli işlem ise aynı anda birden fazla log dosyasına yazabilmektir. Bu önemlidir çünkü scriptlerimiz veya komutlarımızı içerisinde birden fazla farklı yerle etkileşime girebiliriz. Bu yüzden aynı sonucu hem örnek olarak abc.log dosyasına hem de efg.log dosyasına yazmamız gerekebilir. Bu yüzden aşağıdaki ifadeyi kullanabiliriz.
ls > abc.log
Standard Output (Stdout) olarak nitelendirdiğimiz verileri tee komutunu kullanarak aşağıdaki gibi görebiliriz.
ls | tee abc.log
Yukarıdaki kullanımda ls çıktısının sonuçlarını hem abc.log da hem de ekran da görebiliriz. Yalnız bu kullanımda komutumuz her çalıştığında abc.log'un üzerine yazar. Bunu engellemek için -a argümanını kullanabiliriz.
ls | tee -a abc.log
Tee komutuyla yapabileceğimiz diğer önemli işlem ise aynı anda birden fazla log dosyasına yazabilmektir. Bu önemlidir çünkü scriptlerimiz veya komutlarımızı içerisinde birden fazla farklı yerle etkileşime girebiliriz. Bu yüzden aynı sonucu hem örnek olarak abc.log dosyasına hem de efg.log dosyasına yazmamız gerekebilir. Bu yüzden aşağıdaki ifadeyi kullanabiliriz.
ls | tee dosya1 dosya2 dosya3
Kaydol:
Kayıtlar (Atom)