23 Ekim 2019 Çarşamba

iconv komutu

-f seçeneği
Kaynak dosyanın kullandığı encoding belirtilir.

-t seçeneği
Hedef dosyanın kullanmasını istediğimiz encoding belirtilir.

Örnek
UTF-8'de Latin 1'e çevirmek için şöyle yaparız.
iconv -f utf-8 -t iso-8859-1 < mwe.txt
Örnek
UTF-16'dan UTF-8' çevirmek için şöyle yaparız
iconv -f utf-16 -t utf-8 batchfile.bat > filename_new.txt
Örnek
cp1252'den UTF-8'e çevirmek için şöyle yaparız.
iconv -f cp1252 -t utf-8
Örnek
ISO-8859-1'den UTF-8'e çevirmek için şöyle yaparız.
iconv -f ISO-8859-1 -t UTF-8 u.item > movie_def.txt
Örnek
Elimizde şöyle bir dosya olsun. Bu dosyada fonetik işaretlere (diacritic) sahip karakterler var.
>  ~ cat file
ë
ê
Ý,text
Ò
É
file isimli kaynak dosyayı ASCII yapmak için şöyle yaparız. ASCII//TRANSLIT seçeneğiyle aynı zamanda fonetik işaretleri (diacritic) silmek mümkün.
$ iconv -t ASCII//TRANSLIT file
e
e
Y,text
O
E

bash kodlama - associative array

Giriş
declare -A ile map tanımlanır. Şöyle yaparız.
declare -A obj
obj["key1"]="val1"
obj["key2"]="val2"

for item in ${!obj[@]}; do
  echo "${obj[${item}]} ${item}"
done
Tüm Map'i Dolaşmak
Örnek
array isimli bir map olsun. !assoc[@] ile key'lere erişiriz. $i ile key değerine göre arama yaparız. Şöyle yaparız.
declare -A assoc=([foo]="123" [bar]="456")
for i in "${!assoc[@]}" ; do 
    echo "${assoc[$i]}"
done 
Örnek
Şöyle yaparız.
declare -a ratings

for movid in ...
do
  countLines=...
  sumRatings=...
  avgRating=...
  if [ $countLines -gt 100 ]
  then
    ratings[$movid]=$avgRating
  fi
done

for k in "${!ratings[@]}"
do
  echo $k'|'${ratings["$k"]}'
done
Map'te Arama Yapmak
Örnek
done isimli bir map tanımlayıp içinde arama yapmak için şöyle yaparız.
#!/bin/bash
# Keep an associative array of which names you have already processed
# Requires Bash 4
declare -A done
for file in 1/* 2/*; do
  base=${file#*/}  # trim directory prefix from value
  test "${done[$base]}" && continue
  : do things ...
  done["$base"]="$file"
done

22 Ekim 2019 Salı

chmod ve sticky bit - Dizinde Herkes Dosya Oluşturabilir Ancak Sadece Dizin Sahibi Silebilir

sticky bit
sticky biti genellikle dizinlerde kullanılır. ls komutu ile bakılınca dizin t veya T ile gösteriliyorsa sticky biti atanmış anlamına gelir.

Dizine Uygulamak
Açıklaması şöyle. Bir dizinde herkes dosya oluşturabilir ancak sadece dosyanın sahibi silebilir.
That is, the sticky bit's presence on a directory only allows contained files to be renamed or deleted if the user is either the file's owner or the containing directory's owner (or the user is root).
Bu bit genellikle /tmp dizininde kullanılır. Böylece bu dizinde herkes kendi dosyasını oluşturabilir ancak başkasının dosyasını silemez. Açıklaması şöyle.
For directories, it prevents unprivileged users from removing or renaming a file in the directory unless they own the file or the directory; this is called the restricted deletion flag for the directory, and is commonly found on world-writable directories like /tmp.
Örnek
Şöyle yaparız. ls komutunun çıktısında t harfi görülebilir.
# chmod 1777 directory
# ls -ld directory
drwxrwxrwt  2 root  wheel  2 Oct 21 17:06 directory/
Örnek
Şöyle yaparız. user ve group ve owner'a yazma hakkı verir. Ayrıca sticky bit'i de atar.
# chmod ugo+w,+t directory
Dosyaya Uygulamak
Dosyalarda da uygulanabilir. Açıklaması şöyle. Ancak günümüzde bir işlevi olup olmadığını bilmiyorum.
The sticky bit was originally used for a completely different purpose: if it was set on an executable file, it told the operating system to retain the text segment in swap. Thus the name "Sticky Bit".

tac komutu

Giriş
Dosyayıs tersinden gösterir.

Örnek
Şöyle yaparız.
$ echo -e "Hello\nNew\nWorld\n!" > file
$ tac file
!
World
New
Hello
-b seçeneği
Açıklaması şöyle.
-b, --before
The separator is attached to the beginning of the record that it precedes in the file.
Örnek
Şöyle yaparız.
$ echo -e "Hello\nNew\nWorld\n!" > file
$ tac -b file


!
World
NewHello

20 Ekim 2019 Pazar

SIGINFO

Giriş
Standart bir LINUX sinyali değildir. Açıklaması şöyle.
On some Unix-style systems (BSDs and macOS), CtrlT sends SIGINFO to the running process. Some commands handle this directly; otherwise, it’s handled by the kernel, and that’s what produces the output you’re seeing.
Örnek
Şöyle yaparız. Kullanıcı Ctrl + T tuşlarına bastığı için fazladan çıktıyı görür.
$ ping -q -c 100 google.com
PING google.com (172.217.16.46): 56 data bytes
load: 2.39  cmd: ping 5374 running 0.00u 0.00s
2/2 packets received (100.0%) 33.914 min / 34.169 avg / 34.423 max

rsync komutu - Replicate Directory Structure

Giriş
Replicate Directory Structure anlamına gelir

1. Kurulum
Kurmak için şöyle yaparız
sudo apt install rsync 
2. Genel Kullanım
Şöyledir. Yani seçeneklerden sonra kaynak dizin daha sonra da hedef dizin belirtilir
rsync ...options... /full/path/src ./dst
Çok kullanılan seçenekler
-a 
--progress
--inplace

Örnek
Şöyle yaparız. -n ile prova yapılır yani ne işlem yapılacağı görülür. -v ile daha detaylı bilgi gösterilir. -f ile dosyalar seçilir.
rsync -nvr -f '+ *.odt' -f '+ **/' -f '- *' --prune-empty-dirs ~/Documents/ ~/copies/
3. Seçenekler

-a seçeneği
Açıklaması şöyle.
The -a option is a combination flag. It stands for "archive" and syncs recursively and preserves symbolic links, special and device files, modification times, group, owner, and permissions. It is more commonly used than -r and is usually what you want to use.
Örnek
Şöyle yaparız.
BACKUPPOINT=/mnt/user
MOUNTPOINT=/mnt/disks/REDBackup

rsync -a -v --delete $BACKUPPOINT/ $MOUNTPOINT/Daily/ 2>&1
Örnek
Şöyle yaparız. Bulunduğumuz dizini hedef dizine kopyalar
rsync -av ./ destination:destPath/
Örnek
Sadece dizin yapısını timestamp bilgisi de dahil olacak şekilde kopyalamak için şöyle yaparız.
rsync -a --include='*/' --exclude='*' /some/path/dir/ dir
Açıklaması şöyle.
This would recreate the directory structure of /some/path/dir as dir in the current directory, without copying any files.

Any directory encountered in the source path would be created at the target due to the inclusion pattern, but anything else would be excluded. As a side effect of using -a (--archive), you'll get the same timestamps on all subdirectories in the target as in the source. This also works for creating local directory structures from remote directories (and vice versa).
--append
restart vs gibi işlemlerde kaldığı yerden deva etmesi için kullanılır. --append seçeneğini kullanırken kaynak dosyanın değişmediğinden emin olmak gerekir.
Örnek
Şöyle yaparız
rsync -a -vi --append --inplace --partial --progress 
  /path/to/source/  
  /path/to/target
Açıklaması şöyle.
You could remove --progress if you didn't want to see a progress indicator, and -vi if you are less bothered about a more informational result (you'll still get told if it succeeds or fails). You may see -P used in other situations: this is the same as --partial --progress and can be used for that here too.

--append to continue after a restart without checking previously transferred data
--partial to keep partially transferred files
--inplace to force the update to be in-place
If you are in any doubt at all that the source might have changed since the first attempt at rsync, use the (much) slower --append-verify instead of --append. Or better still, remove the --append flag entirely and let rsync delete the target and start copying it again.

-c seçeneği - MD5 comparison yapar
Açıklaması şöyle.
-c causes rsync to compare files by MD5 checksum (without it, it normally uses only the timestamp and size for quicker comparisons).
--delete seçeneği
Açıklaması şöyle.
Add the --delete flag to to completely overwrite the target directory tree each time. If you want to see what's going on, add -v.
Şöyle yaparız.
rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/
--exclude seçeneği
Bazı dosya veya dizinleri hariç bırakır
Örnek
Şöyle yaparız
rsync -av --exclude '*.txt' dir1/ dir2/
Örnek
Şöyle yaparız. logs dizini hariç bırakılır
rsync --archive --exclude /logs /home/user/glassfish/domains/domain1 /home/user/backup
-H seçeneği
Örnek
Açıklaması şöyle
if you don't use -H, hardlinks are lost.
if you don't use -S, sparse files may have been expanded
Şöyle yaparız, hard link'ler kaybolur, sparse dosyalar genişletilir.
sudo rsync --progress -au --delete --rsync-path="sudo rsync" /u/ henry@enceladus:/u
--ignore-existing seçeneği
Açıklaması şöyle.
A temporary file is O_EXCL created by default (only disabled if you use --inplace) and then renamed over the target file. Use --ignore-existing to not overwrite B if it exists.
Örnek
Şöyle yaparız. B'de bulunan ancak A'da eksik olanları kopyalar
rsync -a --ignore-existing B A
--inplace seçeneği
Açıklaması şöyle.
With standard options, rsync will copy the new file assigning it a semi-random name, then it will rename the new file with the original name. In this process, no writes are directed at the original file, preserving its hadlinks.

On the other side, using the non-default--inplace option will overwrite the original file and its hardlinks.

Anyway, I strongly suggest to give a look at --link-dest option, which is extremely useful for deduplicated backups.
-i seçeneği
Açıklaması şöyle. Normalde rsync farklı gördüğü dosyaları karşı tarafa kopyalar.
To avoid that, you can also use -n and -i. The former ensures that rsync doesn't do any change and only compares, and the latter causes it to display the differences that it sees.
Örnek
Şöyle yaparız.
$ rsync -rcni dir1/ dir2/
>f+++++++++ c
>fc.T...... d/b
Açıklaması şöyle.
Tells me, by way of all those +s, that file c does not exist in dir2, and file d/b does, but is different (indicated by the c in the first column). The T says that it's time would be updated (had we not used -n).

The format of -i's output is described in the manpage for rsync. You can man rsync and get to the part that explains that output by typing /--itemize-changes$ (and hitting Enter).
-P seçeneği
--partial veya --progress seçenekleri ile aynıdır. progress gösterir. Dosya göndermek için şöyle yaparız.
rsync -chavzP dump.sql user@ip-address:~
--partial seçeneği
Açıklaması şöyle
--partial                keep partially transferred files
--progress seçeneği
Şöyle yaparız.
rsync -av --progress file.txt user@host:
--prune-empty-dirs seçeneği
Şöyle yaparız. Eğer dizin altında istenilen dosya yoksa boş dizini oluşturmaz.
rsync -zarv  --prune-empty-dirs --include "*/"  --include="*.sh" --exclude="*"
  "$from" "$to"
-R/--relative seçeneği
Açıklaması şöyle. Full path'i muhafaza eder.
-R, --relative Use relative paths. This means that the full path names specified on the command line are sent to the server rather than just the last parts of the filenames. This is particularly useful when you want to send several different directories at the same time. For example, if you used this command: rsync -av /foo/bar/baz.c remote:/tmp/ ... this would create a file named baz.c in /tmp/ on the remote machine. If instead you used rsync -avR /foo/bar/baz.c remote:/tmp/ then a file named /tmp/foo/bar/baz.c would be created on the remote machine, preserving its full path. These extra path elements are called “implied directories” (i.e. the “foo” and the “foo/bar” directories in the above example).
-v/--version seçeneği
Şöyle yaparız
rsync ---version
-z seçeneği
Sanırım sıkıştırarak gönderiyor.
Örnek
Şöyle yaparız
rsync -az ~/Documents/projects/myproject/dist/ root@13.21.13.12:public_html/