Neofetch — информация о системе linux и логотип в терминале

Назначение и синтаксис[править | править код]

tee используется для разделения выводимых программой данных, таким образом данные могут быть использованы для вывода на дисплей и сохранены в файл. Также команда может быть использована для получения промежуточных данных до того, как они будут изменены другой программой или командой. Команда tee считывает , после чего записывает его в и одновременно копирует его в подготовленный файл или переменную. Синтаксис различается в соответствии с местом использования команды.

В UNIXправить | править код

tee    

Переменные:

File Один, или более, файл, который примет данные от tee.

Флаги:

  • Дописать выходящие данные в конец файла, не перезаписывая его содержимого.
  • Игнорировать ошибки.

По окончании команда возвращает следующие значения состояния выхода:

  • 0 был успешно записан во все принимающие файлы.
  • >0 В случае ошибки.

Примечание: Если при записи в любой удачно открытый файл операнд не удался, данные записываются в следующий удачно открытый файл, операнд и завершаются, но состояние выхода будет >0.

DESCRIPTION top

       tee() duplicates up to len bytes of data from the pipe referred to by
       the file descriptor fd_in to the pipe referred to by the file
       descriptor fd_out.  It does not consume the data that is duplicated
       from fd_in; therefore, that data can be copied by a subsequent
       splice(2).

       flags is a bit mask that is composed by ORing together zero or more
       of the following values:

       SPLICE_F_MOVE      Currently has no effect for tee(); see splice(2).

       SPLICE_F_NONBLOCK  Do not block on I/O; see splice(2) for further
                          details.

       SPLICE_F_MORE      Currently has no effect for tee(), but may be
                          implemented in the future; see splice(2).

       SPLICE_F_GIFT      Unused for tee(); see vmsplice(2).

Другие Операции с Командой Tee в Linux

Если вы хотите узнать больше классных функций команды tee в Linux, вы должны знать, как открыть руководство пользователя! Это намного упростит использование правильного синтаксиса!

Большинство пользователей, как правило, копируют и вставляют команды в терминал, но мы призываем вас не торопиться и потратить время на их ввод вручную. Таким образом, вы по-настоящему освоите команду tee и синтаксис других команд в Linux.

Чтобы поднять документацию, вы можете использовать:

Каждая команда сопровождается информацией о версии. Это можно проверить с помощью:

По умолчанию команда tee перезаписывает файл с выводом исходной команды, что можно отменить, используя добавляемую опцию -a.

С помощью команды tee в Linux мы также можем сохранить вывод команды в нескольких файлах. Эта опция используется для многократной обработки вывода команды в сценарии оболочки:

Как и в случае стандартных команд, к которым добавляется >, стандартный поток ошибок и стандартный поток вывода (stdout) в tee также обрабатываются по-разному. Обычный знак канала | сохранит в файл только стандартный вывод, но если нам нужны и стандартный поток вывода, и стандартный поток ошибок, следует использовать |& c Linux командой tee.

Нормальная копия стандартного вывода:

команда > file.txt Обычный способ перенаправления стандартного вывода
команда tee file.txt Использование tee с перезаписью
команда tee -a file.txt Использование tee с дописыванием в файл

Стандартный поток вывода и стандартный поток ошибки:

команда &> file.txt Обычный способ перенаправления стандартного вывода и ошибки
команда |& tee file.txt Использование tee с перезаписью
команда |& tee -a file.txt Использование tee с дописыванием в файл

Запись файлов с использованием повышенных привилегий в редакторе vim — это ещё одно преимущество команды tee. В среде с высокой степенью защиты обычные операции Linux выполняются с использованием непривилегированных пользователей. Для выполнения административных задач с правами администратора мы используем команду sudo.Стандартный поток вывода и стандартный поток ошибки:

Но иногда нам нужно отредактировать файлы, которые требуют прав администратора.

Отмена изменений и повторное открытие файла с использованием необходимых привилегий посредством sudo — один из вариантов, как это можно сделать. Но если мы используем команду tee, мы можем избежать этой ситуации, записав файл на самом начальном этапе, не отказываясь от изменений с помощью опции повышенных привилегий. При записи в редакторе vim синтаксис будет следующим:

Локаль по-умолчанию

Хорошо, нужные локали у нас теперь есть, осталось только задать локаль по умолчанию:

$ sudo update-locale LANG=ru_RU.UTF-8

Эта команда запишет в файл строку:

LANG=ru_RU.UTF-8

После этого надо будет перезайти в систему. И проверяем информацию о языковом окружении:

$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Теперь все правильно, так что запишем эту информацию в файл :

$ locale | sudo tee /etc/default/locale
$ cat /etc/default/locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Автоматическое удаление старых файлов

Все мы часто качаем файлы из интернета, это торренты, фильмы, музыка и т д. И все это со временем накапливается в папке загрузки если ненужное вовремя не удалять, а нужное не перемещать в другие папки. Тогда папка загрузок начинает напоминать огромную свалку где вообще нереально что-то найти. У себя я всегда время от времени сортировал  и удалял файлы, но когда видел такое у знакомых брался за голову. Есть способ упростить очистку папки загрузок.

Утилита find позволяет находить все файлы, созданные позже определенной даты и выполнять с ними нужное действие. Все нужные файлы будем вовремя рассортировывать и перемещать по папкам назначения, а все что останутся в загрузках будут через два дня автоматически удаляться. Знание что файлы будут удалены заставит их вовремя переместить куда нужно.

Вот так выглядит сама команда:

Если не хотите полностью удалять файлы можно перемещать их в корзину:

Подробнее о работе find можно почитать тут. Для полной автоматизации добавим выполнение этой команды каждый день в расписание cron:

Теперь давние файлы будут автоматически удаляться каждый день.

EXAMPLES top

       The example below implements a basic tee(1) program using the tee()
       system call.  Here is an example of its use:

           $ date |./a.out out.log | cat
           Tue Oct 28 10:06:00 CET 2014
           $ cat out.log
           Tue Oct 28 10:06:00 CET 2014

   Program source

       #define _GNU_SOURCE
       #include <fcntl.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <errno.h>
       #include <limits.h>

       int
       main(int argc, char *argv[])
       {
           int fd;
           int len, slen;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s <file>\n", argv);
               exit(EXIT_FAILURE);
           }

           fd = open(argv, O_WRONLY | O_CREAT | O_TRUNC, 0644);
           if (fd == -1) {
               perror("open");
               exit(EXIT_FAILURE);
           }

           do {
               /*
                * tee stdin to stdout.
                */
               len = tee(STDIN_FILENO, STDOUT_FILENO,
                         INT_MAX, SPLICE_F_NONBLOCK);

               if (len < 0) {
                   if (errno == EAGAIN)
                       continue;
                   perror("tee");
                   exit(EXIT_FAILURE);
               } else
                   if (len == 0)
                       break;

               /*
                * Consume stdin by splicing it to a file.
                */
               while (len > 0) {
                   slen = splice(STDIN_FILENO, NULL, fd, NULL,
                                 len, SPLICE_F_MOVE);
                   if (slen < 0) {
                       perror("splice");
                       break;
                   }
                   len -= slen;
               }
           } while (1);

           close(fd);
           exit(EXIT_SUCCESS);
       }

Подробная информация о локалях

Более подробную информацию об установленных в системе локалях можно посмотреть так:

$ locale -a -v
locale: en_US.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | English locale for the USA
   source | Free Software Foundation, Inc.
  address | http://www.gnu.org/software/libc/
    email | bug-glibc-locales@gnu.org
 language | American English
territory | United States
 revision | 1.0
     date | 2000-06-24
  codeset | UTF-8

locale: ru_RU.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | Russian locale for Russia
   source | RAP
  address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark
    email | bug-glibc-locales@gnu.org
 language | Russian
territory | Russia
 revision | 1.0
     date | 2000-06-29
  codeset | UTF-8

locale: ru_UA.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | Russian locale for Ukraine
   source | RFC 2319
    email | bug-glibc-locales@gnu.org
 language | Russian
territory | Ukraine
 revision | 1.0
     date | 2000-06-29
  codeset | UTF-8

locale: C.UTF-8         directory: /usr/lib/locale/C.UTF-8
-------------------------------------------------------------------------------
    title | C locale
    email | aurel32@debian.org
 language | C
 revision | 1.6
     date | 2016-08-08
  codeset | UTF-8

Часть локалей размещена в архиве , а часть — в директориях внутри .

Comando Tee Linux – Sintaxe e Usos

Se você quer começar a usar o comando Linux Tee, deverá acessar seu VPS usando o SSH. Se você está tendo problemas, confira nosso tutorial do PuTTY.

A sintaxe básica para este comando é:

O comando acima verificará a linha do arquivo file1.txt, gerar o resultado no terminal e salvar no file2.txt.

Enviar o Comando Tee Linux para Outros Comandos

Ao usar o comando tee do Linux, obtemos uma saída no terminal, que podemos canalizar para outro comando para processamento. O seguinte comando irá listar os arquivos dentro da pasta e usar o primeiro pipe irá gravar a saída para o arquivo test.txt e passar a saída para o terceiro comando – grep para identificar os arquivos com a string py neles:

Outras Operações do Comando Linux Tee

Se você quer aprender mais recursos interessantes com comandos tee Linux, você deverá saber como abrir este manual. Isto fará com que use a sintaxe correta de forma mais fácil. 

A maioria dos usuários tende a copiar e colar os comando no terminal, mas insistimos que você invista tempo para digitá-los. Você então terá familiaridade com eles e entenderá o comando tee, assim como qualquer outra sintaxe de comando da melhor forma. 

Para abrir a documentação você pode usar:

Todo comando vem com uma versão informacional. Isso poderá ser checado com:

Por padrão, o comando tee Linux irá escrever sobre o arquivo a saída do comando inicial. Que pode ser substituído usando a opção -a switch.

Com o comando tee Linux nós também podemos salvar a saída do comando em múltiplos arquivos. O uso desta opção é para processar a saída do comando diversas vezes em um script de shell. 

Como com os comandos padrão, anexando >, os erros e os stdout são tratados de forma diferente no tee. As pipes regulares | salvarão somente as saídas padrão dos arquivos, e se precisamos de ambos, saída padrão e saída de erro, precisamos usar |& com o comando tee linux.

Cópia de saída normal padrão:

command  > file.txt A forma regular de redirecionar a saída padrão
command  | tee file.txt Usando tee para substituição
command  | tee -a file.txt Usando tee com apêndice

Ambos saída de erro e saída padrão:

command  &> file.txt O caminho comum para redirecionar a saída padrão e saída de erro
command  |& tee file.txt Usando tee para substituir
command  |& tee -a file.txt Usando tee com acréscimos

Escrever arquivos usando privilégios elevados no editor vim é outra vantagem do comando tee. Em um ambiente altamente seguro, as operações normais do Linux são realizadas usando usuários não privilegiados. Para executar tarefas administrativas com privilégios de administrador, usamos o comando sudo.

Algumas vezes, precisamos editar os arquivos que precisam de privilégios de administrador.

Abandonar as alterações e reabrir um arquivo usando os privilégios necessários com o sudo é uma das opções. Se estivermos usando o comando tee, podemos evitar essa situação gravando o arquivo no próprio estágio inicial sem abandonar as alterações usando a opção de privilégio elevado. Ao escrever no editor vim, a sintaxe seria a seguinte:

Примеры[править | править код]

В UNIXправить | править код

Чтобы одновременно увидеть и сохранить выходные данные:

lint program.c | tee program.lint 

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

Чтобы получить данные от команды и дописать их в существующий файл:

lint program.c | tee -a program.lint 

Как и в предыдущем примере, на экран будут выведены данные от команды , после чего эти данные будут дописаны в конец файла . Если такой файл не существует, он будет создан.

Использование совместно с sudo:

echo "Body of file..." | sudo tee root_owned_file > /dev/null 

В этом примере демонстрируется, как при помощи tee обойти ограничения команды sudo, за счёт которых она не может перенаправлять вывод () в файл. А дальнейшее перенаправление в позволит избежать вывода текста на консоль.

Перенаправление STDERR:

ls ./ qwerty 2>&1 | tee ls.log 

По умолчанию команда tee записывает в файл только данные от STDOUT, поэтому, если файл «qwerty» отсутствует в текущем каталоге, в файле ls.log будет перечень имеющихся файлов и каталогов и не будет записи о не найденном файле. На экране же будут отображаться выводы как STDOUT, так и STDERR. Если в файл нужно включить так же и данные из STDERR, то необходимо, как в примере выше, перенаправить STDERR на STDOUT.

Примеры использования

1. Простое использование команды tee

Команда ls -la нужна в Linux для показа списка файлов с описанием в текущем каталоге. Здесь команда tee используется для сохранения вывода ls -la в файл вывод.txt Введите следующие команды в терминале, чтобы проверить как работает команда tee.

Здесь первая команда показала вывод списка файлов в текущем каталоге в терминал и записала полученные данные в файл вывод.txt

Вторая команда показала содержимое файла вывод.txt

2. Добавление вывода в существующий файл

Если вывод любой команды записать в существующий файл с применением команды tee и операции -a, содержимое файла не будет перезаписано. Здесь вывод команды pwd будет добавлен в конец файла вывод.txt Запустите следующие команды с помощью терминала:

Здесь первая команда отображает вывод pwd в терминал и записывает вывод в конец файла вывод.txt Вторая команда используется для выделения вывода файла. Показано, что файл вывод.txt содержит оба результата: из предыдущего примера и из этого.

3. Запись вывода в несколько файлов

Команда tee может использоваться для вывода любой команды сразу в несколько файлов. Для этого необходимо указать имена файлов, разделив их пробелом. Используйте следующие команды для сохранения вывода date в два файла: вывод1.txt и вывод2.txt

Здесь первая команда выводит текущее системное время и сохраняет полученные результаты в два файла вывод1.txt и вывод2.txt Вторая команда показывает идентичное содержимое обоих файлов.

4. Игнорируем прерывание сигнала

Команда tee linux с опцией -i используется в этом примере, чтобы игнорировать любые прерывания во время ее выполнения. Таким образом, команда будет выполнена правильно, даже если пользователь нажимает CTRL+C. Выполните следующие команды в терминале.

Здесь первая команда считает количество строчек в файле вывод.txt и сохраняет полученный результат в файл вывод3.txt Вторая команда показывает содержимое файла вывод.txt, который содержит 37 строчек. Третья команда показывает содержимое файла вывод3.txt, в котором указано, что он действительно содержит 37 строчек.

5. Перенос вывода команды tee в другую команду

Вывод команды tee может быть перенесен в другую команду. В этом примере вывод из первой команды переносится в tee, а ее вывод — в другую команду. Запустите следующие команды в терминале:

Здесь первая команда используется для записи вывода ls в файл вывод4.txt и подсчета общего числа строк, слов и символов в файле вывод4.txt Вторая команда используется для отображения вывода команды ls, а третья — для отображения содержимого файла вывод4.txt

6. Команда tee и скрипты

Команда tee также может использоваться для записи вывода bash-скрипта в файл. Создайте bash-файл с приведенным кодом, который возьмет два входных числа из аргументов командной строки и выведет сумму этих чисел. Команда tee используется в этом примере для записи вывода add.sh в файл результат.txt

Запустите следующую команду в терминале для записи файла и отображения его содержимого.

Здесь числа 40 и 80 переносятся в качестве аргументов командной строки в скрипт add.sh и вывод записывается в файл результат.txt Команда cat выводит соответствующий результат.

7. Как скрыть вывод команды в терминале

Если вы хотите записать вывод прямо в файл и не показывать его в терминале, используйте /dev/null с командой tee. Для этого выполните следующие команды.

Здесь первая команда используется для записи вывода команды df в файл вывод5.txt, при этом вывод не показывается в терминале. Вторая команда показывает полученный результат.

Удалить лишние локали

После установки (генерации) локали, она помещается в архив . Файл архива — это файл, отображаемый в память, который содержит все локали системы; он используется всеми локализованными программами. Посмотреть список локалей в архиве можно с помощью команды:

$ localedef --list-archive
en_US.utf8
ru_RU.utf8
ru_UA.utf8

Удалить заданную локаль из файла архива:

$ sudo localedef --delete-from-archive ru_UA.utf8

Обратите внимание на название локали — , а не. Если неправильно указать локаль — она не будет удалена из архива:

$ sudo localedef --delete-from-archive ru_UA.UTF-8
locale "ru_UA.UTF-8" not in archive

В случае, если утилита была вызвана с опцией , надо удалить соответствующую директорию в :

$ cd /usr/lib/locale
$ ls
C.UTF-8    en_US.utf8    ru_RU.utf8    ru_UA.utf8
$ sudo rm -r ru_UA.utf8
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *