$ sed '/^$/d' input.txt > output.txt
$ grep -v '^$' input.txt > output.txt
Hem 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.hr
dn: dc=spinlock
,dc=hr
objectClass: top objectClass: dcObject objectClass: organization o:spinlock.hr
dc:spinlock
# admin,spinlock.hr
dn: cn=admin,dc=spinlock
,dc=hr
objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
sudo slapcat
dn: dc=spinlock
,dc=hr
objectClass: top objectClass: dcObject objectClass: organization o:spinlock.hr
dc:spinlock
structuralObjectClass: 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=hr
objectClass: 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=hr
ou: People objectClass: organizationalUnit dn: ou=Group,dc=spinlock
,dc=hr
ou: 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.hr
dn: ou=People,dc=spinlock
,dc=hr
ou: 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=hr
cn:mirko
gidNumber:20000
objectClass: top objectClass: posixGroup dn: uid=mirko
,ou=people,dc=spinlock
,dc=hr
uid:mirko
uidNumber:20000
gidNumber:20000
cn:Mirko
sn:Mirko
objectClass: 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=
PASSWORD
mirko
,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 <mirko
dc=spinlock, dc=hr
> (default) with scope subtree # filter: uid=mirko
# requesting: ALL # #mirko
, people,spinlock.hr
dn: uid=mirko
,ou=people,dc=spinlock
,dc=hr
uid:mirko
uidNumber:20000
gidNumber:20000
cn:Mirko
sn:Mirko
objectClass: 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 root
uid=0(root) gid=0(root) groups=0(root)id
id:mirko
mirko
: 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=
hr
3
Does the LDAP database require login?No
Special LDAP privileges for root?No
Make the configuration file readable/writeable by its owner only?No
Allow LDAP admin account to behave like local root?Yes
Make local root Database admin.No
Does the LDAP database require login?No
LDAP administrative account:cn=admin,dc=h15,dc=ri
LDAP administrative password:Local crypt to use when changing passwords.
PASSWORD
md5
PAM 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=hr
uri 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
id
uid=mirko
20000
(mirko
) gid=20000
(mirko
) groups=20000
(mirko
)
sudo apt-get install libpam-ldap
Make local root Database admin.No
Does the LDAP database require login?No
Local 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=hr
uri 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:
mirko
Debian GNU/Linux tty5 Creating directory '/home/
PASSWORD
mirko
'. 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