常用的Linux命令
1. tar
将文件全部打包成tar包 :
tar -cvf log.tar log2012.log 仅打包,不压缩! tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩 tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩
将tar包解压缩 :
tar -zxvf /opt/soft/test/log.tar.gz
2.grep
在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:
grep match_pattern file_name
grep "match_pattern" file_name
在多个文件中查找:
grep "match_pattern" file_1 file_2 file_3 ...
输出除之外的所有行 -v 选项:
grep -v "match_pattern" file_name
标记匹配颜色 --color=auto 选项:
grep "match_pattern" file_name --color=auto
使用正则表达式 -E 选项:
grep -E "[1-9]+"
列出当前目录及子目录下所有文件和文件夹
find .
在/home
目录下查找以.txt结尾的文件名
find /home -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)
或
find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件
find /usr/ -path "*local*"
基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
5. scp
6. awk
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 单引号 或 双引号 中,例如:
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awk的工作原理
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
第一步:执行
BEGIN{ commands }
语句块中的语句;第二步:从文件或标准输入(stdin)读取一行,然后执行
pattern{ commands }
语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。第三步:当读至输入流末尾时,执行
END{ commands }
语句块。*BEGIN语句块** 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
*END语句块** 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
*pattern语句块** 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行
{ print }
,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。*示例**
echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
Start
A line 1
A line 2
End
当使用不带参数的print
时,它就打印当前行,当print
的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如:
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1 v2 v3
双引号拼接使用:
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }'
v1=v2=v3
{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。
是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。
vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。
vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?字符串:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
8.export
$ export | grep ORCALE
declare -x ORACLE_BASE="/u01/app/oracle"
declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0"
declare -x ORACLE_SID="med"
declare -x ORACLE_TERM="xterm"
$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0
9. ls
10. pwd
11. cd
例子
cd # 进入用户主目录;
cd / # 进入根目录
cd ~ # 进入用户主目录;
cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. # 返回上两级目录;
cd !$ # 把上个命令的参数作为cd参数使用。
12. gzip
参数
文件列表:指定要压缩的文件列表。
实例
把test6目录下的每个文件压缩成.gz文件
gzip *
把上例中每个压缩的文件解压,并列出详细的信息
gzip -dv *
详细显示例1中每个压缩的文件的信息,并不解压
gzip -l *
压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz
gzip -r log.tar
递归的压缩目录
gzip -rv test6
这样,所有test下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
递归地解压目录
gzip -dr test6
13. bzip2
$ bzip2 test.txt
bzip2 -d test.txt.bz2
14. uzip
$ unzip test.zip
$ unzip -l jasper.zip
Archive: jasper.zip
Length Date Time Name
-------- ---- ---- ----
40995 11-30-98 23:50 META-INF/MANIFEST.MF
32169 08-25-98 21:07 classes_
15964 08-25-98 21:07 classes_names
10542 08-25-98 21:07 classes_ncomp
15. shutdown
$ shutdown -h now
$ shutdown -h +10
$ shutdown -r now
$ shutdown -Fr now
替换文本中的字符串:
sed 's/book/books/' file
直接编辑文件 选项-i ,会匹配file文件中每一行的所有book替换为books:
sed -i 's/book/books/g' file
使用后缀 /g 标记会替换每一行中的所有匹配:
sed 's/book/books/g' file
删除操作:d命令
删除空白行:
sed '/^$/d' file
删除文件的第2行:
sed '2d' file
17. crontab
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command 顺序:分 时 日 月 周
实例
每1分钟执行一次command
* * * * * command
每小时的第3和第15分钟执行
3,15 * * * * command
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
18. service
$ service ssh status
$ service --status-all
$ service ssh restart
19. ps
#1.列出仅与自身环境有关的进程,最上层的父进程是允许该ps命令的bash而没有扩展到init进程中去 ps -l #2.列出系统所有进程的信息 ps aux ps -ef #aux会截断COMMAND列,-ef不会。aux是BSD风格,-ef是System V风格 ps axjf #以"进程树"的方式显示所有进程 ps -lA #输出格式同ps -l
20. free
$ free
total used free shared buffers cached
Mem: 3566408 1580220 1986188 0 203988 902960
-/+ buffers/cache: 473272 3093136
Swap: 4000176 0 4000176
$ free -g
total used free shared buffers cached
Mem: 3 1 1 0 0 0
-/+ buffers/cache: 0 2
Swap: 3 0 3
ramesh@ramesh-laptop:~$ free -t
total used free shared buffers cached
Mem: 3566408 1592148 1974260 0 204260 912556
-/+ buffers/cache: 475332 3091076
Swap: 4000176 0 4000176
Total: 7566584 1592148 5974436
21. top
Current Sort Field: P for window 1:Def
Select sort field via field letter, type any other key to return
a: PID = Process Id v: nDRT = Dirty Pages count
d: UID = User Id y: WCHAN = Sleeping in Function
e: USER = User Name z: Flags = Task Flags
........
$ top -u oracle
22. df
df -k
将以字节为单位输出磁盘的使用量$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 29530400 3233104 24797232 12% /
/dev/sda2 120367992 50171596 64082060 44% /home
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s2 232Gi 84Gi 148Gi 37% 21998562 38864868 36% /
devfs 187Ki 187Ki 0Bi 100% 648 0 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
/dev/disk0s4 466Gi 45Gi 421Gi 10% 112774 440997174 0% /Volumes/BOOTCAMP
//app@izenesoft.cn/public 2.7Ti 1.3Ti 1.4Ti 48% 0 18446744073709551615 0% /Volumes/public
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 29530400 3233120 24797216 12% /
/dev/sda2 ext4 120367992 50171596 64082060 44% /home
23. kill
ps -ef
查找某个进程得到它的进程号,然后再使用kill -9 进程号
终止该进程。你还可以使用killall、pkill、xkill来终止进程$ ps -ef | grep vim
ramesh 7243 7222 9 22:43 pts/2 00:00:00 vim
$ kill -9 7243
24. rm
rm 命令删除文件
# rm 文件1 文件2 ...
rm testfile.txt
rm 命令删除目录
rm -r [目录名称] -r 表示递归地删除目录下的所有文件和目录。 -f 表示强制删除
rm -rf testdir
rm -r testdir
删除操作前有确认提示
rm -i [文件/目录]
25. cp
$ cp -p file1 file2
$ cp -i file1 file2
将目录/usr/men
下的所有文件及其子目录复制到目录/usr/zh
中$ cp -r /usr/men /usr/zh
/usr/men
下的所有文件及其子目录复制到目录/usr/zh
中26. mv
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
- 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
- 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
$ mv -i file1 file2
$ mv -v file1 file2
27. cat
$ cat file1 file2
$ cat -n /etc/logrotate.conf
1 /var/log/btmp {
2 missingok
3 monthly
4 create 0660 root utmp
5 rotate 1
6 }
28. mount
# mkdir /u01
# mount /dev/sdb1 /u01
/dev/sdb1 /u01 ext2 defaults 0 2
29. chmod
linux文件的用户权限说明:
# 查看当前目录(包含隐藏文件)的长格式。
ls -la
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# 第1位如果是d则代表目录,是-则代表普通文件。
# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
# 第2到4位代表当前用户的权限。
# 第5到7位代表组用户的权限。
# 第8到10位代表其他用户的权限。
# 添加组用户的写权限。
chmod g+w ./test.log
# 删除其他用户的所有权限。
chmod o= ./test.log
# 使得所有用户都没有写权限。
chmod a-w ./test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log
# 等价的八进制数表示:
chmod 754 ./test.log
$ chown oracle:dba dbora.sh
$ chown -R oracle:dba /home/oracle
31. passwd
$ passwd
# passwd USERNAME
# passwd -d USERNAME
32. mkdir
$ mkdir ~/temp
$ mkdir -p dir1/dir2/dir3/dir4/
33. ifconfig
$ ifconfig -a
$ ifconfig eth0 up
$ ifconfig eth0 down
$ uname -a
Linux john-laptop 2.6.32-24-generic #41-Ubuntu SMP Thu Aug 19 01:12:52 UTC 2010 i686 GNU/Linux
35. whereis
用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
当你想查找某个可执行程序的位置,但这个程序又不在whereis的默认目录下,你可以使用-B选项,并指定目录作为这个选项的参数。下面的命令在/tmp目录下查找lsmk命令$ whereis -u -B /tmp -f lsmk
lsmk: /tmp/lsmk
36. whatis
$ whatis ls
ls (1) - list directory contents
$ whatis ifconfig
ifconfig (8) - configure a network interface
37. locate
实例1:查找和pwd相关的所有文件
root ~ # locate pwd
/bin/pwd
/etc/.pwd.lock
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc
/usr/lib/syslinux/pwd.c32
/usr/share/help/C/empathy/irc-join-pwd.page
/usr/share/help/ca/empathy/irc-join-pwd.page
/usr/share/help/cs/empathy/irc-join-pwd.page
/usr/share/help/de/empathy/irc-join-pwd.page
/usr/share/help/el/empathy/irc-join-pwd.page
实例2: 搜索etc目录下所有以sh开头的文件
root ~ # locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
实例3:搜索etc目录下,所有以m开头的文件
root ~ # locate /etc/m
/etc/magic
/etc/magic.mime
/etc/mailcap
/etc/mailcap.order
/etc/manpath.config
/etc/mate-settings-daemon
38. man
$ man crontab
$ man SECTION-NUMBER commandname
- 用户命令
- 系统调用
- c库函数
- 设备与网络接口
- 文件格式
- 游戏与屏保
- 环境、表、宏
- 系统管理员命令和后台运行命令
whatis crontab
,你可以看到crontab有两个命令类型1和5,所以我们可以通过下面的命令查看命令类型5的man页面$ whatis crontab
crontab (1) - maintain crontab files for individual users (V3)
crontab (5) - tables for driving cron
$ man 5 crontab
39. tail
$ tail filename.txt
$ tail -n N filename.txt
$ tail -f log-file
40. less
$ less huge-log-file.log
CTRL+F – forward one window
CTRL+B – backward one window
41. su
$ su - USERNAME
[john@dev-server]$ su - raj -c 'ls'
[john@dev-server]$
$ su -s 'SHELLNAME' USERNAME
42. mysql
$ mysql -u root -p -h 192.168.1.2
$ mysql -u root -p
43. ping
$ ping -c 5 gmail.com
44. date
# date -s "01/31/2010 23:59:53"
# hwclock –systohc
# hwclock --systohc –utc
45. wget
$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
$ wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701
46. curf
使用选项-O
将下载的数据写入到文件,必须使用文件的绝对地址:
curl http://example.com/text.iso --silent -O
选项-o
将下载数据写入到指定名称的文件中,并使用--progress
显示进度条:
curl http://example.com/test.iso -o filename.iso --progress
######################################### 100.0%
不输出错误和进度信息
-s
参数将不输出错误和进度信息。
curl -s https://www.example.com # 上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。
47. touch
touch ex2
在当前目录下建立一个空文件ex2,然后,利用ls -l
命令可以发现文件ex2的大小为0,表示它是空文件。
48. ln
符号链接类似 Windows 中的快捷方式,通过利用符号链接,我在项目里可以将一些程序内部的配置提到项目目录外面进行修改和管理
$ touch a.txt
$ ll
total 0
-rw-r--r-- 1 kilo staff 0B Apr 5 23:22 a.txt
$ ln -s a.txt a.link.txt
$ ll
total 0
lrwxr-xr-x 1 kilo staff 5B Apr 5 23:23 a.link.txt -> a.txt
-rw-r--r-- 1 kilo staff 0B Apr 5 23:22 a.txt
ln 命令的 -s 指的就是创建 create symbolic links instead of hard links,不加就意味着创建 硬链接。
硬连接是 指向文件的指针,而符号链接是 指向文件路径的指针。
由于硬连接有诸如不能关联目录,不能关联所在文件系统之外的文件的局限性,所以一般使用符号链接而不是硬连接
49. 重定向
不得不承认,这可能是 Linux 命令行里最酷的东西
>>
追加标准输出2>
重定向标准错误&>
重定向标准输出和标准错误2> /dev/null
丢弃(忽略)错误输出
$ ll / ./err >> stdout.txt 2>> stderr.txt
$ ll
total 16
-rw-r--r-- 1 kilo staff 37B Apr 5 23:48 stderr.txt
-rw-r--r-- 1 kilo staff 947B Apr 5 23:48 stdout.txt
50. ufw
ubuntu默认提供了一个基于iptable之上的防火墙工具ufw
sudo ufw enable
sudo ufw default deny
运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。
sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口
sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口
sudo ufw allow 53 允许外部访问53端口(tcp/udp)
sudo ufw deny smtp 禁止外部访问smtp服务
sudo ufw delete allow smtp 删除上面建立的某条规则
sudo ufw status 查看防火墙状态
51. firewall-cmd
Linux上的防火墙软件,跟iptables差不多的工具
firewall-cmd --list-all-zones #查看所有的zone信息
firewall-cmd --get-default-zone #查看默认zone是哪一个
firewall-cmd --add-service=http #暂时开放http
firewall-cmd --permanent --add-service=http #永久开放http
firewall-cmd --zone=public --add-port=80/tcp --permanent #在public中永久开放80端口
firewall-cmd --permanent --zone=public --remove-service=ssh #从public zone中移除服务
firewall-cmd --reload #重新加载配置
52. systemctl
# 显示系统状态
systemctl status # 显示单个 Unit 的状态
systemctl status bluetooth.service
# 立即启动一个服务
sudo systemctl start apache.service
# 立即停止一个服务
sudo systemctl stop apache.service
# 重启一个服务
sudo systemctl restart apache.service
# 列出所有配置文件
systemctl list-unit-files
# 列出指定类型的配置文件
systemctl list-unit-files --type=service
一旦修改配置文件,就要重新加载配置文件,然后重新启动,否则修改不会生效
sudo systemctl daemon-reload
sudo systemctl restart httpd.service
评论
发表评论