Para obtener el nombre de usuario más largo (y su longitud):
$ getent passwd | awk -F':' '{ print length($1), $1 }' | sort -rn | head -n 1
11 _traceroute
Es decir, obtenga el archivo passwd
, calcule la longitud de cada nombre de usuario (la primera:
-cadena delimitada ), ordene por longitud y elija la primera.
Si hay varios nombres de usuario de la misma longitud, se elige el que se ordena en último lugar lexicográficamente.
Para obtener el nombre real más largo (y ver de qué nombre de usuario es el nombre real y la longitud):
$ getent passwd | awk -F':' '{ print length($5), $1, $5 }' | sort -rn | head -n 1
32 _rtadvd IPv6 Router Advertisement Daemon
Esto hace lo mismo que el primer comando, pero calcula la longitud de la quinta:
-cadena delimitada en el archivo passwd
. Este campo contiene el nombre real del usuario. El resultado es la longitud del nombre real, el nombre de usuario y el nombre real.
En algunos sistemas, un &
en el nombre real del usuario será reemplazado por el nombre de usuario cuando ciertas herramientas accedan al campo como finger
o sendmail
. Por ejemplo, una entrada passwd
puede ser
operator:*:2:5:System &:/operator:/sbin/nologin
Para tener esto en cuenta al calcular la longitud del nombre real:
getent passwd | awk -F':' '{ gsub("&", $1, $5); print length($5), $1, $5 }' | sort -rn | head -n 1
Permitiendo además que awk
seleccione el nombre más largo, eliminando sort
yhead
:
getent passwd |
awk -F':' '
{ gsub("&", $1, $5) ; len = length($5) }
len > max { line = $0 ; max = len; }
END { split(line, a, FS); print max, a[1], a[5] }'
Con este código, se seleccionará el primer nombre más largo encontrado si hay varios nombres de la misma longitud.
locate
— это простой способ быстрого поиска файла, поскольку он имеет собственную базу данных. Однако я всегда просто используюfind(1)
. Результаты возвращаются пользователю, запустившему его, и пользователь, запустивший его, может найти только те файлы, на которые у него есть соответствующие разрешения файловой системы.
find
выполняет поиск рекурсивно, поэтому вы можете указать /
в качестве пути поиска, если хотите искать во всех файловых системах.
Поиск всех файлов и каталогов с именемfoo
:
find / -name "foo"
Поиск только файлов с именемfoo
:
find / -type f -name "foo"
Поиск только каталогов с именемfoo
:
find / -type d -name "foo"
run periodic
Как вы уже знаете, командаlocate
использует базу данных, в которой хранится проиндексированная коллекция имен ваших файлов и папок. Поскольку ваша установка FreeBSD совершенно -новая, эта база данных еще не создана.
Когда будет построена база данных? Когда FreeBSD выполняет свою обычную работу по дому. Существуют пакеты таких работ, которые должны выполняться автоматически ежедневно, еженедельно и ежемесячно. См. команду periodic
.
Возможно, вы захотите выполнить эту работу сразу после создания виртуальной машины. Беги:
periodic daily
periodic weekly
periodic monthly
Или запустить все три в одну строку.
periodic daily weekly monthly
По моему опыту, каждое из них занимает около минуты.
➥ В частности, weekly
создает/обновляет базу данных locate
. Если вы не можете найти что-то, о чем вы знаете, существует, сделайте run periodic weekly
.
Если вам интересно, вы можете проверить наличие и размер вашей locate
базы данных до и после запуска periodic
. Вероятно, найдено здесь:/var/db/locate.database
Теперь вы сможете успешно использовать команду locate
.