Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Проверка файла на записи

Как проверить что файле (к примеру file.txt) не содержится записей с расширением *.dat ?
Ответ: grep
Вопрос: Проверка файла на использование Shell script

Доброго времени суток всем, я начинающий сисадмин и учусь писать скрипты. Мое задание - Найти файлы удовлетворяющие по условию(из config) файлы , затем проверка их на использование, если используются, то пропускаем их, если не используются то архивируем Tar'ом и удаляем. Вот на данный момент мои успехи. Проблема в том, что я не знаю как проверить файл на юз. Вроде lsof должен помочь, но он только выводит процессы на экран, HELP!!!
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
set -x
while read line; do
dir_name=$(echo $line | awk -F";" '{print $1}')
pattern=$(echo $line | awk -F";" '{print $2}')
Recursive=$(echo $line | awk -F";" '{print $3}')
day_num=$(echo $line | awk -F";" '{print $4}')
filename=$(echo $line | awk -F";" '{print $5}')
 
if [ $Recursive = 'N' ]
then
        maxdepth=$(echo ' -maxdepth 1 ')
else
        maxdepth=
fi
find $dir_name -name $pattern  $maxdepth -mtime -$day_num  | xargs tar -cvf backup.tar.gz
done < ./config
Конфиг файл выглядит так
Bash
1
2
3
4
dirname1; pattern1; R/N (рекурсивно или нет); time1(число);filename1(имя архива)
dirname2; pattern2; R/N (рекурсивно или нет); time2(число);filename2(имя архива)
.................................................................................................................
dirnamen; patternn; R/N (рекурсивно или нет); time1(число);filenamen(имя архива)
Ответ:
Сообщение от Borntorogue
начинающий сисадмин
Это Вы сильно себе польстили.
Bash
3
4
5
6
7
8
9
10
while IFS=";" read dir_name pattern recursive day_num filename ; do
    case $recursive in
         N) depth='-maxdepth=1'
         *) unset depth
    esac
    find "$dir_name" -name "${pattern# }" $depth -mtime -${day_num# }  \
          ! -exec fuse -n file {} \; -exec tar -cvf "$filename" {} +
done < ./config
Вопрос: Грамотная очистка лога от старых записей

Привет!

Необходимо раз в месяц удалять устаревшие записи из лога, которым больше месяца. В голову не приходит ничего лучше, как после ежемесячной проверки добавлять в конец лога метку, и при последующей проверке удалять всё, что стоит за ней. Скажите, существуют более простые/правильные решения для подобной задачи?
Ответ:
Dimitry Sibiryakov
andrey10
В лог записывается информация в режиме реального времени (1 запись каждую секунду). Файл
лога один.

Тогда обломись, ты не сможешь его очищать: писатель и очищатель подерутся за право
открытия файла на запись.
Как правило, logrotate с copytruncate вполне справляется
Вопрос: Proftpd не видит пользователей в файле ftpd.passwd

установил, все настроил.. вот конфиг

Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
UseIPv6             off
IdentLookups            off
 
ServerName          "Mintrans DNR"
ServerType          standalone
DeferWelcome            off
 
MultilineRFC2228        on
DefaultServer           on
ShowSymlinks            on
 
TimeoutNoTransfer       600
TimeoutStalled          600
TimeoutIdle         1200
 
DisplayLogin                    welcome.msg
DisplayChdir                .message true
ListOptions                 "-l"
 
DenyFilter          \*.*/
 
DefaultRoot         ~
 
#RequireValidShell      off
 
Port                21
 
# PassivePorts                  49152 65534
# MasqueradeAddress     1.2.3.4
 
<IfModule mod_dynmasq.c>
    # DynMasqRefresh 28800
</IfModule>
 
MaxInstances            100
 
# Set the user and group that the server normally runs at.
User                proftpd
Group               nogroup
 
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask               022  022
# Normally, we want files to be overwriteable.
AllowOverwrite          on
 
# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd      off
 
# This is required to use both PAM-based authentication and local passwords
AuthOrder           mod_auth_pam.c* mod_auth_unix.c
 
#AuthOrder          mod_auth_file.c
 
# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile           off
 
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log
 
# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on
 
# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime.  If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or <Anonymous>), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime
 
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
 
<IfModule mod_ratio.c>
Ratios off
</IfModule>
 
 
# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default. 
 
<IfModule mod_delay.c>
    DelayEngine on
</IfModule>
 
<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>
 
<IfModule mod_ctrls_admin.c>
    AdminControlsEngine off
</IfModule>
 
#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
 
#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf
 
#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
 
# Include /etc/proftpd/virtuals.conf
 
# A basic anonymous configuration, no upload directories.
 
 <Anonymous ~ftp>
   User                 ftp
   Group                nogroup
   # We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias            anonymous ftp
   # Cosmetic changes, all files belongs to ftp user
   DirFakeUser  on ftp
   DirFakeGroup on ftp
 
   RequireValidShell        off
 
   # Limit the maximum number of anonymous logins
   MaxClients           10
 
   # We want 'welcome.msg' displayed at login, and '.message' displayed
   # in each newly chdired directory.
   DisplayLogin         welcome.msg
   DisplayChdir     .message
 
   # Limit WRITE everywhere in the anonymous chroot
   <Directory *>
    AllowAll
  </Directory>
 
   # Uncomment this if you're brave.
   # <Directory incoming>
   #   # Umask 022 is a good standard umask to prevent new files and dirs
   #   # (second parm) from being group and world writable.
   #   Umask                022  022
   #            <Limit READ WRITE>
   #            DenyAll
   #            </Limit>
   #            <Limit STOR>
   #            AllowAll
   #            </Limit>
   # </Directory>
 
 </Anonymous>
 
# Include other custom configuration files
Include /etc/proftpd/conf.d/
 
<Global>
DefaultRoot /home/ftp
AuthUserFile    /etc/proftpd/ftpd.passwd
#AuthGroupFile  /etc/proftpd/ftpd.group
</Global>
 
<Directory /home/ftp/vasya>
<Limit WRITE>
DenyAll
</Limit>
<Limit READ>
AllowUser vasya
</Limit>
<Limit DELE>
AllowUser vasya
</Limit>
</Directory>
нормально запускается, доступен по сети, вроде все работает. анонимус может делать что угодно, но...

пробовал авторизоваться хоть через cmd хоть из терминала, хоть из винды - ни в какую. пробовал сменить пароль через ftpasswd - выдает, что в файле ftpd.passwd пользователя test нет, но он там есть, добавлял через ftpasswd и проверял - есть и файл и запись в нем имеется.. в общем я в тупике, помогите разобраться если есть такая возможность..

суть задачи - авторизовываться на фтп и заходить в свою директорию
Ответ: у тебя сейчас включена авторизацию только системные пользователи

что бы заработало включи виртуальных пользователей а то будет ошибка /bin/false самое главное что ты не сделал это не включил авторизацию виртуальных юзеров )) #AuthOrder mod_auth_file.c
Вопрос: [Debian8][2.6] Запись в /run/lock не из-под рута.

Приветствую.
Следующая проблема:
asterisk работает из-под asterisk:asterisk, на нём добален модуль chan_dongle который отвечает за работу с USB модемом.

Модем прибивается по симлинкам через udev:
Ответ: решилось всё проверкой локов. и lsof /dev
Вопрос: длинна имён файлов в AIX Unix 7.1.?

много лет я админил Оракл под Линукс, сейчас пересел на AIX Unix 7.1.
запустил в sqlplus spreport. Он сгенерил мне файл с именем около 20 символов длинной somefileblablaxxxxxx.txt
Файл невозможно ни открыть (напр в vi) ни переименовать (в mv). И что удивительно, юникс находи файл если задать

ll somef* 

(равно как и
ls somef* 
)

НО! не находит:
 ll  somefileblablaxxxxxx.txt

(равно как и
ls  somefileblablaxxxxxx.txt
)

второй раз сгенерил файл somefi.lst - те же проблемы!

в чём тут дело?
помогите новичку плиз!
Ответ:
много лет я админил Оракл под Линукс


landy
lsof |grep ваш файл


выполняется ок. Непонятно где результат этой команды?


Вопрос не коррелирует с первым утверждением )))
Вопрос: Создал скрипт, записывающий логи телнета, но работать с ним получается только 'на ощупь'

Bash
1
2
3
4
5
#!/bin/sh
fileNameData=`date +%d.%m.%y`                                       #fileName=dateToday
mkdir /home/user/Изображения/Telnets_logs/$fileNameData 2>/dev/null         #Создание папки-даты
fileNameTime=`date +%H:%M:%S`                                       #fileName=timeForNow
telnet $1 > /home/user/Изображения/Telnets_logs/$fileNameData/$fileNameTime #Создание файла с логами
При подключении к коммутатору в терминал нет ни символа, слепым набором вбивая ник пароль и exit в файле остаются логи.
Собственно, проблема в том, что такими строками невидно ничего в терминале.
Пробовал скрипт для записи, но выходит уж больно много мусора из-за некорректного отображения некоторых символов, включая буквы русского языка.
Быть может, кто подскажет, можно ли, и как выкрутиться.
P.S. Не писать скрипт не вариант :-)

Добавлено через 22 минуты
P.S.S. Только потом подумал искать раздел Shell вместо Linux. Жаль я не знаю способов перенести/удалить тему. Да простят меня Администраторы
Ответ: Я, оказывается, неправильно использовал tee.
telnet $1 | tee /home/user/Изображения/Telnets_logs/$fileNameData/$fileNameTime #Создание файла с логами
Решил мою проблему. Спасибо, Marinero и Evg, что откликнулись!
Вопрос: Как определить, что файл перестал быть занят процессом?

Как определить, что файл перестал быть занят процессом?
Конкретнее: при печати через cups-pdf создаётся .pdf файл в заданном каталоге, и нужно определить момент завершения "печати".
Т.к., судя по изученной информации, от CUPS я ничего полезного не получу, вариант решения- определить что файл "освободился".

P.S. поправьте, если ошибаюсь насчёт cups. Возможно есть решение попроще.
Ответ:
Код Bash
1
lsof | grep путь_к_файлу
Вроде так.
Вопрос: Блокировка файлов

Привет. Почему-то ряд файлов открываются только для чтения (ничё не делал, оно само ). Они на диске FAT32, при монтировке права всем rw. Я попробовал
Code
1
lsof | grep /media
, но ничего не нашло. Подскажите, что бы посмотреть.

Добавлено через 33 минуты
Странно, я набирал код в NetBeans, нажал компиляцию, и после исходник заблокировался, при том, что те последние изменения в нём сохранились, а в исполняемый код не дошли.
Ответ: А обрыва питания не было? Суть: если оборвалось питание, то ntfs и fat`ы могут давать сбои. У меня такое бывало несколько раз: оборвалось питание на диске с ntfs, в это время записывались файлы. После подключения по новой часть из файлов, которые записывались, оказалась доступна только для чтения(не удалялась и не изменялась). помогает либо форматирование, либо сканироване на ошибки с автоматическим исправлением.
Вопрос: Работа с большим лог-файлом

Здравствуйте. Есть большой лог файл весом более 30 гб и сайт на php, который записывает действия пользователей и дату. Мне нужно каким-то образом более-менее быстро искать в нем записи по дате и выводить их в админке.

Примерный запрос: "найти сообщения с 12-03-2016 12:20:00 до 12-03-2016 12:35:00" (диапазон поиска всегда не более 15 минут).

У меня имеются несколько способов решения задачи:
1. Самый очевидный способ - это засунуть лог в базу. Только я не знаю, стоит ли так делать. Не зря ведь большие логи не хранят в бд.
2. Открыть shell_exec и grep'ать. Но это не подходит. Бывает на операцию уходит 20 секунд, учитывая, что на сервере стоит ssd диск, а мне нужно делать это быстрее.
3. Разбить лог на много маленьких файлов по дням из даты в имени, а php определять какие именно файлы нужно открывать (их максимум 2 может быть).

Может быть вы мне еще что-то подскажете? Спасибо.
Ответ:
andrey10
3. Разбить лог на много маленьких файлов по дням из даты в имени, а php определять какие именно файлы нужно открывать (их максимум 2 может быть).

настроить ротацию. 1 день - 1 файл.