GB homework

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