LinuxForum.Fans
Тема

Как из кода сделать скрипт?

Автор: Termo 7 сообщений 2104 просмотров
#75231

вот исходный код

text

#!/bin/bash
# defrag v0.08 by Con Kolivas <kernel@kolivas.org
# Braindead fs-agnostic defrag to rewrite files in order largest to smallest
# Run this in the directory you want all the files and subdirectories to be
# reordered. It will only affect one partition. It works best when run twice.
# Are you really crazy enough to be using this? It might blow your data
# into tiny little useless chunks.

trap 'abort' 1 2 15

renice 19 $$ > /dev/null

abort() { echo -e "\nAborting" rm -f tmpfile dirlist exit 1 }

fail() { echo -e "\nFailed" abort }

declare -i filesize=0 declare -i numfiles=0

#The maximum size of a file we can easily cache in ram declare -i maxsize=$((`awk '/MemTotal/ {print $2}' /proc/meminfo`*1024)) (( maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` )) (( maxsize/= 2))

if [[ -a tmpfile || -a dirlist ]] ; then echo dirlist or tmpfile exists exit 1 fi

# Sort in the following order: # 1) Depth of directory # 2) Size of directory descending # 3) Filesize descending # I made this crap up. It's completely unvalidated.

echo "Creating list of files..."

#stupid script to find max directory depth find -xdev -type d -printf "%d\n" | sort -n | uniq > dirlist

#sort directories in descending size order cat dirlist | while read d; do find -xdev -type d -mindepth $d -maxdepth $d -printf "\"%p\"\n" | \ xargs du -bS --max-depth=0 | \ sort -k 1,1nr -k 2 |\ cut -f2 >> tmpfile if (( $? )) ; then fail fi

done

rm -f dirlist

#sort files in descending size order cat tmpfile | while read d; do find "$d" -xdev -type f -maxdepth 1 -printf "%s\t%p\n" | \ sort -k 1,1nr | \ cut -f2 >> dirlist if (( $? )) ; then fail fi done

rm -f tmpfile

numfiles=`wc -l dirlist | awk '{print $1}'`

echo -e "$numfiles files will be reordered\n"

#copy to temp file, check the file hasn't changed and then overwrite original cat dirlist | while read i; do (( --numfiles )) if [[ ! -f $i ]]; then continue fi

#We could be this paranoid but it would slow it down 1000 times #if [[ `lsof -f -- "$i"` ]]; then # echo -e "\n File $i open! Skipping" # continue #fi

filesize=`find "$i" -printf "%s"` # read the file first to cache it in ram if possible if (( filesize < maxsize )) then echo -e "\r $numfiles files left \c" cat "$i" > /dev/null else echo -e "\r $numfiles files left - Reordering large file sized $filesize ... \c" fi

datestamp=`find "$i" -printf "%s"` cp -a -f "$i" tmpfile if (( $? )) ; then fail fi # check the file hasn't been altered since we copied it if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then continue fi

mv -f tmpfile "$i" if (( $? )) ; then fail fi done

echo -e "\nSucceeded"

rm -f dirlist

как из него сделать исполняемый скрипт?

1. сохранить как script.sh
2. сделать исполняемым chmod a+x script.sh
3. войти в директорию и запустить? cd ../.. script.sh
или sudo sh script.sh?

или я что-то упустил?
*просто я уже давненько ничего не запускал* :)

#75256

краткость - сестра таланта?
понимаю...

#75258
Termo написал:
1. сохранить как script.sh
2. сделать исполняемым chmod a+x script.sh
3. войти в директорию и запустить? cd ../.. script.sh
или sudo sh script.sh?

да.

#75295

замечания по скрипту
1. лучше запускать от root
2. работает по скорости средне, a la defraggler.exe
3. большие файлы обрабатывает медленно и печально, дефрагментирует слабо
как пример, раздел /home - было 22,12%, стало 17,71%
раздел /usr было 2,23%, стало 0,81%

в общем, раз в год можно сделать.

#75360
Termo написал:
или sudo sh script.sh?

если вы хотите приключений на свою ... то именно так.
но лучше НЕ надо
таким образом запускается вредоносное ПО, только-что скаченное из сети.

Writer написал:
2. сделать исполняемым chmod a+x script.sh

желательно chmod 744 script.sh
и ещё - если вы не понимаете точно, как это работает - лучше сделать отдельного юзера, там сделать скрипт, и там-же его запускать. Во всяком случае, этот скрипт не сможет прибить ваши нужные данные. (в большинстве дистрибутивов).

sudo в убунте == права суперпользователя == убитая система и ваши данные.

#75662
drBatty написал:
если кто-то бьётся головой об стену, это не говорит о безопасности этого занятия. К тому-же, этот кто-то в каске
Termo написал:
почему я не могу запустить от рута программу если я этого желаю?
просто я не совсем понял о чем речь пошла...

Обсуждение продолжено в другой теме smile
Эти два последних сообщения вынужден удалить...

Войдите или зарегистрируйтесь, чтобы ответить.