$ sed '/^$/d' input.txt > output.txt$ grep -v '^$' input.txt > output.txtHem grep hem sed ^$ desenini boş satırları yakalamak için kullanıyor. Grep ile kullanılan -v seçeneği ise yakalanan satırları gözardı etmek için kullanılıyor.
Bu blog not tutma alışkanlığı olmayan birisi olarak kendime notları barındırmaktadır. Aynı zamanda benim için bir öğrenme yöntemi oluşturmasını da umut etmekteyim.
$ sed '/^$/d' input.txt > output.txt$ grep -v '^$' input.txt > output.txt$ screenkomutunu vererek yeni bir screen oturumu açabilirsiniz. Screen de birçok program gibi ayar doslarını nokta(dot) dosyası olarak kullanıcının ev dizininde tutar. İlk çalıştırdığınızda muhtemelen sizi screen 'in lisansını, hataların nereye raporlanacağını vb. bilgileri içeren bir sayfa karşılayacaktır. Bu sayfayı kapatmak için ~/.screenrc sayfasına aşağıdaki satırı ekleyebilirsiniz:
startup_message off Yaratılan her screen oturumu eşsiz bir numara ile tanımlanır. İlk pencere 0 ile numaralandırılır ve 1, 2, 3 şeklinde devam eder. Ctrl+a screenin varsayılan komut karakteridir. Bununla birlikte Ctrl+a 'dan sonra girilen komut büyük/küçük harf duyarlıdır. Yani Ctrl+a n ve Ctrl+a N farklı anlamlara gelir.$ screen -rKoparılan sadece bir tane screen oturumu varsa direk olarak ona bağlanırsınız. Birden fazla oturum olması durumunda ise bir şuna benzer liste karşınıza çıkar:
$ screen -rBir tanesini seçip yeniden bağlanabilirsiniz:
There are several suitable screens on:
2608.pts-0.pardus2011 (Detached)
2665.pts-0.pardus2011 (Detached)
$ screen -r 2608.pts-0.pardus2011Screenin bir başka önemli özelliği de bir screen ourumunu paylaşabiliyor olmanızdır. Bunun için aşağıdaki adımları izlemeniz yeterlidir:
hardstatus alwayslastlineİlk iki satırda durum çubuğunun en altta olması gerektiği ve bu satırda ne olması gerektiği yazılıdır. # ile başlayan satır yorum satırı, yorum satırının altındaki "screen -t ScreenAdı ScreenNumarası KabukKomutu" formatındaki satırlar ise başlatılacak screen tanımlamalarıdır.
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]'
# Default screens
screen -t shell1 0
screen -t shell2 1
screen -t server 2 ssh me@myserver
anahtar=değer(key=value) çifti içerir.dc=example,dc=com 'da ağacın köküne sahip olabilir. Example, Inc. şirketinde çalışmaya başlayan birisi DN'i cn=person,ou=People,dc=example,dc=com olan bir LDAP girdisine sahip olabilir.cn=person gibi, DN'in tekil parçaları da anahtar=değer şeklindedir. Bu "anahtarlar", cn, ou ve dc; Common Name, Organizational Unit ve Domain Component kelimelerinin kısaltmalarıdır. Bunlar hergün kullanacağınız LDAP terminolojisinin bir parçasıdır./etc/ldap/slapd.conf dosyasında tanımlı şema (schema) dosyaları okunarak yapılandırılabilir ve yüklenebilir./etc/passwd ve /etc/group'da bilgi saklamayı içerir. person kullanıcı ismi uid=person,ou=People,dc=example,dc=com LDAP girdisine eşlenir.LDAP System Administration (by O'Reilly) kitabına bakabilirsiniz.Name Service Switch mekanızmasının bir uygulamasıdır.Pluggable Authentication Modules")'ın bir uygulamasıdır.$USERNAME i kullanıcı isminizle değiştirerek /etc/sudoers dosyanıza ekleyin:Dialog) ve öncelik=düşük (priority=low) olarak cevaplayın.monarch.spinlock.hr ve 192.168.7.12 IP adresine sahip. Sunucu ve istemcinin ikisi de aynı makineye kurulacak. Bununla birlikte, ilişkili oldukları yerlerde sunucu ve istemci rollerini ayırmak için, istemci monarch.spinlock.hr ve sunucu ldap1.spinlock.hr olarak adlandırılacak. /etc/hosts dosyasına yapılacak aşağıdaki gibi bir ekleme bu şemayı destekleyecektir: 127.0.0.1 'e atanmış olabilir. Bu ağ işlemlerinde bazı hatalara yol açabilir ve açacaktır. Bu yüzden /etc/hosts dosyasındaki "localhost" girdisinin aynen aşağıdaki gibi olmasına dikkat edin(ne eksik, ne fazla):/etc/ldap/ldap.conf 'u düzenleyelim. Bu, ldapsearch ve diğer komutları her defasında temel parametreleri elle girmemize gerek kalmadan çalıştırmamızı sağlayacak./etc/ldap/ldap.conf 'ta aşağıdaki iki satırı ekinleştirin, gerekirse dosyayı kendiniz oluşturun:/etc/ldap/slapd.conf 'u düzenleyelim.0 veya "none" 'dan 256 'ya değiştirin:index objectClass eq" satırını arayın ve bir başka arama indexi daha ekleyin. Belirli kombinasyonlarda, arama girdileri indexlenmediklerinde herhangi bir sonuç dönmemesi mümkün. Bu yüzden bu adım önemli:userPassword, /etc/ldap/slapd.conf dosyasındaki öntanımlı erişim kısıtlamalarından dolayı anonim okuyuculara gösterilmez.ldapsearch -x# extended LDIF # # LDAPv3 # base <dc=spinlock, dc=hr> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # #spinlock.hrdn: dc=spinlock,dc=hrobjectClass: top objectClass: dcObject objectClass: organization o:spinlock.hrdc:spinlock# admin,spinlock.hrdn: cn=admin,dc=spinlock,dc=hrobjectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
sudo slapcatdn: dc=spinlock,dc=hrobjectClass: top objectClass: dcObject objectClass: organization o:spinlock.hrdc:spinlockstructuralObjectClass: organization entryUUID: 350a2db6-87d3-102c-8c1c-1ffeac40db98 creatorsName: modifiersName: createTimestamp: 20080316183324Z modifyTimestamp: 20080316183324Z entryCSN: 20080316183324.797498Z#000000#000#000000 dn: cn=admin,dc=spinlock,dc=hrobjectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e2NyeXB0fVdSZDJjRFdRODluNHM= structuralObjectClass: organizationalRole entryUUID: 350b330a-87d3-102c-8c1d-1ffeac40db98 creatorsName: modifiersName: createTimestamp: 20080316183324Z modifyTimestamp: 20080316183324Z entryCSN: 20080316183324.804398Z#000000#000#000000
spinlock.hr olması durumunda, en uç seviye elemanı dc=spinlock,dc=hr. Alttaki bir sonraki seviyede, kurumunuz, insanlar, gruplar, servisler, ağlar, protokoller vb. alt "kurumsal birimlere"("organizational units") ayrılır.İnsanlar(People) ve Grup(Group). Bu ikisi yaklaşık olarak Unix /etc/passwd ve /etc/group dosyalarına karşılık gelecektir./var/tmp/ou.ldif. Boş satırların girdileri ayırdığına dikkat edin:dn: ou=People,dc=spinlock,dc=hrou: People objectClass: organizationalUnit dn: ou=Group,dc=spinlock,dc=hrou: Group objectClass: organizationalUnit
sudo invoke-rc.d slapd stop sudo slapadd -c -v -l /var/tmp/ou.ldif sudo invoke-rc.d slapd start
ldapsearch -x ou=people# extended LDIF # # LDAPv3 # base <dc=spinlock, dc=hr> (default) with scope subt # filter: ou=people # requesting: ALL # # People,spinlock.hrdn: ou=People,dc=spinlock,dc=hrou: People objectClass: organizationalUnit # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
/var/tmp/user1.ldif. Boş satırlar girdileri ayırmaktadır:dn: cn=mirko,ou=group,dc=spinlock,dc=hrcn:mirkogidNumber:20000objectClass: top objectClass: posixGroup dn: uid=mirko,ou=people,dc=spinlock,dc=hruid:mirkouidNumber:20000gidNumber:20000cn:Mirkosn:MirkoobjectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/bash homeDirectory: /home/mirko
ldapadd -c -x -D cn=admin,dc=Enter LDAP Password:spinlock,dc=hr-W -f /var/tmp/user1.ldifadding new entry "cn=PASSWORDmirko,ou=group,dc=spinlock,dc=hr" adding new entry "uid=mirko,ou=people,dc=spinlock,dc=hr"
ldappasswd -x -D cn=admin,dc=spinlock,dc=hr -W -S uid=mirko,ou=people,dc=spinlock,dc=hr
New password: NEW USER PASSWORD
Re-enter new password: NEW USER PASSWORD
Enter LDAP Password: ADMIN PASSWORD
Result: Success (0)
spinlock,dc=hr) ya da DN'in herhangi bir bileşenini gözardı edemezsiniz. Bu genellikle komut satırı örneklerinin uzun ve anlaşılmaz olmasına yol açabilir ve sıkıcı, gereksiz bir iş olarak görülebilir. Bunu sorun olarak görüyorsanız, çözüm için ya bu duruma alışmalısınız ya da bu bilgilerin bir çoğunu sizin için dolduran bir grafiksel LDAP sunucusu kullanmalısınız./etc/ldap/slapd.conf dosyasındaki erişim kısıtlamalarından dolayı, yaratmış olsak bile parola alanı, userPassword, gösterilmeyecektir.ldapsearch -x uid=# extended LDIF # # LDAPv3 # base <mirkodc=spinlock, dc=hr> (default) with scope subtree # filter: uid=mirko# requesting: ALL # #mirko, people,spinlock.hrdn: uid=mirko,ou=people,dc=spinlock,dc=hruid:mirkouidNumber:20000gidNumber:20000cn:Mirkosn:MirkoobjectClass: top objectClass: person objectClass: posixAccount loginShell: /bin/bash homeDirectory: /home/mirko# search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
root ve mirko kullanıcılarının varlığını test edelim. mirko görünmezken yönetici görünecektir:id rootuid=0(root) gid=0(root) groups=0(root)idid:mirkomirko: No such user
sudo apt-get install libnss-ldap nscd
LDAP server URI:ldap://(Note the "ldap://", NOT "ldapi://"!) Distinguished name of the search base:192.168.7.12/LDAP version to use:dc=spinlock,dc=hr3Does the LDAP database require login?NoSpecial LDAP privileges for root?NoMake the configuration file readable/writeable by its owner only?NoAllow LDAP admin account to behave like local root?YesMake local root Database admin.NoDoes the LDAP database require login?NoLDAP administrative account:cn=admin,dc=h15,dc=riLDAP administrative password:Local crypt to use when changing passwords.PASSWORDmd5PAM profiles to enable: select all
/etc/libnss-ldap.conf dosyasını açın. Yapılandırma satırlarını gösterildiği gibi yerlerştirin ve ayarlayın:base dc=spinlock,dc=hruri ldap://192.168.7.12/
/etc/nsswitch.conf dosyasındaki passwd ve group ile ilgili satırları aşağıdaki iki satırla değiştirin: passwd: files ldap group: files ldap
sudo invoke-rc.d nscd stop
iduid=mirko20000(mirko) gid=20000(mirko) groups=20000(mirko)
sudo apt-get install libpam-ldap
Make local root Database admin.NoDoes the LDAP database require login?NoLocal crypt to use when changing passwords.md5
/etc/pam_ldap.conf dosyasını açın. Yapılandırma satırlarını gösterildiği gibi yerlerştirin ve ayarlayın:base dc=spinlock,dc=hruri ldap://192.168.7.12/
account sufficient pam_unix.so account required pam_ldap.so # Enable if using Kerberos: #account required pam_krb5.so
# Disable the three lines if using Kerberos: auth [success=1 default=ignore] pam_unix.so nullok_secure auth required pam_ldap.so use_first_pass auth required pam_permit.so # Enable the three lines if using Kerberos: #auth sufficient pam_unix.so nullok_secure #auth sufficient pam_krb5.so use_first_pass #auth required pam_deny.so
password sufficient pam_unix.so nullok obscure md5 # Disable if using Kerberos: password required pam_ldap.so use_first_pass # Enable if using Kerberos: #password required pam_krb5.so use_first_pass
session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 # Enable if using Kerberos: #session optional pam_krb5.so minimum_uid=1000
mirko kullanıcısıyla sisteme giriş başarılı olmalıdır:Login:Password:mirkoDebian GNU/Linux tty5 Creating directory '/home/PASSWORDmirko'. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.mirko@host:~$
pam_mkhomedir modülü tarafından halledilir. Bu modül eksik ev dizinlerini otomatik olarak yaratır.| Tablo | Anlamı |
|---|---|
raw | Paketlerin düşük seviye ayrıştırılması. |
nat | Paket başlığında değişiklikler (where NAT takes place). |
mangle | Özelleştirilmiş paket ayrıştırması. |
filter | Paket filtreleme. |
| Zincir | Anlamı |
|---|---|
PREROUTING | Yönlendirmeden(routing) devreye girmeden makineye gelen trafik. |
INPUT | Makinenin kendisine gelen trafik. |
FORWARD | Makine üzerinden geçen trafik (başka makinede üretilen, hedefi başka makine olan). |
OUTPUT | Yerel olarak yaratılmış trafik (hedef yerel ya da dış bir makine olabilir). |
POSTROUTING | Dışarı giden trafik. |
PREROUTING zincirinde raw, mangle ve nat tabloları var. Trafik akışı sırasıyla bu tabloların üçünden de geçer. Incoming
Traffic
|
|
V
+----------+
|PREROUTING|
+----------+
| raw | <--------------+
| mangle | |
| nat | |
+----------+ |
| |
| |
Routing |
+- Decision -+ |
| | |
| | |
V V |
Local Remote |
Destination Destination |
| | |
| | |
V V |
+--------+ +---------+ |
| INPUT | | FORWARD | |
+--------+ +---------+ |
| mangle | | mangle | |
| filter | | filter | |
+--------+ +---------+ |
| | |
| | |
V | |
Local | |
Machine | |
| | |
| | |
V | |
Routing | |
Decision | |
| | |
| | |
V | |
+--------+ | |
| OUTPUT | | |
+--------+ | |
| raw | | |
| mangle | | |
| nat | | |
| filter | | |
+--------+ | |
| | |
| +-------------+ |
| | POSTROUTING | Local
+----> +-------------+ --> Traffic
| mangle |
| nat |
+-------------+
|
|
V
Outgoing
Traffic