ΠΡΠΈΠΌΠ΅Ρ 12-2. Badname, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ ΠΏΡΠΎΠ±Π΅Π»Ρ.
#!/bin/bash
# Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΡΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
for filename in *
do
badname=`echo "$filename" | sed -n /[\+\{\;\"\\\=\?~\(\)\<\>\&\*\|\$]/p`
# ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²: + { ; " \ = ? ~ ( ) < > & * | $
rm $badname 2>/dev/null # Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ "Π²ΡΡΡΡΠ΅Π»ΠΈΠ²Π°ΡΡΡΡ" Π² Π½ΠΈΠΊΡΠ΄Π°.
done
# Π’Π΅ΠΏΠ΅ΡΡ "ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΠΌΡΡ" ΠΎ ΡΠ°ΠΉΠ»Π°Ρ , ΡΡΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
find . -name "* *" -exec rm -f {} \;
# ΠΠ° ΠΌΠ΅ΡΡΠΎ "{}", find ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
# Π‘ΠΈΠΌΠ²ΠΎΠ» '\' ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ';' ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ», Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
exit 0
#---------------------------------------------------------------------
# Π‘ΡΡΠΎΠΊΠΈ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅, Π½Π΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, Ρ.ΠΊ. Π²ΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° "exit".
# ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ:
find . -name '*[+{;"\\=?~()<>&*|$ ]*' -exec rm -f '{}' \;
exit 0
# (Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.)
ΠΡΠΈΠΌΠ΅Ρ 12-3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅ΡΡ inode
#!/bin/bash
# idelete.sh: Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ inode.
# ΠΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°,
#+ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ? ΠΈΠ»ΠΈ -.
ARGCOUNT=1 # ΠΠΌΡ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
E_WRONGARGS=70
E_FILE_NOT_EXIST=71
E_CHANGED_MIND=72
if [ $# -ne "$ARGCOUNT" ]
then
echo "ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: `basename $0` filename"
exit $E_WRONGARGS
fi
if [ ! -e "$1" ]
then
echo "Π€Π°ΠΉΠ» \""$1"\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½."
exit $E_FILE_NOT_EXIST
fi
inum=`ls -i | grep "$1" | awk '{print $1}'`
# inum = Π½ΠΎΠΌΠ΅Ρ inode (index node) ΡΠ°ΠΉΠ»Π°
# ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ inode, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π°.
echo; echo -n "ΠΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ \"$1\" (y/n)? "
# ΠΠ»ΡΡ '-v' Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ 'rm' ΡΠΎΠΆΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ.
read answer
case "$answer" in
[nN]) echo "ΠΠ΅ΡΠ΅Π΄ΡΠΌΠ°Π»ΠΈ?"
exit $E_CHANGED_MIND
;;
*) echo "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° \"$1\".";;
esac
find . -inum $inum -exec rm {} \;
echo "Π€Π°ΠΉΠ» "\"$1"\" ΡΠ΄Π°Π»Π΅Π½!"
exit 0
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ find Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π² ΠΡΠΈΠΌΠ΅Ρ 12-22, ΠΡΠΈΠΌΠ΅Ρ 3-4 ΠΈ ΠΡΠΈΠΌΠ΅Ρ 10-9. Π ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° (man find) Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΌΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.
xargs
ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠΠ½Π° ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΈ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΡΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΎΠ΄ΠΈΠ½ΠΈΡΠ½ΡΠΌ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌ. ΠΠ°ΡΠ°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ, Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ too many arguments (ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²), ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ xargs ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅. ΠΠ±ΡΡΠ½ΠΎ, xargs ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π° stdin ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° (ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°.
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π°Π΄Π°Π½Π°, ΡΠΎ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ echo. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ, xargs Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ.
bash$ ls -l
total 0
-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1
-rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file2
bash$ ls -l | xargs
total 0 -rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file1 -rw-rw-r-- 1 bozo bozo 0 Jan 29 23:58 file2
ls | xargs -p -l gzip -- ΡΠΏΠ°ΠΊΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gzip Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π²ΡΠ²ΠΎΠ΄Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
xargs ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ΅Π½Ρ Π»ΡΠ±ΠΎΠΏΡΡΠ½ΡΠΉ ΠΊΠ»ΡΡ -n NN, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ "ΠΏΡΠΈΡΠ΅ΡΡ" ΡΠΈΡΠ»ΠΎΠΌ NN.
ls | xargs -n 8 echo -- Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² 8 ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ.
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΎΠΏΡΠΈΡ -- -0, Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Ρ find -print0 ΠΈΠ»ΠΈ grep -lZ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈ ΠΊΠ°Π²ΡΡΠΊΠΈ.
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f
grep -rliwZ GUI / | xargs -0 rm -f
ΠΠ±Π΅ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΄Π°Π»ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² "GUI". (Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S.C.)
ΠΡΠΈΠΌΠ΅Ρ 12-4. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ xargs Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»Π°
#!/bin/bash
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π² ΡΠ΅ΠΊΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅,
# ΠΊΡΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΡΡΠΎΠΊ ΠΈΠ· /var/log/messages.
# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ,
# ΡΠΎ ΡΠ°ΠΉΠ» /var/log/messages Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
# #root chmod 644 /var/log/messages
LINES=5
( date; uname -a ) >>logfile
# ΠΡΠ΅ΠΌΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅
echo --------------------------------------------------------------------- >>logfile
tail -$LINES /var/log/messages | xargs | fmt -s >>logfile
echo >>logfile
echo >>logfile
exit 0
# Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅:
# --------
# ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² /var/log/messages
#+ Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ Π² 20 ΠΌΠΈΠ½ΡΡ.
# ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ "watch".
ΠΡΠΈΠΌΠ΅Ρ 12-5. copydir, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ xargs
#!/bin/bash
# ΠΠΎΠΏΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
# Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
if [ -z "$1" ] # ΠΡΡ ΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ Π·Π°Π΄Π°Π½.
then
echo "ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: `basename $0` directory-to-copy-to"
exit 65
fi
ls . | xargs -i -t cp ./{} $1
# ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠ½ΡΠΌ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ
# cp * $1
# Π΅ΡΠ»ΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
exit 0
expr
Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ: Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ). ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ.
expr 3 + 5
Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 8
expr 5 % 3
Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 2
expr 5 \* 3
Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ 15
Π Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΡΠ»ΡΡΠ΅ΠΌ.
y=`expr $y + 1`
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ let y=y+1, ΠΈΠ»ΠΈ y=$(($y+1)). ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
z=`expr substr $string $position $length`
ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ Π΄Π»ΠΈΠ½ΠΎΠΉ $length ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ $position.
ΠΡΠΈΠΌΠ΅Ρ 12-6. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ expr
#!/bin/bash
# ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ 'expr'
# =======================================
echo
# ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
# -------------- --------
echo "ΠΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ"
echo
a=`expr 5 + 3`
echo "5 + 3 = $a"
a=`expr $a + 1`
echo
echo "a + 1 = $a"
echo "(ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ)"
a=`expr 5 % 3`
# ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ (Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ)
echo
echo "5 mod 3 = $a"
echo
echo
# ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
# ---------- --------
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 1 Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎΠΎ, 0 -- Π΅ΡΠ»ΠΈ Π»ΠΎΠΆΠ½ΠΎ,
#+ Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ, ΠΏΡΠΈΠ½ΡΡΡΠΌ Π² Bash.
echo "ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ"
echo
x=24
y=25
b=`expr $x = $y` # Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.
echo "b = $b" # 0 ( $x -ne $y )
echo
a=3
b=`expr $a \> 10`
echo 'b=`expr $a \> 10`, ΠΏΠΎΡΡΠΎΠΌΡ...'
echo "ΠΡΠ»ΠΈ a > 10, ΡΠΎ b = 0 (Π»ΠΎΠΆΡ)"
echo "b = $b" # 0 ( 3 ! -gt 10 )
echo
b=`expr $a \< 10`
echo "ΠΡΠ»ΠΈ a < 10, ΡΠΎ b = 1 (ΠΈΡΡΠΈΠ½Π°)"
echo "b = $b" # 1 ( 3 -lt 10 )
echo
# ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
b=`expr $a \<= 3`