What is Windows’ equivalent of the «which» command in Unix? Is there an equivalent PowerShell command?
In Linux, we have the «which» command to find out the path of an executable.
What is its Windows equivalent? Is there any PowerShell command for doing that?
6 Answers 6
Newer versions of Windows (I think Windows 2003 and up) have the where command:
C:\>where ping C:\Windows\System32\PING.EXE
And for PowerShell, explicitly add the .exe suffix:
PS C:\>where.exe ping C:\Windows\System32\PING.EXE
where /r c:\ fileName adding the /r c:\ allowed me to perform a recursive search starting at the root of the C drive using Windows 7 Professional it seems to not be in access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
in Powershell you should say where.exe ping because where is by default aliased to Where-Object cmdlet which is completely different story
Yes, Get-Command will find all commands including executables:
If you want to limit the commands to just executables:
PS\> Get-Command -CommandType Application
Will find all exes in your path. There is an alias for interactive use:
PS\> gcm net* -CommandType Application
To get the path of an executable, you can use the Path property of the returned object. For example:
PS\> (Get-Command notepad.exe).Path
For more info, run man Get-Command -full .
where.exe explicitly rather than where works for me in PowerShell:
PS C:\Users\birdc> where ping PS C:\Users\birdc> where.exe ping C:\Windows\System32\PING.EXE
In addition to user10404, the help command will work on aliases, so you can use the same command name (gcm) for help and interactive use:
help gcm -Parameter * # or man gcm -Par *
If you want to make it short, create a one line which.cmd file with the content
This will search the first parameter (%1) fed to the script and display the full path of found file. Good place to put this script in windows 10 is %LOCALAPPDATA%\Microsoft\WindowsApps\which.cmd
And you get your which command in path.
c:\>which cmd.exe c:\>echo C:\Windows\System32\cmd.exe C:\Windows\System32\cmd.exe
Сответствие консольных команд Windows и Linux.
При переходе с Windows на Linux и наоборот, для тех, кто знаком с командной строкой, может пригодиться небольшая справка по соответствию консольных команд этих операционных систем. Естественно, полного соответствия, за редким исключением, не бывает, и в приведенной таблице собраны команды, идентичные по результатам выполнения или функционально близкие.
Соответствие команд CMD Windows командам Linux
Строчные и заглавные буквы для команд командной строки Windows воспринимаются одинаково, ECHO и echo — будет интерпретировано как одна и та же команда. При работе в командной строке Linux соблюдение регистра символов обязательно.
И в Linux, и в Windows используются специальные символы (иногда их еще называют метасимволами), которые интерпретируются оболочкой пользователя как определенные команды или данные.
Наиболее распространенные спецсимволы CMD Windows и оболочки bash Linux
Описание | Спецсимвол CMD Windows | Спецсимвол Linux |
Объединение команд | | и & (|| и &&) | | и & (|| и &&) |
Выполнение задачи в фоновом режиме | & | |
Подстановочные значения в строках | * и ? | * и ? |
Набор символов | [ ] | |
Отмена спецсимвола | ^ | \ |
Перенаправление ввода | или >> | > или >> |
Значение переменной | %переменная% | $переменная |
Домашний каталог | ~ | |
Текущий каталог | . | . |
Родительский каталог | .. | .. |
Комментарий | # |
В Linux набор спецсимволов зависит от используемой оболочки, и в любой из них спецсимволы используются чаще и их набор больше, чем в командной строке Windows. При чем, даже если спецсимволы одинаковы, их применение может приводить к разным результатам. Например, шаблоны имен файлов, задаваемые с помощью символа звездочки:
*.* — и в Linux, и в Windows такая конструкция означает – ”любые имена файлов с любым расширением”.
Аналогичным образом используется и знак вопроса, означающий ”любой одиночный символ” и в Linux, и в Windows.
test?.* — все файлы, имена которых начинаются со строки test и имеющие после нее любой символ. Однако особенности реализации командных интерпретаторов, могут приводить все же к разным результатам использования вроде бы аналогичных конструкций:
ls . * — эта команда Linux отобразит список файлов с длиной имени в 5 символов.
dir . * — эта команда Windows отобразит список файлов с длиной имени в 5 символов и меньше.
При использовании шаблона . txt в Windows отобразятся все файлы с именами длиной в 5 символов и менее, с расширением и .txt и .TXT. В Linux – с именами в 5 символов, и только те файлы, у которых расширение не содержит заглавные буквы.
Использование команд Linux в среде Windows.
С появлением в Windows 10 Подсистемы Windows для Linux (WSL – Windows Subsystem for Linux) пользователь получил возможность использовать в командной строке Windows команды оболочки Linux, появилась возможность создавать сценарии, в которых будут использоваться и команды CMD Windows, и команды оболочки Linux. Например, командный файл для вывода списка определенных файлов каталога C:\Windows\System32:
REM вывод списка файлов с 3-символьными именами и
REM расширением .exe средствами Linux
wsl ls /mnt/c/windows/system32/. exe
REM вывод списка файлов с 3-символьными именами и
REM расширением .exe средствами Windows
По умолчанию, Подсистема Windows для Linux не включена. Как ее включить и настроить – в отдельной статье, ссылка на которую приведена в конце страницы.
После установки и настройки WSL, в командных файлах CMD Windows можно использовать утилиту wsl.exe , обеспечивающую конфигурирование и выполнение команд Linux.
wsl ls /mnt/c/windows/system32/. exe — команда wsl, обеспечивающая исполнение в обычном bat-файле линуксовой команды ls /mnt/c/windows/system32/. exe .
После установки подсистемы WSL, кроме утилиты wsl.exe в среде Windows будут присутствовать еще и утилиты wslconfig.exe и bash.exe обеспечивающие максимальную совместимость Windows и Linux.
How does the Windows command type work
So I think «cat» in Linux actually concatenates files as 2 chunks of memory(hopefully). My concern is the «type» command in Windows, judging by the name I believe it may read and write the files, to a new file. I don’t know how much time this will take if it does this. This is how its used (just like cat it combines both files to the out file):
To combine two files, you may also use copy file_name1.txt + file_name2.txt out.txt ; to append to the output file, simply do copy out.txt + file_name1.txt + file_name2.txt out.txt .
Stack Overflow is a site for programming and development questions. This question appears to be off-topic because it is not about programming or development. See What topics can I ask about here in the Help Center. Perhaps Super User would be a better place to ask.
2 Answers 2
No. cat in Linux works by reading all the files in the command line and writing them in the standard output. If the command line is empty it will read the standard input.
It reads file1 and writes it to stdout . When finished, it reads file2 and writes it to stdout too. But, ah!, the shell has redirected stdout to append to file3 , so that is where both files are written.
And type in Windows works basically the same, except that the command line cannot be empty (for that you can use copy CON ).
Now, cat command in Linux may have a few optimizations to avoid too many copies of the data in memory, such as splice(2) but that should be viewed as an optional optimization.
UNIX For DOS Users
The following table shows a comparison between DOS (COMMAND.COM and MS/Windows NT CMD.EXE shell commands) and the equivalent Linux/Unix or Bash shell commands.
Related YoLinux Tutorials:
export variable=value
echo $variable
DOS Descriptor/Operator | UNIX or Bash Descriptor/Operator | Description |
---|---|---|
\ | / | Directory path delimiter |
.\ | ./ | Current directory |
..\ | ../ | Parent directory |
ctrl-z | ctrl-d | End of file/close shell |
ctrl-c | ctrl-c | Interrupt/process break |
* | * | file name wild card |
? | ? | Single character wild card |
%VAR% | $VAR | Variable prefix |
%1 %2 %3 | $1 $2 $3 | First, second and third shell command line arguments. |
/ | — | Command line option flag prefix |
| | | | Pipe |
> | > | stdout redirection |
>> | >> | stdout redirection overwrite |
stdin redirection |
IF NOT EXIST C:\filename
if [ -e /dir/filename ];
then
if [ ! -e /dir/filename ];
then
FOR %%fff IN (C:\dir\*.*)
DO echo %%fff
for ffiillee in lliisstt;
do . ;
done
for (( expr1; expr2; expr3; ))
do . ;
done
The following are bash shell aliases which can be added to the system profile or the user’s personal profile ($HOME/.bashrc) to correct and help DOS users on Linux.
alias dir="echo 'Use the command: ls -lF'" alias tree="echo 'Use the command: ls -R'" alias del="echo 'Use the command: rm -iv'" alias move="echo 'Use the command: mv -iv'" alias rename="echo 'Use the command: mv -iv'" alias copy="echo 'Use the command: cp -piv'" alias type="echo 'Use the command: cat'" alias cls="echo 'Use the command: clear'" alias mem="echo 'Use the command: free'" alias ver="echo 'Use the command: uname -a'" alias A:="echo 'Use the command: mdir a:'" alias a:="A:" alias C:="echo 'No C drive in Linux. Go to your home directory with the command: cd'" alias c:="C:"
DOS Device | Linux Device | Description |
---|---|---|
NUL | /dev/null | Send into nothingness |
CON | stdin | stdin from console |
PRN LPT1 | /dev/lp0 | First printer device |
COM1 | /dev/ttyS0 | Firsst serial port |
MS/Windows Command | Linux Command | Description |
---|---|---|
C:\WINDOWS\cmd | gnome-terminal konsole | Command Text Terminal |
C:\WINDOWS\explorer | nautilus —no-desktop | File browser |
c:\Program Files\Internet Explorer\iexplore | firefox mozilla | Web browser |
C:\WINDOWS\notepad C:\Program Files\Windows NT\Accessories\wordpad | gedit | Text editor |
C:\Program Files\Microsoft Office\Office10\winword excel powerpnt | oowriter oocalc ooimpress | MS/Office and Open Office suites (ooffice) |
C:\Program Files\Adobe\Acrobat 7.0\Reader\acrord32 | acroread | Adobe PDF viewer |
mspaint | tuxpaint xfig gimp | Graphics and painting program |
C:\Program Files\WinZip\winzip32 | file-roller | File compress / decompress / pack / unpack |
taskmgr | ksysguard qps gnome-system-monitor xosview | Process and system load monitor |