How can we help?
Удаляет из текстового файла пустые строки и заменяет маленькие символы на большие, из файла 123 и делает 123out:
#!/bin/bash sed '/^$/d' 123 | tr [:lower:] [:upper:] > 123out
Скрипт создаст директории для нескольких годов (2010–2017), в них — поддиректории для месяцев (от 01 до 12), и в каждый из них запишет несколько файлов с произвольными записями. Например, 001.txt, содержащий текст «Файл 001», 002.txt с текстом «Файл 002».
#!/bin/bash
mkdir resultOfRunScript; cd resultOfRunScript; for filePath in ./{2010..2020}/{01..12}/{001..005};
do mkdir -p "$(dirname $filePath)" && echo "Файл $(echo $filePath | cut -d '/' -f 4)" > "$filePath.txt"
done
# второй вариант
#!/bin/bash
for i in {2013..2019}
do
for j in {01..12}
do
for d in {01..31}
do
for h in {01..24}
do
echo $i$j$d$h.txt > $i$j$d$h.txt
done
mv $i$j$d* $i/$j/$d
done
done
done
Сколько скрытых элементов в каталоге, начинающихся с «.»?
➜ ~ ls -lahd .* | wc -l // включает и каталоги
18
➜ ~ ll | sed '1,+2D' | awk '{print $9}' | grep '^\.' | wc -l
18
➜ ~ ls -lad .* | grep ^- | wc -l // только файлы
13
~ ll | sed '1,+2D' | grep ^- | awk '{print$9}'| grep '^\.'| wc -l
13
➜ ~ ls -AF | grep '^\.' | grep -v '/$' | wc -l
13
➜ ~ find . -maxdepth 1 -type f -iname ".*" -ls | wc -l
13
Вывести с помощью cat содержимое всех файлов в директории /etc. Направить ошибки в отдельный файл в вашей домашней директории. Сколько файлов, которые не удалось посмотреть, оказалось в списке?
➜ ~ cat /etc/* > output.txt 2> error.txt ➜ ~ grep Permissiion deny error.txt | wc -l 6 // 6 файлов не хватило прав ➜ ~ grep directory error.txt | wc -l 97 // 97 директорий в папке /etc
Отобразить в /dev список устройств, которые в настоящее время используются вашим UID.
lsof -u zamiloff -a +D /dev | less
Использовать команду cut на вывод длинного списка каталога, чтобы отобразить только права доступа к файлам. Затем отправить в конвейере этот вывод на sort и uniq, чтобы отфильтровать все повторяющиеся строки. Потом с помощью wc подсчитать различные типы разрешений в этом каталоге. Самостоятельно решить задачу, как сделать так, чтобы в подсчет не добавлялись строка «Итого» и файлы. и ..
➜ ~ ll | sed '1,+2D' | awk '{print $1}' | sort | uniq | wc -l
6
➜ ~ ls -lA | grep -v 'total' | cut -d " " -f '1' | sort | uniq | wc -l
6
Создать файл crontab, который ежедневно регистрирует занятое каждым пользователем дисковое пространство в его домашней директории.
➜ ~ crontab -e 0 5 * * * du -hs /home/zamiloff >> /home/zamiloff/usage.log
Создать скрипт ownersort.sh, который в заданной папке копирует файлы в директории, названные по имени владельца каждого файла.
#!/bin/bash
# Сначала считываем всех владельцев файлов в директории,
# убираем повторения и делаем папки по одной для каждого.
dir=$(ls -l | tr -s ' ' '\t' | cut -f '3' | sort -u)
for i in $dir; do
mkdir -p $i
done
# Теперь считываем владельцев и названия.
# Проходимся по ним циклом (нечётное - владелец, чётное - название)
# Если название - проверяем, что это файл, а не папка.
# Если файл - отправляем в директорию с именем хозяина.
dirfile=$(ls -l | tr -s ' ' '\t' | cut -f '3 9')
count=0
for i in $dirfile; do
count=$((count+1))
if (($count%2))
then
dir=$i
echo $dir = $i zero
else
if [ -f ./$i ]
then
cp ./$i ./$dir/$i
fi
fi
done