LINUX

Поиск

Поиск файлов *.htm, изменённых за последние 30 минут, в каталоге drive_c/00:

find %HOME/.wine/drive_c/00 -mmin -30 -name *.htm

Вывести из этих файлов первую строчку (проверим DOCTYPE):

find %HOME/.wine/drive_c/00 -mmin -30 -name *.htm* -exec head -1 '{}' ';'

Что-то ещё сделать с файлами (к примеру, отправить их на ftp):

find %HOME/.wine/drive_c/00 -mmin -10 -type f -exec perl put_to_ftp.pl '{}' ';'

Содержимое put_to_ftp.pl:

#!/usr/bin/perl
use Net::FTP;
#Script for FTP file transfer
#Assign hostname(ip),user and pass.
my $hostname = 'host.ht-systems.ru'; # "xxx.xxx.xxx.xxx";
my $user     = 'user';               # 'ftp_user';
my $pass     = '****';               # password
my $dir      = 'nneeww';             # dir on ftp;
my $file     = $ARGV[0];             # from comand line

my $dest = $file;                    # new name on the ftp
$dest=~s/.+\///;                     # only name.ext

#Connect and Login to FTP.
$ftp = Net::FTP->new($hostname) or die;
$ftp->login($user, $pass)       or die "bad user/pass: $!";
$ftp->binary()                  or die;
$ftp->mkdir($dir);            # or die "mkdir: $!";
$ftp->cwd($dir)                 or die "chdir: $!";
$ftp->put("$file", "$dest")     or die "bad file/dest: $!";
$ftp->quit()                    or die;
print "$dest  ", time-$^T, " sec.  Ok.\n";

Архивирование

архивирование папки it со всеми подпапками в tmp.tar.gz

tar -czvf tmp.tgz it/

распаковка

tar -xzvf tmp.tgz

Размер каталога

Узнать размер каталога it. Здесь -h - для людей, -s - суммарный.

du -hs it

1251 to 866

Перекодиовка файла textwin.txt из Windows-1251 в DOS-кодировку.

iconv -fWINDOWS-1251 -tCP866 -otextdos.txt textwin.txt

Window-1251 to KOI8-R

Перекодиовка файла textwin.txt из Windows-1251 в KOI8-R.

iconv -fWINDOWS-1251 -tKOI8-R -otextkoi.txt textwin.txt

Поиск

Произвести поиск седи всех файлов PHP и вывести строчки, содержащие фрагмент: new_products

find -name '*.php' -exec grep 'new_products' '{}' ';'

Поиск

Произвести поиск седи всех файлов PHP и вывести путь и названия файлов, содержащих фрагмент: new_products

Прим.: всё набираем в одну строчку.

Выводит путь/имя: первую найденную соответствующую строку

find -name '*.php' -exec perl -e'$F=$ARGV[0];
open IN,"<$F";local $/;$_=;close IN;
if (/(new_products.+?\n)/){print "$F:$1\n";}' '{}' ';'

Поиск

Произвести поиск среди всех файлов PHP и вывести путь и названия файлов, содержащих фрагмент: new_products

Выводит путь/имя: найденные строки

 find -name '*.php' -exec grep -H 'new_products' {} \;

Поиск

Вроде как самый короткий: Ищет строчку в файлах среди всех подкаталогов и выводит путь/название:найденые строки. Самый шустрый из всех.

 grep -r 'new_products' .

Поиск с исключением

Ищем по всем подкаталогам во всех файлах строчку, в которой содержатся firstname и email_address, и убираем из поиска строчки, в которых есть admin_firstname. Результат сохраняем в файл firstname_and_email_address, находящийся выше каталогом. Так как файл только один с таким именем, то для простоты использую first*.

grep -r 'firstname' .|grep email_address |egrep -v admin_firstname >../first*

Windows-1251 to UTF-8

Просмотреть русский текст в файле с кодировкой Windows-1251 в териминале

cat 3.html|iconv -fWINDOWS-1251 -tUTF-8

Звук

Запись звука с микрофона и воспроизведение записанного через звуковую карту

# Запись
dd bs=8k count=4 sample.au
# Воспроизведение
cat sample.au >/dev/audio

Состояние памяти

cat /proc/meminfo|head -4
MemTotal:      1023760 kB
MemFree:        299080 kB
Buffers:         63544 kB
Cached:         308012 kB

Найти изменения за 20 мин.

Вывести информацию о всех последних изменённых файлах из подкаталогов за последние двадцать минут.

find -mmin -20 -type f -exec ls -l '{}' ';'
-rw-r--r-- 1 illari illari 1293 2010-01-06 12:36 ./help/add.pl
-rw-r--r-- 1 illari illari 3209 2010-01-06 12:40 ./add/add.pl
-rw-r--r-- 1 illari illari 1550 2010-01-06 12:52 ./add/save.pl

Всего занято на диске

Как узнать суммарный объём всех файлов пользователя на хостинге в мегабайтах.

du -hs ~
196M /storage/home/srv12345

Создать индекс всех картинок

Имеются каталоги с картинками внутри. Нужно вывести все картинки на одну страницу index.html

find -name "*.jpg" | perl -pe 's/\.\/(.+?jpg)/$1
/' > index.html
90000/90038/90038b.jpg
07000/7115/7115b.jpg< 07000/7924/7924b.jpg
07000/7041/7041b.jpg
07000/7113/7113b.jpg

Создать индекс всех картинок

Имеются каталоги с картинками внутри. Нужно вывести все картинки на одну страницу index.html

find -name "*.jpg"|sort|perl -pe 's{\./(.+?/(.+?)\.jpg)}{$2
}'>index.html
4005b
4018b
4097b
4107b
4119b

Скачать страницу со всеми CSS и JPG

Имеется страница http://www.xakep.ru/N900/n900.asp, хочется скачать её всю вместе с картинками, к ней прилагающимися. Всё сохраняем в один каталог download. Недогрузились только in-line CSS картинки :(

wget -p --convert-links -nH -nd -Pdownload http://www.xakep.ru/N900/n900.asp
--2010-01-12 20:26:06--  http://www.xakep.ru/i/n900/n900_4_3.JPEG
Reusing existing connection to www.xakep.ru:80.
HTTP request sent, awaiting response... 200 OK
Length: 103997 (102K) [image/jpeg]
Saving to: `download/n900_4_3.JPEG'
...

Выбрать ссылки из файла

После того как скачали страницу (см. выше), выбираем из неё все ссылки на JPEG файлы. Сначала ищем все строки, в которых есть http:, затем оставляем только те строки, в которых есть ещё и .JPEG, после этого оставляем в строчках только сам URL.

grep 'http://' *.asp|grep '.JPEG'|perl -pe's/.+?(http:.+?JPEG).+/$1/'
или
grep 'http://' *.asp|grep '.JPEG'|sed 's/.*\(http:.*JPEG\).*/\1/'
или
perl -ne'print if (s/.+?(http:.+?JPEG).+/$1/)'<*.asp
http://www.xakep.ru/i/n900/n900_1_2.JPEG
http://www.xakep.ru/i/n900/n900_1_31.JPEG
http://www.xakep.ru/i/n900/n900_2.JPEG
http://www.xakep.ru/i/n900/n900_31.JPEG
...

Докачиваем файлы по ссылкам

Выдёргиваем URL'ы картинок в файл 1, и выкачиваем сами картинки в текущий каталог, изменяем URL с абсолютных на локальные

perl -ne'print if (s/.+?(http:.+?JPEG).+/$1/)'1
wget -i1
perl -pe's{http.+?/([n0-9_.]+JPEG)}{$1}'n900.html

В результате получаем полностью автономный файл n900.html

Как создать самому программу на C?

Задача: создать программу на C, запустить её, увидеть результат. Для начала нужно набрать код программы в файл. Это можно сделать, используя редактор nano. Редактировать файл можно перемещаясь курсором в любое место.

nano one.c
#include 
int main(void) {
  printf("Hi.\n");
}
для сохранения результата нажмите Ctrl-O,
для выхода из редактора нажмите Ctrl-X.

Если нет возможности запустить nano, то можно водить команды построчно, отправляя их в файл.

 cat > one.c
#include 
int main(void) {
  printf("Hi.\n");
}
Для окончания ввода строк нажмите Ctrl-Z.

А если нет возможности нажать комбинацию Ctrl-Z? Например на мобильнике. Тогда просто построчно добавляем команды в файл. Правда при этом приходится перед симолами ставить символ '\', чтобы они не рассматривались как команды управления.

echo \#include \ > one.c
echo int main\(void\) \{ >> one.c
echo printf\(\"Hi.\\n\"\)\; >> one.c
echo \} >> one.c
cat one.c
Последней командой выводим содержимое файла one.c.

Теперь компилируем (переводим в машинные команды).

gcc -o one one.c
Если без ошибок, то не будет никаких сообщений.

Вот и всё. Настало время запустить первую программу. А как?

./one
Hi.

FreeBSD Man Pages

Руководства по командам

http://www.freebsd.org/cgi/man.cgi

Микро хаки

Полезные фичи для BASH и не только

http://linux-admin.net.ru/Linux/microhak.htm
...$ declare -i n=10
...$ n=n+20
...$ echo $n
30
...$ n=n/3-2
...$ echo $n
8

Пакеты установленные в системе

Чтобы не качать все пакеты по-новой при установке на другую машину не подключенную к интернету, можно просто сохранить нужные пакеты с машины, на которую их уже скачивали. Они лежат в папке (если её не почистили):

/var/cache/apt/archives/*.deb
На другой машине достаточно будет их закинуть в ту же папку (хотя и не обязательно).
Щёлкнув по пакету .deb мышкой, получим приглашение его установки в систему. Вот и всё :)

Найти и изменить атрибуты

Аккаунт перенесли на другой сервер. При этом потеряны атрибуты скриптов (0750 -> 640). Необходимо изменить атрибуты у всех файлов с расширением *.pl на 0750 (исполняемые). Первой командой считаем количество скриптов. Второй командой смотрим названия первых найденных десяти скриптов (для проверки). Третьей командой изменяем атрибуты всем найденным скриптам.

find ~ -name "*.pl"|wc
find ~ -name "*.pl"|head
find ~ -name "*.pl"|xargs chmod 750
325 325 15791

Удаление старых ядер Ubuntu

Внимание! Будьте аккуратны, не удаляйте текущюю версию ядра системы, а также не удалите случайно, пакеты которые вобще не являются ядром системы. В консоли набираем:

1) uname -a (узнаем тикущее ядро)
2) sudo dpkg -l | grep linux-image (список ядер в ситеме)
3) sudo apt-get remove -f linux-image-2.6.32-24-generic (ядро которое хотим удалить)
4) sudo update-grub (обновим список ядер GRUB)
5) dpkg -l | grep linux-headers ( список linux headers)
6) sudo apt-get remove -f linux-headers-2.6.32-24-generic (headers которое хотим удалить)
Очистится по сотне мегабайт с каждого старого ядра системы.
Уменьшится загрузочное меню (уберутся старые пункты)

Удалить каталог и всё его содержимое

Удалить директорию и все файлы и другие директории в ней

rm -rf ../2011/06/17/in
Каталог in будет удалён

Скачать сайт целиком

Чтобы скачать сайт целиком с помощью wget нужно выполнить команду.

wget -r -k -l 7 -p -E -nc http://site.ru/
-r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
-k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, 
     чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
-p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
-l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, 
     в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и 
     wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
-E — добавлять к загруженным файлам расширение .html.
-nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить 
     загрузку сайта, прерванную в предыдущий раз.

Подробнее: http://it-crazy.ru/stateinik/software/64-linux-wget-skachat-sait

Найти и удалить

Найти в каталоге temp файлы старее двух часов с расширением tmp и удалить их

find ./temp -mmin +120 -name "*.tmp"|xargs rm

Распаковать bz2 и найти текст

Поиск информации внутри заархивированных log-файлов.
1. перейи в каталог logs;
2. посмотреть список файлов, чтобы выбрать нужный;
3. распаковать в standart output и найти в нём нужный текст.

cd ../../logs
ls -al 
bzip2 -d -c access.log.2012.02.17.bz2|grep "margo-"
91.212.64.1 - - [17/Feb/2012:13:55:56 +0400] "GET /files/video/margo/margo-70_DV_PAL.avi HTTP/1.1" 200 58544036 ...
77.106.212.106 - - [17/Feb/2012:15:44:59 +0400] "GET /files/video/margo/margo-70_DV_PAL.avi HTTP/1.0" 200 58544036 ...
# файл был скачан 17-02-2012 два раза в полном объёме, что и требовалось узнать.

Почистить мусор

Если осталось мало места

sudo apt-get clean

Выключение компьютера по таймеру

Выключение через заданное количество минут или в указанное время

sudo shutdown -h +m
sudo shutdown -h hh:mm.
другие опции:
    -r - перезагружает систему
    -h - выключает или включает систему
    -H - выключает систему
    -P - включает систему
    -c - отменяет введенную команду

gawk

К примеру, в файле text.txt найти все пустые строчки и заменить их на -----------------, а текст во всех остальных строчках перевести в верхний регистр.

gawk '{if(/^$/){print "-------------------"}else{print toupper($0)}}' text.txt
 ШОФЁР 
 УЙДЁТ 
--------------------
 ВОЗВЁЛ 
 ВОЗВЕДЁН 
 ПРИЁМ 

Голос

Компьютер произносит фразу по окончании длительного процесса.
Для этого может понадобится установить festival.

echo "Parse video compleate" | festival --tts
Будет сказана фраза "Parse video compleate".

Распаковать bz2

Распаковать в этом каталоге все архивы с расширением .bz2

bunzip2 *.bz2
При этом все архивы исчезнут и появятся запакованные в них файлы.

Распаковка всех архивов

Распаковка всех архивов tar tar.gz tar.xz tar.bz2 bz2 zip Z 7z xz exe rar gz tar tbz2 tgz одной командой. Чтобы каждый раз не вспоминать ключики к архиваторам в Linux для распаковки архивов моожно сделать удобную функцию при помощи которой можно распаковать любой архив единственной командой.

unpack () {
  if [ -f $1 ] ; then
    case $1 in
      *.tar.bz2)   tar xvjf $1    ;;
      *.tar.gz)    tar xvzf $1    ;;
      *.tar.xz)    tar xvJf $1    ;;
      *.bz2)       bunzip2 $1     ;;
      *.rar)       unrar x $1     ;;
      *.gz)        gunzip $1      ;;
      *.tar)       tar xvf $1     ;;
      *.tbz2)      tar xvjf $1    ;;
      *.tgz)       tar xvzf $1    ;;
      *.zip)       unzip $1       ;;
      *.Z)         uncompress $1  ;;
      *.7z)        7z x $1        ;;
      *.xz)        unxz $1        ;;
      *.exe)       cabextract $1  ;;
      *)           echo "\`$1': Unknown method of file compression" ;;
    esac
  else
    echo "\`$1' no foud"
  fi
}
# Добавьте этот код в файл .bashrc (домашняя деректорию юзера)
# Для распакоки архивов используйте команду:
unpack  file

Подключение Beeline VPN в Ubuntu

Настройка подключения Beeline VPN в Ubuntu

Меню приложений
> Настройки
> > Сетевые соединения
----------------------------------
[Проводные] [Беспроводные] [Мобильные] [*VPN*] [DSL]
+ Добавить
Название соединения: Beeline
[v] Подключаться автоматически
[Параметры IPv4] [*VPN*]
            Шлюз: tp.internet.beeline.ru
Имя пользователя: 089*******
          Пароль: ******
[Сохранить]
Проводное соединение 1
Соединения VPN >
V Beeline

МТС подключение Ubuntu

Настройка подключения интернета через телейон МТС в Ubuntu

Подключить телефон по USB
На телефоне:
  Выберите режим USB:
    PC Suite

На компьютере:
Меню приложений
> Настройки
> > Сетевые соединения
----------------------------------
[Проводные] [Беспроводные] [*Мобильные*] [VPN] [DSL]
+ Добавить
Создать соединение через мобильное устройство
[Nokia 5530 XpressMusic][V]
--> Продолжить
Страна и регион
   Российская Федерация
   --> Продолжить
[o] Выбор оператора из списка
   MTS
   --> Продолжить
Выберите тарифный план
   По умолчанию
   --> Продолжить
       V Применить
На компьютере:
  MTS По умолчанию (MTS GSM)

Сброс пароля в Ubuntu

Чтобы восстановить пароль в Ubuntu загрузиться в режиме восстановления системы

# Выбрать второй пункт
Ubuntu, with ... generic (recovery mode)

# выбираем в меню root
root - Drop to root shell prompt

# монтируем файловую систему для записи, т.к. она только для чтения
mount -rw -o remount /

# посмотреть логин
cat /etc/passwd

# меняем пароль
passwd <user>

# Выйти
exit
# В меню выберать 
resume normal boot

Файл на FTP

Отправка файла на FTP. Файл имеет в названии пробелы.

ftpuser='Имя_пользователя'
password='API_пароль'
ftpserver='ftp.marketplace.envato.com'
file='12 1920x1080.zip'
ftp -n $ftpserver <<FTP
user $ftpuser $password
put "/local_dir/$file" "/ftp_dir/$file"
bye
FTP
Результат проверен на отправке файла в 250 Mb

Перезапуск Apache

Если точнее - после правки конфигурации Apache, заставить Apache использовать новую конфигурацию без перезагрузки.

sudo /etc/init.d/apache2 reload
1 сек.

монтирование ftp-дирректории

Пошаговая инструкция

# ставим пакет:
sudo apt-get install curlftpfs

# даём права на папку, куда будем монтировать:
sudo chmod 777 ~/ftp

# Монтируем:
sudo curlftpfs -o allow_other ftp://user:password@server.ru ~/ftp

# Размонтируем:
sudo umount ~/ftp

С каталогом ~/ftp можно будет работать как с обычными файлами,
правда, медленнее с учётом скорости интернет.
Копировать, редактировать, удалять файлы.

Архивируем избранное

Надо сохранить в архиве все *.txt файлы со всех подкаталогов

find . -name "*.txt" | xargs tar -zcvf archive.tgz

#Редактировать +Добавить