每个程序员都应该知道的最强大的Unix命令或脚本示例
有许多事情是所有程序员都应该知道的,但我对我们都应该知道的Unix/Linux命令特别感兴趣。用于完成我们在某些时候可能遇到的任务,如重构、报告、网络更新等 我之所以感到好奇,是因为我在攻读学位时曾在一家软件公司担任软件测试人员,我注意到所有开发人员(开发Windows软件的人)都有两台电脑 在他们的左边是他们的Windows XP开发机器,右边是一个Linux机箱。我想是Ubuntu。无论如何,他们告诉我,他们使用它是因为它提供了强大的unix操作,而Windows在开发过程中无法做到这一点 这让我很好奇,作为一名软件工程师,您认为在Unix/Linux操作系统上可以执行哪些最强大的脚本/命令/用途,每个程序员都应该知道这些脚本/命令/用途,以解决可能与编写代码无关的实际任务 我们都知道sed、awk和grep做什么。我对一些实际的Unix/Linux脚本片段感兴趣,它们为您解决了一个难题,这样其他程序员可能会从中受益。请提供你的故事和来源 我确信有很多这样的例子,人们会保存在他们的“脚本”文件夹中 更新:人们似乎误解了这个问题。我不是要问单个unix命令的名称,而是要问为您解决了问题的unix代码片段 来自社区的最佳答案每个程序员都应该知道的最强大的Unix命令或脚本示例,unix,command-line,scripting,Unix,Command Line,Scripting,有许多事情是所有程序员都应该知道的,但我对我们都应该知道的Unix/Linux命令特别感兴趣。用于完成我们在某些时候可能遇到的任务,如重构、报告、网络更新等 我之所以感到好奇,是因为我在攻读学位时曾在一家软件公司担任软件测试人员,我注意到所有开发人员(开发Windows软件的人)都有两台电脑 在他们的左边是他们的Windows XP开发机器,右边是一个Linux机箱。我想是Ubuntu。无论如何,他们告诉我,他们使用它是因为它提供了强大的unix操作,而Windows在开发过程中无法做到这一点
遍历目录树并打印出与正则表达式匹配的任何文件的路径:
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
调用默认编辑器(Nano/ViM)
(适用于大多数Unix系统,包括Mac OS X)
默认编辑器是您的
“编辑器”“环境变量为
开始。ie:导出
编辑器=/usr/bin/pico哪个是
位于Mac OS下的~/.profile
十,
列出所有正在运行的网络连接(包括它们所属的应用)
清除终端的搜索历史记录(我的另一个最爱)
您的shell是您拥有的最强大的工具
- 格雷普
- awk
- 塞德
- perl
- 发现
事实上,在上有一组非常有用的*nix命令端口。如果您有*nix背景,现在使用windows,您可能应该检查它们。在解决出现故障的linux框上的问题时,到目前为止,我键入的最常见的键序列是您可以用它做任何事情
gcc如果你随身携带一份备忘,你会做得更好……没有一个命令可以称为最有用的。如果一个特别的命令完成了你的工作,它将非常有用和强大 编辑你想要功能强大的shell脚本吗?shell脚本是程序。掌握好基本知识,根据单个命令构建,你就会得到所谓的功能强大的脚本。满足你需要的脚本功能强大,否则就没用了。如果你提到一个问题并询问如何解决它,那就更好了。这种工具(grepfind、awk、sed)来自于它们的多功能性,因此给出一个特定的案例似乎是毫无用处的 man是最强大的comand,因为这样您就可以理解您键入的内容,而不是从堆栈溢出中盲目复制粘贴 示例是受欢迎的,但是已经有了tis的主题。 我最常用的:
grep something_to_find * -R
可以用ack和
find | xargs
将结果导入xargs的find功能非常强大我发现它是各种shell脚本编写方法的优秀资源
例子
普通的
深奥的
顺便说一句,但是你可以在windows上使用powershell。它非常强大,可以做很多*nix类型的事情。一个很酷的区别是,你使用的是.net对象,而不是文本,如果你使用管道进行过滤等,这可能会很有用
或者,如果您不需要.NET集成,请在Windows box上安装。(并将其目录添加到Windows路径中。)有些人可能不同意我的观点,但是,这里有一些值得讨论的内容。如果您学会了gawk(其他变体)总之,你可以跳过学习和使用grep/sed/wc/cut/paste以及其他一些*nix工具。你所需要的只是一个好工具来完成许多组合的工作。某种方法来搜索(多个)格式不正确的日志文件,其中搜索字符串可以在“孤立”日志中找到下一行。例如,要在搜索id=110375时同时显示第一行以及连接的第三行和第四行:
[2008-11-08 07:07:01] [INFO] ...; id = 110375; ...
[2008-11-08 07:07:02] [INFO] ...; id = 238998; ...
[2008-11-08 07:07:03] [ERROR] ... caught exception
...; id = 110375; ...
[2008-11-08 07:07:05] [INFO] ...; id = 800612; ...
我想一定有比下面的连接更好的解决方案(是的,添加它们…!)
find | xargs
# Run the last command as root
sudo !!
# Rapidly invoke an editor to write a long, complex, or tricky command
ctrl-x ctrl-e
# Execute a command at a given time
echo "ls -l" | at midnight
# output your microphone to a remote computer's speaker
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
[2008-11-08 07:07:01] [INFO] ...; id = 110375; ...
[2008-11-08 07:07:02] [INFO] ...; id = 238998; ...
[2008-11-08 07:07:03] [ERROR] ... caught exception
...; id = 110375; ...
[2008-11-08 07:07:05] [INFO] ...; id = 800612; ...
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: `basename $0` id"
echo "Searches all myproject's logs for the given id"
exit -1
fi
# When finding "caught exception" then append the next line into the pattern
# space bij using "N", and next replace the newline with a colon and a space
# to ensure a single line starting with a timestamp, to allow for sorting
# the output of multiple files:
ls -rt /var/www/rails/myproject/shared/log/production.* \
| xargs cat | sed '/caught exception$/N;s/\n/: /g' \
| grep "id = $1" | sort
[2008-11-08 07:07:01] [INFO] ...; id = 110375; ...
[2008-11-08 07:07:03] [ERROR] ... caught exception: ...; id = 110375; ...
for card in `seq 1 8` ;do
for ts in `seq 1 31` ; do
echo $card $ts >>/etc/tuni.cfg;
done
done
for table in `echo show tables | mysql quotiadb |grep ^tmp` ; do
echo drop table $table
done
lsof -i -nP
mkdir ~/aewseomeDirectory
^aew^awe
#!/bin/bash
find . -type f -name "* *" | while read file
do
mv "$file" "${file// /_}"
done
export CUPSPID=`ps -ef | grep cups | grep -v grep | awk '{print $2;}'`
#!/bin/bash
cd ~
echo Matched...
find /home/musicuser/Music/ -type f -iname "*$1*" -iname "*$2*" -exec echo {} \;
echo Sleeping 5 seconds
sleep 5
find /home/musicuser/Music/ -type f -iname "*$1*" -iname "*$2*" -exec mplayer {} \;
exit
export MYLIST=`ldd amule | awk ' { print $3; }'`; for a in $MYLIST; do cksum $a; done
#Convert all input to upper case
ls | tr a-z A-Z
#take the output and put into a single line
ls | tr "\n" " "
#get rid of all numbers
ls -lt | tr -d 0-9
NP=`cat /proc/cpuinfo | grep processor | wc -l`
#your loop here
if [ `jobs | wc -l` -gt $NP ];
then
wait
fi
launch_your_task_in_background&
#finish your loop here
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
Ctrl+x Ctrl+e
lsof -i -nP
history -c
find -iname '*weservice*'|xargs -I {} service {} restart
find -iname '*.java'|xargs grep 'class Pool'
cat searches.txt| xargs -I {} -d, -n 1 grep -r {}
:() { :|: &} ;:
sudo !!
netstat -nlp
red='\033[1;31m'
green='\033[1;32m'
none='\033[0m'
if [ $(id -u) -eq 0 ];
then
PS1="[\[$red\]\u\[$none\]@\H \w]$ "
else
PS1="[\[$green\]\u\[$none\]@\H \w]$ "
fi