Как найти папку на компьютере, если не помню, где она хранится? Во всех версиях WINDOWS есть встроенная система поиска через меню «Пуск» — «Поиск» — открывается окно «Результаты поиска», куда заносим все, что нам известно и нажимаем кнопку «найти». Через некоторое время появится список, найденного. Чтобы в меню «Пуск» отображался «Поиск» необходимо выполнить следующие настройки: «Пуск» (правой кнопкой) — Свойства — Меню «Пуск» — Настроить — Дополнительно — в окне Элементы меню «Пуск» поставить галочку перед словом «Поиск» (почти в самом низу списка)- ок. автор вопроса выбрал этот ответ лучшим lemon4ek 8 лет назад Для того, чтобы найти абсолютно любую папку или файл, вы должны зайти в «Мой компьютер» и посмотреть на панель, где отображается теперешнее ваше местонахождение среди файлов и папок. Далее посмотрите в правый верхний угол, там под иконками свернуть/расширить/закрыть есть поисковая строка, куда вы и должны будете ввести искомое имя папки либо файла, далее для подтверждения нажмите клавишу «Enter» теперь система начнет искать нужный вам файл или папку по всему компьютеру, так же вы можете выбирать отдельную деректорию для поиска, чтобы не искать среди всех папок нужный файл. jn8181 8 лет назад В меню «Пуск» — в нижнем левом углу экрана есть строка поиска (в ней по умолчанию так и написано «Найти программы и файлы»). Достаточно ввести одно слово из названия папки и нажать энтер и на экране появятся все файлы, папки и программы, в названии которых это слово присутствует Александр 1988 8 лет назад Если не помните, где храниться, но знаете название папки, то воспользуйтесь поиском. Откройте проводник, выберите «мой компьютер», нажмите ctrl+f, введите название папки и ждите, когда поиск выдаст нужный результат. Это пример для windows 8, но и в других операционных системах примерно также. Above-zero 3 года назад Это сделать очень просто. Нужно открыть «Мой компьютер» и в окне поиска ввести название папки или можно даже часть названия. Если помните название диска, на котором она хранится, то для ускорения поиска зайдите на этот диск и ищите конкретно на нём. Лишняя хромосома 7 лет назад Все просто, идем в меню «пуск», ищем там: «найти программы и файлы». вбиваем название папки или файла, можно не полные или просто ключевые слова из содержимого папки и жмем на лупу или энтер. Очень выручает, когда что-то забыл. Знаете ответ? |
Время чтения статьи
~2 минуты

Из этой статьи вы узнаете, как определить текущую рабочую директорию (current working directory) с помощью команды pwd.
- Что такое текущая рабочая директория
- Команда pwd
- Как найти текущую рабочую директорию
- Заключение
Что такое текущая рабочая директория
Текущая рабочая директория — директория, в которой пользователь работает в данный момент. При взаимодействии с командной строкой вы всегда находитесь внутри директории.
По умолчанию, когда вы запускаете операционную систему Linux, текущим рабочим каталогом является домашняя директория. Изменить рабочую директорию можно с помощью команды cd.
Например, чтобы изменить текущую рабочую директорию на /tmp, используйте такую команду:
cd /tmp
Путь к текущей рабочей директории может отображаться в оболочке командной строки.
user@host:/tmp#
Команда pwd
Команда pwd выводит текущую рабочую директорию. Это одна из базовых и самых популярных команд в Linux. При вызове pwd выводится полный путь к текущей рабочей директории.
Команда pwd встроена в большинство современных командных оболочек, в том числе в Bash. Её поведение отличается от выполнения /bin/pwd. С помощью команды type можно получить все места, где есть pwd:
type -a pwd
Получаем вывод:
pwd is a shell builtin
pwd is /bin/pwd
Как показывает вывод, встроенная команда pwd имеет более высокий приоритет по сравнению с /bin/pwd. Поэтому она используется всякий раз, когда вы вводите в командую строку pwd. Если вы хотите использовать файл /bin/pwd, нужно указать в командной строке полный путь до него.
Как найти текущую рабочую директорию
Чтобы понять, в какой директории вы работаете в данный момент, введите в терминале pwd. Вывод может выглядеть так (название директории может отличаться):
/home/linuxize
Всё, что делает команда pwd — выводит значение переменной окружения PWD. Такой же вывод получится, если ввести в терминале:
echo $PWD
Команда pwd принимает только два аргумента:
- -L (—logical) — не разрешать симлинки.
- -P (—physical) — отображать физическую директорию без симлинков.
По умолчанию pwd ведёт себя так, как будто применена опция -L.
Чтобы понять, как работает аргумент -P, создадим директорию и симлинк, указывающий на эту директорию.
mkdir /tmp/directory
ln -s /tmp/directory /tmp/symlink
Когда вы зайдёте в директорию /tmp/symlink и введёте команду pwd, вывод будет таким:
/tmp/symlink
То есть текущей рабочей директорией становится /tmp/symlink. Если ввести команду pwd -P, вывод будет таким:
/tmp/directory
Симлинк (англ. Symlink, symbolic link) — символическая ссылка. Этим термином обозначают файл, в котором содержится абсолютный или относительный путь к другому файлу или директории.
То есть получаем директорию, на которую указывает симлинк.
Заключение
Текущая рабочая директория — директория, из которой вы вызываете команды в терминале. Чтобы отобразить текущую рабочую директорию, нужно использовать команду pwd. Если у вас остались вопросы, добро пожаловать в комментарии.
Адаптированный перевод статьи Pwd Command in Linux (Current Working Directory) by Linuxize.
17
Содержание
- Зачем нужна команда pwd и что такое текущая рабочая директория
- Что такое текущая рабочая директория
- Команда pwd
- Как найти текущую рабочую директорию
- Заключение
- Полезные команды в консоли Windows
- Содержимое текущей папки — dir
- Открыть файл
- Перейти в другую папку — cd
- Создать папку — mkdir или md
- Удалить папку — rmdir или rd
- Показать дерево папок — tree
- Удаление файла — del или erase
- Переименование файла — ren или rename
- Команды одной строкой
- Справка по командам — help
- Команды командной строки Windows CMD
- Запуск командной строки Windows.
- Команды командной строки.
- Операции с файлами и папками.
- Работа с дисками.
- Управление приложениями и процессами.
- Информация о системе.
- Просмотр и настройка сетевых параметров.
- Настройка и управление командной строкой.
- Cmd получить текущий каталог
- Основные команды командной строки
- Дополнительные команды
- Cmd путь к текущей папке
- 1. Windows
- 2. Linux
- Текущая папка запуска в cmd. / The current start-up folder in cmd.
Зачем нужна команда pwd и что такое текущая рабочая директория
Из этой статьи вы узнаете, как определить текущую рабочую директорию (current working directory) с помощью команды pwd.
Что такое текущая рабочая директория
Текущая рабочая директория — директория, в которой пользователь работает в данный момент. При взаимодействии с командной строкой вы всегда находитесь внутри директории.
По умолчанию, когда вы запускаете операционную систему Linux, текущим рабочим каталогом является домашняя директория. Изменить рабочую директорию можно с помощью команды cd.
Например, чтобы изменить текущую рабочую директорию на /tmp, используйте такую команду:
Путь к текущей рабочей директории может отображаться в оболочке командной строки.
Команда pwd
Команда pwd выводит текущую рабочую директорию. Это одна из базовых и самых популярных команд в Linux. При вызове pwd выводится полный путь к текущей рабочей директории.
Команда pwd встроена в большинство современных командных оболочек, в том числе в Bash. Её поведение отличается от выполнения /bin/pwd. С помощью команды type можно получить все места, где есть pwd:
Как показывает вывод, встроенная команда pwd имеет более высокий приоритет по сравнению с /bin/pwd. Поэтому она используется всякий раз, когда вы вводите в командую строку pwd. Если вы хотите использовать файл /bin/pwd, нужно указать в командной строке полный путь до него.
Как найти текущую рабочую директорию
Чтобы понять, в какой директории вы работаете в данный момент, введите в терминале pwd. Вывод может выглядеть так (название директории может отличаться):
Всё, что делает команда pwd — выводит значение переменной окружения PWD. Такой же вывод получится, если ввести в терминале:
Команда pwd принимает только два аргумента:
По умолчанию pwd ведёт себя так, как будто применена опция -L.
Чтобы понять, как работает аргумент -P, создадим директорию и симлинк, указывающий на эту директорию.
Когда вы зайдёте в директорию /tmp/symlink и введёте команду pwd, вывод будет таким:
Симлинк (англ. Symlink, symbolic link) — символическая ссылка. Этим термином обозначают файл, в котором содержится абсолютный или относительный путь к другому файлу или директории.
То есть получаем директорию, на которую указывает симлинк.
Заключение
Текущая рабочая директория — директория, из которой вы вызываете команды в терминале. Чтобы отобразить текущую рабочую директорию, нужно использовать команду pwd. Если у вас остались вопросы, добро пожаловать в комментарии.
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Источник
Полезные команды в консоли Windows
Программистам часто приходится работать в консоли — например, чтобы запустить тестирование проекта, закоммитить новый код на Github или отредактировать документ в vim. Всё это происходит так часто, что все основные действия с файлами становится быстрее и привычнее выполнять в консоли. Рассказываем и показываем основные команды, которые помогут ускорить работу в терминале под ОС Windows.
Для начала нужно установить терминал или запустить командную строку, встроенную в Windows — для этого нажмите Win+R и введите cmd. Терминал часто встречается и прямо в редакторах кода, например, в Visual Studio Code.
Содержимое текущей папки — dir
Выводит список файлов и папок в текущей папке.
Открыть файл
Чтобы открыть файл в текущей папке, введите его полное имя с расширением. Например, blog.txt или setup.exe.
Перейти в другую папку — cd
Команда cd без аргументов выводит название текущей папки.
Перейти в папку внутри текущего каталога
Перейти на одну папку вверх
Перейти в папку на другом диске
Чтобы просто изменить диск, введите c: или d:
Создать папку — mkdir или md
Создаём пустую папку code внутри папки html :
Создаём несколько пустых вложенных папок — для этого записываем их через косую черту.
Удалить папку — rmdir или rd
При этом удалить можно только пустую папку. Если попытаться удалить папку, в которой что-то есть, увидим ошибку.
Показать дерево папок — tree
Если вы хотите посмотреть содержимое всего диска, введите tree в корне нужного диска. Получится красивая анимация, а если файлов много, то ещё и немного медитативная.
Удаление файла — del или erase
Команда для удаления одного или нескольких файлов.
Переименование файла — ren или rename
Последовательно вводим ren, старое и новое имя файла.
Команды одной строкой
Очистить консоль — cls
Информация о системе — systeminfo
Информация о сетевых настройках — ipconfig
Список запущенных процессов — tasklist
Справка по командам — help
Команда help без аргументов выводит список всех возможных команд. help вместе с именем команды выведет справку по этой команде.
В этой статье приведены не все команды и не все их возможности, но вы всегда можете воспользоваться командой help и узнать о том, что ещё может командная строка.
Консоль — важный инструмент веб-разработчика
Научитесь пользоваться всеми инструментами в HTML Academy, чтобы работать с кодом в большой компании.
Источник
Команды командной строки Windows CMD
У тех кто не работал с командной строкой в первую очередь возникает вопрос: Как открыть командную строку Windows?
Запуск командной строки Windows.
Программа консоли Windows, как и многие другие системные программы, находится в директории c:Windowssystem32 и называется cmd.exe. Так как консоль Windows является системной программой, то открыть командную строку в любой версии Windows, включая Windows10, можно через инструмент «Выполнить», введя название программы cmd.
В результате поиска будет предложено несколько действий, одно из которых позволяет запустить Командную строку Windows 10 от имени администратора
В открывшейся консоли CMD мы увидим стандартное приветствие командной строки Windows. Текущей директорией является папка пользователя. Если консоль открыта от имени Администратора, то текущей директорией будет c:windowssystem32.
Команды командной строки.
Каждая команда командной строки представляет собой консольную программу. Помимо простых программ, позволяющих просматривать информацию о системе или выполнять операции с файлами и папками, есть довольно мощные утилиты для управления настройками операционной системы.
В командной строке Windows есть справочная информация по каждой программе, в которой описан синтаксис использования программы, праметры и аргументы, с которыми она работает.
Посмотреть справку по использованию команды можно используя следующий синтаксис.
Например справка по команде COPY будет выглядеть так.
Список всех доступных команд можно посмотреть используя команду HELP.
Для быстроты использования, команды создававлись в виде аббревиатуры или сокращения слов. Чтобы хорошо запоминать такие команды нужно понимать что означает ее сокращенная запись. В скобках приведены пояснения сокращений.
Операции с файлами и папками.
Работа с дисками.
Управление приложениями и процессами.
Информация о системе.
Просмотр и настройка сетевых параметров.
Настройка и управление командной строкой.
Источник
Cmd получить текущий каталог
Далее кратко описаны полезные возможности, которые можно использовать в командных файлах (*.bat;*.cmd aka батники) операционных систем Windows 2000, XP, 2003 и более поздних.
В этих операционных системах введены существенные расширения возможностей сценариев командной строки, которые позволяют делать, например, следующие вещи:
Более подробную помощь нежели в данном обзоре можно найти в стандартной справке в каталоге Windows.
(Типичный путь к файлу справки: C:WINDOWSHelp
tcmds.chm. Если Windows установлена в каталог, отличный от C:WINDOWS, то ссылки на справку из данной страницы работать не будут. Потребуется открыть справку самостоятельно.)
В частности, крайне полезно почитать следующие разделы:
Справку по конкретной команде также всегда можно получить набрав в командной строке » /?«.
Например, очень познавательно почитать то, что выдается в результате команд set /?, call /?, for /?, if /?.
Помощь приводится на языке установленной операционной системы.
Вывод
Текущий каталог
Параметры вызова сценариев
Например, после вызова будем иметь следующую картину:
Современные ОС используют расширенный режим обработки параметров, в котором доступны следующие модификаторы:
Модификатор | Описание |
---|---|
расширение %1 и удаление любых кавычек («») | |
замена %1 полным путем | |
замена %1 именем диска | |
замена %1 путем без диска и имени файла | |
замена %1 именем файла без расширения | |
замена %1 расширением имени файла | |
замена полным путем, содержащим только короткие имена | |
замена %1 атрибутами файла | |
замена %1 датой и временем модификации файла | |
замена %1 размером файла | |
Поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку. |
Описанные модификаторы можно применять в различных сочетаниях для всех параметров. Например:
Модификатор | Описание |
---|---|
полный путь (включая завершающий слэш) к каталогу выполняемого скрипта | |
имя файла первого параметра с расширением | |
размер файла второго параметра | |
замена %1 строкой, аналогичной результату работы программы dir |
Проверка условий
Проверка кода возврата:
if [not] errorlevel число команда [else выражение]
Условие верно, если предыдущая обработанная команда завершилась с кодом, равным или большим значения число.
Например:
Использование меток
Есть также особый вариант команды call для повторного вызова текущего скрипта с заданной метки с определенными параметрами.
Запуск команд
Инструкция «cmd команда» запускает системный пакетный обработчик cmd.exe для выполнения команды команда.
Если вызов происходит из консоли, то используется имеющаяся, если нет — создается новая.
Ключи /c и /k указывают, что по завершении исполнения консоль нужно закрыть или оставить, соответственно.
Инструкция «start команда» запускает обработку команды команда в отдельном параллельном процессе.
Соответствующие ключи позволяют изменять приоритет запускаемого процесса.
Ключ /wait указывает, что запустившему процессу следует дождаться завершения запущенного.
Запускать новые командные сценарии из командных сценариев можно также двумя способами.
Первый: Второй:
Код возврата команд
Команда exit число прерывает исполнение текущего сценария с возвратом запустившему его процессу заданного кода выхода. По умолчанию производится прерывание сразу всей цепочки вызовов пакетных сценариев. Если необходимо завершить только текущий сценарий и возвратить управление в сценарий, вызвавший его командой call, то нужно использовать ключ /b команды exit. Для выхода из сценария с передачей вызвавшему процессу текущего значения %errorlevel% необходимо использовать команду goto :eof.
Некоторые команды всегда устанавливают переменную %errorlevel%, некоторые модифицируют ее только при возникновении ошибок, а некоторые вообще ее никогда не меняют.
Вот пример:
Копирование
Проверить, удачно ли выполнилась команда можно по коду возврата %errorlevel%.
Использование нескольких команд и символов условной обработки
Можно выполнять несколько команд из одной командной строчки с помощью символов условной обработки, перечисленных в следующей таблице.
Примечание:
Амперсанд &, вертикальная черта | и скобки () являются специальными символами, которым должен предшествовать управляющий символ ^ или кавычки, если эти символы передаются в качестве аргументов.
Вот пример специализированного скрипта для сравнения файлов:
Использование переменных среды
Глобальные переменные устанавливаются в свойствах операционной системы или специальной внешней утилитой setx и доступны с одними и теми же значениями при запуске всех пакетных файлов.
Локальные переменные устанавливаются и используются по-своему в каждом отдельном сценарии, сохраняются только во время его выполнения, а также передаются в дочерние сценарии при вложенных вызовах.
Псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.
В следующей таблице приведен выборочный список наиболее интересных переменных среды.
При использовании переменных можно также использовать выделение подстрок.
Конструкция | Назначение |
---|---|
%PATH: |
расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины. %PATH:
извлечет последние 10 символов переменной PATH %PATH:
извлечет все символы переменной PATH, за исключением 2-х последних
Для установки значений переменных используется команда set.
Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда
Вычисление арифметических выражений
Оператор | Действие оператора |
---|---|
() | группировка |
! |
унарные операторы * / % арифметические операторы + — арифметические операторы > двоичный сдвиг & двоичное И ^ двоичное исключающее ИЛИ | двоичное ИЛИ присваивание , разделитель операторов
При использовании символов & | % ^ заключайте выражение в кавычки.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.
Пример использования вычисления выражений:
Потоки ввода/вывода
Потоки используются в командных сценариях для унифицированного распределения и перенаправления ввода/вывода.
В следующей таблице представлены стандартные потоки.
Поток | Номер дескриптора | Описание |
---|---|---|
STDIN | Стандартный ввод (только чтение) | |
STDOUT | 1 | Стандартный вывод (только запись) |
STDERR | 2 | Вывод ошибок (только запись) |
Каждый поток может быть связан с каким-либо устройством ввода/вывода.
В следующей таблице представлены стандартные устройства.
Устройство | Описание |
---|---|
CON | Консоль (чтение с клавиатуры и вывод на экран) |
NUL | Пустота |
PRN | Принтер |
В качестве устройств могут также выступать файлы, заданные по имени.
По умолчанию все стандартные потоки связаны с устройством CON.
В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.
Оператор перенаправления | Описание |
---|---|
> | Перенаправление вывода с затиранием. |
Перенаправление ввода. | |
>> | Перенаправление вывода с добавлением. |
>& | Считывает данные на выходе одного потока как входные данные для другого потока. |
Считывает входные данные одного потока как выходные данные другого потока. | |
| | Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал». |
Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.
Далее приведены некоторые примеры.
Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).
Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.
Дописывание содержимого одного файла в конец другого.
Поэкранный вывод списка элементов текущего каталога.
Поэкранный вывод имен всех фидошников города Гомеля, отсортированных по алфавиту.
Организация циклов
Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:
Перебор фиксированного множества параметров.
Итерация по файлам.
Итерация по каталогам.
Итерация и разбор файлов
Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр «options» служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:
Поясняющий пример:
FOR /F «eol=; tokens=2,3* delims=, » %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j — для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.
Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.
Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F «usebackq delims==» %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.
Организация блокировок
Установка цвета консоли
(CopyLeft) Vadim Kopichenko
Иногда в скриптах необходимо использовать путь папки в которой мы находимся в текущий момент. Расположение текущей папки (полный путь) хранится в переменной %CD%
Можно вывести на экран текущую директорию и путь к ней в консоли, например так
Использование системных переменных необходимо при написании командных сценариев для консоли Windows, т.е. bat или cmd файлов.
Значение и названия некоторых других переменных Windows можно узнать выполнив в командной строке (cmd.exe) команду
P.S. иногда можно написать нужный скрипт в пару строк, если правильно использовать структуру, нужные команды и встроенные переменные Windows
Фразы: текущий каталог в скрипте, вывести переменную путь, как узнать каталог в котором выполняется скрипт?
Основные команды командной строки
CLS очищает экран. Эта команда CMD в Windows применяется, если эмулятор командной строки заполнен перечнем команд и их операций.
EDIT имя-файла позволяет изменять содержимое файла.
Команда COPY позволяет скопировать один или несколько файлов из одного места в другое. Команда позволяет объединять файлы одного и того же типа. Давайте посмотрим на различные примеры применения команды COPY :
Дополнительные команды
CHKDSK — CMD команда используется для того, чтобы проверить, может ли ваша операционная система правильно прочитать жесткий диск или любой другой носитель. Синтаксис команды: CHKDSK C : — замените C буквой диска, который нужно проверить. Введите CHKDKS /? чтобы посмотреть другие варианты.
Источник
Cmd путь к текущей папке
Если вдруг кому-то понадобилось вывести путь текущей директории в командной строке Windows, то кто-то подумает зачем этот геморрой? Можно просто открыть проводник и посмотреть. Но не все так просто. Например, если вы хотите написать какой-то скрипт (bat файл), который ежедневно выполняет какую-то задачу в автоматическом режиме, то в этом случае и удобно воспользоваться командной строкой. И даже несмотря на всю ограниченность командной строки Windows, существует возможность узнать путь текущей директории.
1. Windows
Итак, чтобы вывести путь текущей директории в Windows, просто введите эту команду в командной строке и нажмите Enter:
Т.е. мы выводим текущую директорию из переменной окружения cd с помощью команды echo.
2. Linux
И теперь посмотрите, как это делается в Linux. Чтобы отобразить путь текущей директории в Linux, достаточно просто ввести команду pwd:
Т.е. в Linux это встроенная команда, помимо этого вы также можете отобразить путь используя переменную окружения:
Далее кратко описаны полезные возможности, которые можно использовать в командных файлах (*.bat;*.cmd aka батники) операционных систем Windows 2000, XP, 2003 и более поздних.
В этих операционных системах введены существенные расширения возможностей сценариев командной строки, которые позволяют делать, например, следующие вещи:
Более подробную помощь нежели в данном обзоре можно найти в стандартной справке в каталоге Windows.
(Типичный путь к файлу справки: C:WINDOWSHelp
tcmds.chm. Если Windows установлена в каталог, отличный от C:WINDOWS, то ссылки на справку из данной страницы работать не будут. Потребуется открыть справку самостоятельно.)
В частности, крайне полезно почитать следующие разделы:
Справку по конкретной команде также всегда можно получить набрав в командной строке » /?«.
Например, очень познавательно почитать то, что выдается в результате команд set /?, call /?, for /?, if /?.
Помощь приводится на языке установленной операционной системы.
Вывод
Текущий каталог
Параметры вызова сценариев
Например, после вызова будем иметь следующую картину:
Современные ОС используют расширенный режим обработки параметров, в котором доступны следующие модификаторы:
Модификатор | Описание |
---|---|
расширение %1 и удаление любых кавычек («») | |
замена %1 полным путем | |
замена %1 именем диска | |
замена %1 путем без диска и имени файла | |
замена %1 именем файла без расширения | |
замена %1 расширением имени файла | |
замена полным путем, содержащим только короткие имена | |
замена %1 атрибутами файла | |
замена %1 датой и временем модификации файла | |
замена %1 размером файла | |
Поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку. |
Описанные модификаторы можно применять в различных сочетаниях для всех параметров. Например:
Модификатор | Описание |
---|---|
полный путь (включая завершающий слэш) к каталогу выполняемого скрипта | |
имя файла первого параметра с расширением | |
размер файла второго параметра | |
замена %1 строкой, аналогичной результату работы программы dir |
Проверка условий
Проверка кода возврата:
if [not] errorlevel число команда [else выражение]
Условие верно, если предыдущая обработанная команда завершилась с кодом, равным или большим значения число.
Например:
Использование меток
Есть также особый вариант команды call для повторного вызова текущего скрипта с заданной метки с определенными параметрами.
Запуск команд
Инструкция «cmd команда» запускает системный пакетный обработчик cmd.exe для выполнения команды команда.
Если вызов происходит из консоли, то используется имеющаяся, если нет — создается новая.
Ключи /c и /k указывают, что по завершении исполнения консоль нужно закрыть или оставить, соответственно.
Инструкция «start команда» запускает обработку команды команда в отдельном параллельном процессе.
Соответствующие ключи позволяют изменять приоритет запускаемого процесса.
Ключ /wait указывает, что запустившему процессу следует дождаться завершения запущенного.
Запускать новые командные сценарии из командных сценариев можно также двумя способами.
Первый: Второй:
Код возврата команд
Команда exit число прерывает исполнение текущего сценария с возвратом запустившему его процессу заданного кода выхода. По умолчанию производится прерывание сразу всей цепочки вызовов пакетных сценариев. Если необходимо завершить только текущий сценарий и возвратить управление в сценарий, вызвавший его командой call, то нужно использовать ключ /b команды exit. Для выхода из сценария с передачей вызвавшему процессу текущего значения %errorlevel% необходимо использовать команду goto :eof.
Некоторые команды всегда устанавливают переменную %errorlevel%, некоторые модифицируют ее только при возникновении ошибок, а некоторые вообще ее никогда не меняют.
Вот пример:
Копирование
Проверить, удачно ли выполнилась команда можно по коду возврата %errorlevel%.
Использование нескольких команд и символов условной обработки
Можно выполнять несколько команд из одной командной строчки с помощью символов условной обработки, перечисленных в следующей таблице.
Примечание:
Амперсанд &, вертикальная черта | и скобки () являются специальными символами, которым должен предшествовать управляющий символ ^ или кавычки, если эти символы передаются в качестве аргументов.
Вот пример специализированного скрипта для сравнения файлов:
Использование переменных среды
Глобальные переменные устанавливаются в свойствах операционной системы или специальной внешней утилитой setx и доступны с одними и теми же значениями при запуске всех пакетных файлов.
Локальные переменные устанавливаются и используются по-своему в каждом отдельном сценарии, сохраняются только во время его выполнения, а также передаются в дочерние сценарии при вложенных вызовах.
Псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.
В следующей таблице приведен выборочный список наиболее интересных переменных среды.
При использовании переменных можно также использовать выделение подстрок.
Конструкция | Назначение |
---|---|
%PATH: |
расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины. %PATH:
извлечет последние 10 символов переменной PATH %PATH:
извлечет все символы переменной PATH, за исключением 2-х последних
Для установки значений переменных используется команда set.
Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда
Вычисление арифметических выражений
Оператор | Действие оператора |
---|---|
() | группировка |
! |
унарные операторы * / % арифметические операторы + — арифметические операторы > двоичный сдвиг & двоичное И ^ двоичное исключающее ИЛИ | двоичное ИЛИ присваивание , разделитель операторов
При использовании символов & | % ^ заключайте выражение в кавычки.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.
Пример использования вычисления выражений:
Потоки ввода/вывода
Потоки используются в командных сценариях для унифицированного распределения и перенаправления ввода/вывода.
В следующей таблице представлены стандартные потоки.
Поток | Номер дескриптора | Описание |
---|---|---|
STDIN | Стандартный ввод (только чтение) | |
STDOUT | 1 | Стандартный вывод (только запись) |
STDERR | 2 | Вывод ошибок (только запись) |
Каждый поток может быть связан с каким-либо устройством ввода/вывода.
В следующей таблице представлены стандартные устройства.
Устройство | Описание |
---|---|
CON | Консоль (чтение с клавиатуры и вывод на экран) |
NUL | Пустота |
PRN | Принтер |
В качестве устройств могут также выступать файлы, заданные по имени.
По умолчанию все стандартные потоки связаны с устройством CON.
В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.
Оператор перенаправления | Описание |
---|---|
> | Перенаправление вывода с затиранием. |
Перенаправление ввода. | |
>> | Перенаправление вывода с добавлением. |
>& | Считывает данные на выходе одного потока как входные данные для другого потока. |
Считывает входные данные одного потока как выходные данные другого потока. | |
| | Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал». |
Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.
Далее приведены некоторые примеры.
Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).
Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.
Дописывание содержимого одного файла в конец другого.
Поэкранный вывод списка элементов текущего каталога.
Поэкранный вывод имен всех фидошников города Гомеля, отсортированных по алфавиту.
Организация циклов
Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:
Перебор фиксированного множества параметров.
Итерация по файлам.
Итерация по каталогам.
Итерация и разбор файлов
Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр «options» служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:
Поясняющий пример:
FOR /F «eol=; tokens=2,3* delims=, » %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j — для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.
Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.
Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F «usebackq delims==» %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.
Организация блокировок
Установка цвета консоли
(CopyLeft) Vadim Kopichenko
Текущая папка запуска в cmd. / The current start-up folder in cmd.
При создании скрипта cmd иногда возникает необходимость запустить тот или иной файл для установки приложения в папке со скриптом.
Для запуска приложения в текущей папке скриптом cmd используется переменная:
На изображении показан пример запуска скрипта cmd из другой папки. Сам скрипт состоит из двух строк, а именно:
dp 0
pause
Таким образом, запустив скрипт из любого расположения он будет ссылаться на путь где скрипт непосредственно и находится.
Пример скрипта инсталляции программы Winrar из папки где находится сам скрипт:
dp0 работает только в cmd файле, а не в командной строке.
dp 0 может использоваться как при инсталляции приложений, так и для копирования файлов в ваших bat файлах.
Надеюсь, что данная информация поможет Вам при составлении своих скриптов. Буду рад, если Вы сделаете репост данной статьи в социальные сети.
When you create a cmd script, sometimes you need to run a particular file to install the application in the folder with the script.
To run the application in the current folder, the cmd script uses a variable:
The image shows an example of running cmd script from another folder. The script itself consists of two lines, namely:
dp 0
pause
Running the script from any location will refer to the path where the script is located.
Example script installation Winrar from the folder where the script itself:
Attention! The %
dp0 variable only works in the cmd file, not on the command line.
The variable %
dp0 can be used both for installing applications and for copying files.
I hope this information will help you in the preparation of their scripts. We will be glad if you repost this article in social networks.
Источник
Практические примеры, которые приведены в этой статье, помогут вам освоить очень эффективную и крайне полезную команду find.
Она используется для поиска файлов и папок через командную строку Linux.
Команда find — одна из самых мощных и широко применимых команд. При этом она крайне объёмная и насчитывает более 50 опций, в которых легко запутаться, особенно в сочетании с командами exec или xargs.
Если вы сисадмин или разработчик, избежать команды find
при работе с командной строкой не получится. Так что давайте научимся её не бояться и пользоваться её возможностями в полной мере.
Для этого разберём самые распространённые случаи практического применения команды find. Но для начала покажу вам синтаксис и принцип работы с командой.
Команда find в Linux
Общий синтаксис команды find выглядит так:
find [directory to search] [options] [expression]
Всё, что в квадратных скобках, указывать необязательно. А значит, выполнить команду find можно вообще без опций и параметров. Она выдаст список всех файлов и папок в текущем расположении. Мало полезного, да?
Так что давайте взглянем на параметры подробнее:
-
directory to search
(папка поиска) — это расположение, с которого вы хотите начать поиск. Поиск по умолчанию рекурсивный и начинается с текущего расположения. -
options
(опции) содержит указание типа поиска: по имени, типу файла, времени изменения и так далее — тут может быть более 50 вариантов. -
expression
(выражение) содержит поисковый запрос. Если вы ищете файл по имени, параметр expression должен содержать имя файла. Если ищете файлы с именем, соответствующим заданному шаблону, поисковое выражение — это шаблон.
Приведу простой пример:
find . -type f -name myfile
Такая команда выполнит поиск файла (именно файла, не папки) с именем myfile
в текущей папке и подпапках. Опция -type f
сужает поиск до файлов. Точка (.
) указывает на текущую папку.
Рассмотрим несколько примеров применения команды find.
Поиск файлов и папок по имени
Так выполняется поиск файлов и папок по имени:
find . -name SEARCH_NAME
Поскольку тип объекта не указан, команда выполняет поиск и файлов, и папок.
Пример ниже — поиск файлов и папок с именем «mystuff»:
abhishek@LHB:~/Examples$ find -name mystuff
./new/mystuff
./mystuff
Поиск только файлов или только папок
Если нужно искать только файлы, на помощь придёт опция type -f:
find . -type f -name SEARCH_NAME
Тип и имя можно указывать в любом порядке. Возьмём пример выше и ограничим круг поиска файлами:
abhishek@LHB:~/Examples$ find -type f -name mystuff
./mystuff
Если нужно найти папку, укажите тип type -d:
find . -type d -name SEARCH_NAME
Вот пример нашего поиска уже по папкам:
abhishek@LHB:~/Examples$ find -type d -name mystuff
./new/mystuff
Поиск без учёта регистра
Команда find по умолчанию учитывает регистр. Чтобы выполнить поиск по имени файла без учёта регистра, надо ввести опцию -iname
вместо -name
.
find . -type f -iname SEARCH_NAME
С поиском по папкам (type -d
) это тоже работает.
abhishek@LHB:~/Examples$ find -iname mystuff
./new/mystuff
./MyStuff
./mystuff
Скриншот последних трёх примеров:
Поиск файлов по расширению (важно)
Одно из самых популярных применений команды find — поиск файлов определённого типа, то есть по заданному расширению.
Скажем, вы хотите найти все файлы С++ в текущих папках. Файлы С++ имеют расширение .cpp, и вот как их можно найти:
find . -type f -name "*.cpp"
С такими опциями команда find найдёт только файлы (-type f
) с именами, оканчивающимися на .cpp
.
abhishek@LHB:~$ find . -type f -name "*.cpp"
./file.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream2/zstream_test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/zfstream.cpp
При работе с командой find всегда заключайте поисковое выражение в двойные кавычки.
С чем связана рекомендация заключать поисковый запрос в двойные или одинарные кавычки? Дело в том, что без кавычек оболочка будет работать с символом * как с джокером и выполнит подстановку.
Вот что будет, если ввести запрос без кавычек:
find . -type f -name *.cpp
Оболочка распознает подстановочный знак * и заменит его всеми файлами в текущей папке, чьи имена заканчиваются на .cpp.
Это сработает, если такой файл всего один, но если их несколько, оболочка пожалуется на некорректный синтаксис.
В нашем случае файл .cpp всего один, и после подстановки команда выглядит так: find . -type f -name file.cpp
. Она работает, поскольку file.cpp
— корректный поисковый запрос.
А вот файлов .txt в той же папке два, и когда команда расширяется до find . -type f -name another.txt new.txt
, выводится предупреждение, потому что поисковых запросов больше одного.
Именно поэтому сам поисковый запрос всегда следует заключать в двойные кавычки.
Поиск нескольких файлов с несколькими расширениями (или условием)
Команда, рассмотренная выше, нужна для поиска файлов по расширению. А что если нужно найти файлы с несколькими разными расширениями?
Вместо того чтобы прогонять команду find несколько раз, введите её один раз с опцией -o, которая работает как логическое условие «или»:
find . -type f -name "*.cpp" -o -name "*.txt"
Например:
abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -o -name "*.cpp"
./new.txt
./file.cpp
./new/new.txt
./new/dir2/another.txt
./new/dir1/new.txt
./another.txt
Поиск файлов в заданной папке
Все приведённые примеры иллюстрируют поиск в текущей папке, потому что команда включает в себя точку (.
).
Чтобы выполнить поиск в заданной папке, не покидая текущего расположения, можно заменить точку абсолютным или относительным путём к нужной папке.
abhishek@LHB:~/Examples$ find ./new -name mystuff
./new/mystuff
Поиск файлов в нескольких папках
Если нужные вам файлы могут находиться в нескольких папках, можно выполнить поиск во всех этих расположениях за один раз. Просто укажите все пути к папкам при введении команды find:
find ./location1 /second/location -type f -name "pattern"
Поиск пустых файлов и папок
Опция -empty
позволяет использовать команду find для поиска пустых файлов и папок.
Найти таковые в текущей папке можно следующим образом:
find . -empty
Можно указать тип объектов, чтобы искать только файлы или только папки:
find . -empty -type f
Кроме того, можно в таком режиме искать файлы по имени:
find . -empty -type f -name "*.cpp"
Поиск крупных и мелких файлов (поиск по размеру файла)
Команда find поможет найти крупные или мелкие файлы, если выполнить поиск по размеру. Но это работает только для файлов, не для папок.
Используется опция -size
с аргументом +N для файлов размером более N и -N для файлов размером менее N.
А вот как можно найти файлы точного заданного размера (50 КБ):
find . -size 50k
Так выполняется поиск файлов размером более 1 ГБ в текущей папке:
find . -size +1G
А так — файлов, не превышающих 20 байт:
find . -size -20c
Для поиска файлов размером более 100 МБ, но менее 2ГБ, введите:
find . -size +100M -size -2G
Поиск по размеру тоже можно сочетать с поиском по имени файла. Таким образом, найти в корневом каталоге все файлы размером более 500 МБ с именем, оканчивающимся на .log, можно так:
find / -size +500M -name "*.log"
Для справки:
-
c
– байты -
k
– килобайты -
M
– мегабайты -
G
– гигабайты
Поиск недавно изменённых файлов (поиск по времени изменения или создания)
Вы ведь знакомы с параметрами mtime, atime и ctime?
- Mtime – время последнего изменения файла
- Ctime – время создания файла
- Atime – время последнего доступа к файлу
Вы не раз столкнётесь с ситуацией, когда нужен список всех недавно изменённых файлов. В таких случаях на помощь приходит поиск по времени изменения.
Найти все файлы, претерпевшие изменения за последние трое суток (3*24ч), можно так:
find . -type f -mtime -3
А все файлы, созданные пять и более дней назад, ищутся так:
find . -type f -ctime +5
Понимаю, что 24 часа — большой срок. Что если нужно выявить файлы, изменённые всего пару минут назад? Для этого предусмотрены опции mmin
, amin
и cmin
.
Так выглядит команда поиска всех файлов, изменённых за последние пять минут:
find . -type f -mmin -5
Можно не только указать имя файла, но и ограничить временной промежуток с двух сторон. Команда ниже выполнит поиск всех файлов .java, изменённых не ранее 30 и не позднее 20 минут назад.
find . -type f -mmin +20 -mmin -30 -name "*.java"
Поиск файлов с определёнными настройками доступа
Надеюсь, вы имеете представление о разрешениях файлов в Linux.
Команда find позволяет выполнить поиск файлов по разрешению и режиму доступа.
find -perm mode
Поищем в текущей папке, к примеру, все файлы с режимом доступа 777:
find . -perm 777
А так можно найти все файлы с правами на чтение и запись для всех типов пользователей (только точное совпадение; файлы с правами на выполнение для всех не отобразятся):
find . -perm a=r+w
Поиск файлов по владельцу
Можно также найти файлы, принадлежащие определённому пользователю.
Вот как обнаружить в текущей папке все файлы пользователя Джона:
find . -type f -user John
Эта опция сочетается с другими, будь то размер или время и имя файла:
find . -type f -user John -name "*.cpp"
Отключение рекурсивного поиска для поиска только в текущей папке
По умолчанию команда find выполняет поиск во всех подпапках текущего расположения. Если это не требуется, можно ограничить глубину поиска значением «1». Так вы ограничитесь поиском в текущей папке, не залезая в подпапки.
find . -maxdepth 1 -type f -name "*.txt"
Исключение папки из поиска
Если нет необходимости производить поиск в той или иной папке, можно исключить её с помощью опций path, prune и логического «или».
find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME
Будьте внимательны: путь к папке должен оканчиваться на *, затем идёт -prune
и только потом -o
.
Попросту говоря, при поиске с опцией prune папка, указанная с помощью path, игнорируется. Prune всегда сопровождается флагом -o
(логическое «или»), чтобы папки, которые не были исключены, просматривались на наличие искомого объекта.
Дальнейшая работа с результатами команды find: exec и xargs
Итак, мы изучили различные способы поиска файлов по заданным параметрам. Это хорошо. А теперь следующий шаг: рассмотрим, какие действия можно выполнять с результатами команды find.
Например, как найти файлы с именем, соответствующим определённому шаблону, и переименовать их за одно действие? Или выявить и удалить пустые файлы?
Вам уже известно, что в Linux можно использовать перенаправление ввода-вывода, чтобы объединить результаты одной команды с вводом другой. Но с результатами команды find это не сработает — по крайней мере, не напрямую.
Чтобы выполнить действия над результатом команды find, есть два варианта:
- Применить exec
- Применить xargs
Использование find и exec
Допустим, вам нужен подробный список (ls -l) файлов, найденных командой find. Вот как его получить:
find . -type f -name "*.txt" -exec ls -l {} +
Результат будет таким:
abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -exec ls -l {} +
-rw-rw-r-- 1 abhishek abhishek 39 Oct 13 19:30 ./another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir1/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir2/another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:51 ./new/mystuff/new.txt
-rwxrwxrwx 1 abhishek abhishek 35 Oct 13 15:37 ./new/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:16 ./new.txt
Многие забывают ввести {} +
в конце команды exec. Но это необходимо — как и пробел между скобками {} и плюсом +.
Фигурные скобки ссылаются на результат выполнения команды find. Их содержимое может иметь следующий вид: {файл 1, файл 2, файл 3}. Символ +
используется как конец команды exec.
Есть ещё один вариант оформления exec:
find . -type f -name "*.txt" -exec ls -l {} ;
В данном случае плюс заменён на точку с запятой. Дополнительная косая черта означает, что точка с запятой не является специальным символом.
Преимущество сочетания {} +
заключается в меньшем количестве команд ( ls -l file1 file2 file3
), тогда как комбинация {} ;
запустит цепочку ls -l file1
, ls -l file2
и так далее.
Однако сочетание {} ;
даёт возможность использовать {}
несколько раз в одном и том же выражении exec. Так, приведённая ниже команда переименует все обнаруженные файлы с расширением .old.
find . -type f -name "*.txt" -exec mv {} {}.old ;
Использование команды xargs
Многие пользователи Linux сталкиваются с необходимостью перенаправления ввода-вывода довольно часто. Но команда exec с цепочкой символов {} +
кажется им слишком сложной.
И тут на помощь приходит xargs. Нужно просто перенаправить вывод команды find в команду xargs через конвейер.
find . -type f -name "*.txt" | xargs ls -l
Синтаксис куда проще, верно? К тому же команда xargs тоже весьма эффективна. Подробнее о ней — в статье по ссылке.
Сочетание команд find и grep
Теперь вы умеете совмещать команду find с xargs и exec, и пора перейти на следующий уровень — объединить find и grep.
Для сисадминов и разработчиков комбинация команд find и grep — одна из самых распространённых и вместе с тем самых полезных.
Команда find находит файлы с именем, соответствующим шаблону, а затем команда grep выполняет поиск по их содержимому.
Например, вам нужно найти все файлы .txt, в которых есть имя «Alice». Объединить команды find и grep можно так:
find . -type f -name "*.txt" -exec grep -i alice {} +
А можно с помощью xargs:
find . -type f -name "*.txt" | xargs grep -i alice
Конечно, пример элементарный, но если команда grep вам знакома, можете использовать её на своё усмотрение.
И это далеко не все возможности команды find…
Перечислить все опции и примеры использования команды find практически невозможно. Её возможностям нет границ, но если вы освоите её принципы, она окажется очень кстати во многих ситуациях. Решающий фактор — как сочетается логика действия разных опций и команд.
Надеюсь, моя подборка примеров использования find была для вас полезна. Если у вас есть вопросы или предложения, как сделать эту статью лучше, добро пожаловать в комментарии.
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.
Доступно до 31 декабря 2021 г.
Для начала работы в терминале Linux не нужно быть гуру администрирования — достаточно знать список базовых команд для навигации и работы с файлами и папками.
- Навигация
- Поиск
- Работа с папками
- Работа с файлами
- Переименование, перемещение и копирование
Навигация
После подключения к серверу вы оказываетесь в домашней папке пользователя. Чтобы узнать точный путь к вашему текущему местонахождению, воспользуйтесь командой:
pwd
Она выведет текущую рабочую директорию (print working directory).
Если вам нужно перейти в другую папку, для этого используется команда cd
(change directory) с указанием пути к нужной вам папке:
cd /home
Говоря о навигации, нельзя не упомянуть сокращения для обозначения некоторых директорий:
/ | корневая папка сервера |
. |
текущая директория, в которой вы сейчас находитесь. Например, чтобы найти файл с именем find . -name hello.txt |
.. |
директория, расположенная на уровень выше текущей. Если вы находитесь в папке cd .. |
~ |
домашняя папка текущего пользователя. Например, запустить скрипт sh ~/some-script.sh |
— |
предыдущая посещённая директория. Представим, что вы перешли в папку cd - |
Для навигации с помощью команды cd
есть два формата указания пути к нужной папке: абсолютный и относительный.
Абсолютный путь — это полный путь от корневой папки сервера «/»
. Например, вот такой:
/var/www/data/username/data/www/example.com/
Также к абсолютным относятся пути, в которых используется ~
— указание на домашнюю папку текущего пользователя. Например, при доступе к файлу ~/.bash_profile
он всегда будет открываться из одного и того же места: вместо ~
будет использоваться значение переменной окружения $HOME, которое не меняется.
Относительный путь — это неполный путь. Он указывается относительно какого-то объекта: например, текущей рабочей директории. То есть в начале отсутствует символ корневой папки «/»
.
./docs/files/file.txt file.txt
Представим, что мы сейчас работаем с файлами в папке /var/www/data/username
. Нам нужно отредактировать содержимое в директории на уровень выше — /var/www/data
. Чтобы управлять данными в этой папке, нам не обязательно постоянно указывать полный путь к ним — можно работать с относительным, начиная его с «../»
.
Также относительные пути используются, когда нужно выполнить операцию над файлом или папкой в директории, в которой мы сейчас работаем. Для выполнения команды достаточно указать имя файла или папки — система поймёт, что мы имеем в виду файл из текущего каталога.
Чтобы отобразить список содержимого папки, можно использовать команду ls
(list). Если дополнить её ключами -al
, она покажет типы данных, разрешения и скрытые файлы. Следующий пример покажет названия файлов и папок текущей рабочей папки:
ls
А этот выведет в терминал подробный список содержимого папки /etc:
ls -al /etc
Чтобы немного упростить себе жизнь, можно использовать консольные файловые менеджеры, например, mc
.
-
Ubuntu и Debian:
apt -y install mc
-
CentOS:
yum -y install mc
Его особенность — примитивный графический интерфейс. Он позволяет быстро ориентироваться в структуре каталогов, перемещаться между ними, создавать новые директории. Интерфейс разбит на два окна, между которыми вы можете перемещать файлы и папки. Помимо прочего, в нём можно работать и с помощью мыши — перемещаться двойным кликом по папкам, использовать кнопки в нижней части панели.
Поиск
С помощью команды find
можно найти на сервере папку или файл по набору условий. Структура команды проста:
find [где искать] [как искать] [что искать]
Например, мы знаем название файла hello.txt
, но не знаем, где именно на сервере он лежит. Найти его поможет конструкция:
find / -name "hello.txt"
/
указывает, что искать надо, начиная с корневой папки сервера. Если вам известно, где может лежать искомый файл, можно задать путь точнее.-name
указывает, что искать надо строго по имени."hello.txt"
— имя файла, который нам нужно найти. Если известна только часть имени, можно указать сокращённый вариант:"hello*"
,"*.txt"
Кроме -name
, команда find
имеет множество опций, которые позволяют уточнить условия поиска подробнее. Вот список наиболее полезных параметров:
|
Позволяет указать тип искомых данных: |
|
Позволяет вывести файлы с определённым уровнем доступа. Например, — |
|
Отображает только пустые файлы или папки |
|
Позволяет искать данные среди файлов, принадлежащих конкретному пользователю: |
|
Позволяет искать данные среди файлов, принадлежащих определённой группе пользователей: |
|
Позволяет задать условие относительно времени изменения файлов:
|
|
Позволяет задать условие относительно времени последнего доступа к файлу, аналогично |
|
Позволяет уточнить размер (или диапазон размера) искомых файлов |
|
Позволяет применить к найденным файлам команду |
Больше информации о возможностях find
можно узнать в файлах документации:
man find
Из встроенных инструментов поиска можно также отметить утилиту whereis
. Она предназначена для поиска бинарных и системных файлов и директорий служб. Следующий пример выведет список всех файлов и папок, имеющих прямое отношение к php
:
whereis php
Работа с папками
Для создания новых директорий используется команда mkdir
с указанием пути до создаваемой папки. Пример ниже создаст папку /new
в существующей директории /home/user
:
mkdir /home/user/new
Если нужно создать сразу несколько вложенных папок, можно использовать параметр -p
. В таком случае все несуществующие директории, указанные в пути, будут созданы автоматически. Представим, что нам нужно создать вложенные папки docs/photos/2020-08-17
в текущей директории — это будет выглядеть так:
mkdir -p docs/photos/2020-08-17
Если нужно создать несколько папок за раз, можно просто перечислить их через пробел:
mkdir docs pictures games
Удалить папку можно с помощью команды rmdir
с указанием пути. Папка будет удалена только в случае, если она пуста (можно использовать параметр --ignore-fail-on-non-empty
, чтобы удалить папку в любом случае). Для удаления нескольких вложенных папок можно аналогично использовать параметр -p
. Пример ниже удалит папку /photos
и все каталоги внутри неё:
rmdir -p docs/photos
Для удаления есть более эффективный инструмент, rm
, про который расскажем ниже.
Работа с файлами
Создание
В терминале есть несколько способов создания новых файлов.
Самый простой, одновременно создающий и файл, и недостающие папки — команда touch
. Достаточно передать ей полный путь к файлу. Для примера создадим в папке docs
папку copies
, а внутри неё — файл copies-list.txt
:
touch docs/copies/copies-list.txt
Несуществующая папка copies
создастся автоматически.
Если нужно создать сразу несколько файлов, можно просто перечислить их через пробел:
touch file1.txt file2.txt file3.txt
Ещё один способ создания новых файлов — вызвать какой-нибудь консольный текстовый редактор с указанием полного пути к файлу. Однако все папки придётся создать заранее. Тогда редактор автоматически создаст файл и откроет его для редактирования. Если не сохранить файл в редакторе, даже пустой, он не будет создан. Команда ниже добавит новый файл с помощью редактора vi
:
vi new-file.txt
Для сохранения и выхода из файла в vi
нужно нажать клавишу Esc, ввести сочетание :wq и нажать Enter. Для выхода без сохранения нужно также нажать Esc, ввести сочетание :q! и нажать Enter.
Ещё пара способов создания пустых файлов:
cat > new-file.txt echo > new-file.txt
Редактирование
Для редактирования файлов используются консольные текстовые редакторы. Самые известные — vi
и nano
. В некоторых дистрибутивах vi
заменён на vim
(vi
improved, улучшенный vi
) или vim.tiny
Редактор vi
будет доступен вам по умолчанию на большинстве Linux-систем.
А теперь к делу. Vi
(более известен как Vim) — старый, очень гибкий и при этом не очень простой в плане управления редактор. Собственно, так он и попал в популярные программистские и админские шуточки.
Запуск редактора без аргументов откроет его в режиме справки:
vi
Чтобы закрыть Vim (без сохранения), введите сочетание :q!
Если указать редактору путь к файлу, он откроет его для редактирования. Если файл не существовал, он будет создан:
vi new-file.txt
При первом входе Vim открывает файл в режиме просмотра. Он не позволяет редактировать его содержимое, но можно вводить командные последовательности, перемещаться по тексту, выполнять поиск и пр.
Чтобы начать ввод, нужно перейти в режим редактирования с помощью клавиши I. Чтобы вернуться в режим просмотра, нажмите Esc.
Перемещение по тексту выполняется с клавиатуры:
- перемещение в начало текста: Esc + дважды G
- перемещение в конец текста: Shift + G
- перемещение по строке горизонтально: стрелки ← →
- перемещение по строкам вертикально: стрелки ↑ ↓
- отображение номеров строк: Esc, введите
:set number
, нажмите Enter - перемещение по номерам строк: Esc, введите
:
номер строки, нажмите Enter
Для выхода с сохранением файла нажмите Esc и введите :wq!
Текстовый редактор vim — краткое руководство
Более современной и удобной альтернативой Vim считается редактор nano
. Современные дистрибутивы включают его по умолчанию, но на ранних версиях устанавливать придётся вручную:
-
Ubuntu и Debian:
apt -y install nano
-
CentOS:
yum -y install nano
Вызов nano
без аргументов откроет пустой редактор. Можно начать ввод (при сохранении вам будет предложено указать имя и сохранить файл) или вызвать режим помощи со списком доступных команд с помощью сочетания Ctrl+G.
Для сохранения файла нажмите Ctrl+O — редактор предложит ввести имя файла: введите имя и нажмите Enter. Если файл существовал, и имя изменять не требуется, просто нажмите Enter.
Для выхода из редактора нажмите Ctrl+X.
Чтение
Бывает, что нам нужно получить какую-то информацию из файла без необходимости редактировать его. В таком случае необязательно использовать текстовый редактор — есть более простые инструменты.
Команда cat
позволяет вывести в терминал всё содержимое файла, который указан в качестве аргумента:
cat example.txt
Однако, если мы заведомо знаем, что в файле большой объём информации, нет смысла выводить его целиком. Например, команды head
и tail
могут вывести часть содержимого с начала или конца файла соответственно. Если добавить к ним ключ -n
, можно уточнить, сколько строк текста нужно вывести:
head -n 3 example.txt
tail -n 3 example.txt
Помимо прочего, команда tail
очень удобна для чтения логов с ключом -f
. В таком режиме она открывает файл в режиме ожидания и выводит все добавляемые данные. Пригодится для тестирования или дебаггинга.
Иногда нам всё-таки нужно полностью просмотреть файл. При этом читать его вывод в терминале неудобно. На такие случаи есть команда less
— она открывает файл (или переданный в неё вывод другой команды) в режиме чтения:
less example.com
В режиме чтения less
можно перемещаться, искать текст и многое другое. Все командные последовательности и горячие клавиши можно вывести с помощью параметра --help
:
less --help
Для выхода из режима чтения введите q и нажмите Enter.
Удаление
Для удаления файлов используется команда rm
. Она крайне опасна — неправильное применение грозит удалением всего содержимого сервера. Поэтому, как говорится, семь раз отмерь, один раз отрежь: категорически важно перепроверять путь, который вы указываете для удаления.
Самая простая версия rm
удалит файл с предварительным подтверждением — для этого потребуется ввести y и нажать Enter:
rm new-file.txt
Для полного же уничтожения всего и вся к команде добавляются параметры -rf
. Первый отвечает за рекурсивное удаление данных (т.е. удаление вложенных файлов и папок), второй позволяет отключить подтверждение при удалении. Например, следующая команда удалит папку photos
, размещённую в папке docs
, и всё её содержимое:
rm -rf docs/photos
Для шуток над неопытными администраторами им под тем или иным предлогом предлагают выполнить команду rm -rf [/]
(без квадратных скобок). Она удаляет всё содержимое сервера от корня. Результат — все данные безвозвратно теряются, а сервер перестаёт работать.
Скачивание и загрузка
Для передачи файлов на сервер и с сервера есть много способов. Самые простые — использование wget
, curl
или scp
.
-
wget
позволяет скачивать данные на сервер. Он поддерживает HTTP, HTTPS и FTP протоколы.wget [как скачать] [откуда скачать]
Скачать файл по ссылке в вашу текущую рабочую директорию можно с помощью команды:
wget https://ru.wordpress.org/latest-ru_RU.tar.gz
С помощью параметра
-P
можно указать путь, куда нужно сохранить скачиваемый файл:wget -P /var/www/example.com https://ru.wordpress.org/latest-ru_RU.tar.gz
Полный список параметров
wget
можно посмотреть в справочной информации:man wget
-
curl
используется как для скачивания файлов на ваш сервер, так и для передачи данных с него на другие серверы / хранилища. Он универсальнееwget
благодаря огромному количеству поддерживаемых протоколов: FTP, HTTP, HTTPS, IMAP, POP3, SCP, SFTP, SMB, SMTP, Telnet и др.curl [как скачать] [откуда скачать / куда загрузить]
В современных дистрибутивах
curl
установлен по умолчанию. При необходимости установить его вручную можно следующим образом:- Ubuntu и Debian:
apt -y install curl - CentOS:
yum -y install curl
Для работы с
curl
нужно знать название и расположение файлов, которые необходимо скачать/загрузить. Например, так будет выглядеть команда на скачивание файла по ссылке:curl -O https://ru.wordpress.org/latest-ru_RU.tar.gz
В примере мы скачиваем архив
latest-ru_RU.tar.gz
по ссылке и сохраняем его в текущую рабочую директорию с таким же именем — за это отвечает ключ-O
. Если использовать опцию-o
, можно задать своё имя (wp.tar.gz
) для сохраняемого файла:curl -o wp.tar.gz https://ru.wordpress.org/latest-ru_RU.tar.gz
Если нам нужно загрузить файл c нашего сервера на другой, используется следующая конструкция:
curl -T filename.txt https://example.com/downloads/filename.txt
Здесь файл
filename.txt
из текущей рабочей директории загружается на сайтexample.com
в папкуdownloads/
и сохраняется с именемfilename.txt
. Пример подразумевает, что у нас есть права на запись в указанный каталог.Остальные возможности
curl
можно узнать в справочной информации:man curl
- Ubuntu и Debian:
-
Утилита
scp
позволяет копировать файлы между двумя серверами, используя протокол SSH.scp [где взять файлы] [куда их загрузить]
Например, для передачи файла
filename.txt
с нашего сервера на удалённый сервер1.2.3.4
в папкуnew-documents
пользователяusername
можно использовать следующую команду:scp ~/documents/filename.txt username@1.2.3.4:/home/username/new-documents
В процессе система запросит у нас пароль пользователя
username
для подключения к удалённому серверу. После авторизации файл будет скопирован на целевой сервер в указанную папку.Чтобы скачать файл с удалённого сервера, достаточно немного видоизменить нашу команду:
scp username@1.2.3.4:/home/username/documents/filename.txt ~/new-documents/
Здесь мы в качестве источника для получения копии файла указали удалённый сервер, а в качестве цели для загрузки копии — папку на текущем сервере.
С помощью
scp
аналогичным образом можно копировать данные между двумя удалёнными серверами:scp username1@1.2.3.4:/home/username1/documents/filename.txt username2@2.3.4.5:/home/username2/new-documents
Запуск исполняемых bash-скриптов
Чтобы запустить скрипт script.sh
на сервере, нужно выполнить два шага:
-
Настроить права на запуск файла для пользователей:
chmod +x ./script.sh
-
Запустить скрипт. Если вы находитесь в той же директории, где лежит скрипт, достаточно вызвать его по имени:
./script.sh
В некоторых случаях нужно использовать команду
sh
либо указать путь к исполняемому файлу командной оболочки:sh ./script.sh
либо
/bin/bash ./script.sh
Если вы находитесь в другой директории, для запуска нужно указать полный путь к скрипту.
Чтобы иметь возможность запускать скрипт из любого места на сервере одной простой командой, можно создать для него алиас — короткую команду (псевдоним), которая будет ассоциироваться системой с полным вызовом скрипта.
Весь список существующих алиасов системы можно вывести с помощью команды alias
:
Создать свой постоянный алиас можно с помощью файла .bashrc
, размещённого в домашнем каталоге вашего пользователя. Нужно открыть его для редактирования:
vi ~/.bashrc
В соответствующем разделе нужно добавить ваш алиас в следующем формате:
alias [короткая команда]='[исходная команда]'
Например, если нам потребуется создать псевдоним для скрипта выше, настройки будут выглядеть так:
alias myScript='sh /путь/к/скрипту/script.sh'
Чтобы после добавления алиас сразу стал доступен, предварительно нужно обновить командную оболочку:
source ~/.bashrc
После этого вы сможете вызывать ваш скрипт с помощью короткой команды.
Скрипт можно добавить в расписание планировщика cron
, чтобы он запускался регулярно.
Как настроить cron по ssh
Переименование, перемещение и копирование файлов и папок
Скопировать файл в терминале можно с помощью команды:
cp [что копируем] [куда копируем]
C её помощью можно, к примеру, создать копию конфигурационного файла, который вы хотите изменить. Здесь мы создаём копию конфигурационного файла nginx.conf
cp nginx.conf nginx.conf.copy
Папки копируются аналогично. При необходимости скопировать каталог со всем содержимым (рекурсивно) можно добавить к команде ключ -r
:
cp -r /docs /files
Здесь мы создаём копию папки docs
со всем её содержимым с именем files
.
Переместить или переименовать файл также просто:
mv [что переместить/переименовать] [куда переместить/как назвать]
Например, следующая команда переместит файл file.txt
в папку new
:
mv file.txt docs/new
Переименовать файл не сложнее:
mv /docs/new/file.txt /docs/new/todolist.txt
В этом примере файл file.txt
переименовывается в todolist.txt
Аналогично можно перемещать и переименовывать директории.
Теперь, когда вы можете перемещаться по серверу и работать с файлами и папками, самое время познакомиться с файловой структурой Linux-систем.