Linux 是一个多用户多任务的操作系统,也是一款自由软件,完全兼容POSIX标准,拥有良好的用户界面,支持多种处理器架构,移植方便。Linux 中有大量常用的命令,可以方便我们快速进行操作,值得花时间去掌握。
在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;
- 在只记得部分命令关键字的场合,我们可通过man -k来搜索;
- 需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令;
- 查看命令在哪个位置,我们需要使用which;
- 而对于命令的具体参数及使用方法,我们需要用到强大的man;
简要说明命令的作用(显示命令所处的man分类页面):
$ whatis command
$ whatis -w "loca*" //正则匹配:
$ info command //更加详细的说明文档
查询命令command的说明文档:
$ man command
eg:man date
在man的帮助手册中,将帮助文档分为了9个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看;(一般我们查询bash命令,归类在1类中);man页面所属的分类标识(常用的是分类1和分类3)
- 用户可以操作的命令或者是可执行文件
- 系统核心可调用的函数与工具等
- 一些常用的函数与数据库
- 设备文件的说明
- 设置文件或者某些文件的格式
- 游戏
- 惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
- 系统管理员可用的管理条令
- 与内核有关的文件
前面说到使用whatis会显示命令所在的具体的文档类别,如下:
$ whatis printf
printf (1) - format and print data
printf (1p) - write formatted output
printf (3) - formatted output conversion
printf (3p) - print formatted output
printf [builtins] (1) - bash built-in commands, see bash(1)
我们看到printf在分类1和分类3中都有;分类1中的页面是命令操作及可执行文件的帮助;而3是常用函数库说明;如果我们想看的是C语言中printf的用法,可以指定查看分类3的帮助:
$ man 3 printf
文件创建和删除
- 创建:mkdir
- 删除:rm
- 删除非空目录:rm -rf file
- 删除日志
rm *log
- 移动:mv
- 复制:cp (复制目录:cp -r )
查看当前目录下文件个数:
$ find ./ | wc -l
目录切换,打印
- 找到文件/目录位置:cd path
- 显示当前路径: pwd
- 显示当前目录下的文件 ls
- 按时间排序,以列表的方式显示目录项 ls -lrt
查找文件或目录,下面命令
$ find ./ -name '*.o'
递归查找当前目录及子目录所有的.o文件:
find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库:
$ locate string //寻找包含有string的路径,
$ updatedb
与find不同,locate并不是实时查找。你需要更新数据库,以获得最新的文件索引信息。
查看文件:cat vi head tail more
$ cat -n // 显示时同时显示行号
$ head -10 filename // 只看前10行:
$ tail -5 filename // 显示文件倒数五行
$ diff file1 file2 // 查看两个文件间的差别
文件与目录权限修改
- 改变文件的拥有者:chown
- 改变文件读、写、执行等属性:chmod
- 递归子目录修改:chown -R user source/
- 增加脚本可执行权限:chmod +x filename
创建符号链接/硬链接:
- ln sourcefile destfile:硬连接;删除一个,将仍能找到;
- ln -s sourcefile destfile:符号链接(软链接);删除源,另一个无法使用;
ps命令
用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
ps (选项)
选项有很多,常用的如下:
- a:显示现行终端机下的所有程序,包括其他用户的程序。
- u:以用户为主的格式来显示程序状况。
- x:显示所有程序,不以终端机来区分。
top命令
可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式,此时用基于 top 的命令,可以控制显示方式。对于进程,平时我们最常想知道的就是哪些进程占用CPU最多,占用内存最多。以下两个命令就可以满足要求:
- P:根据CPU使用百分比大小进行排序。
- M:根据驻留内存大小进行排序。
- i:使top不显示任何闲置或者僵死进程。
kill命令
用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。
一般情况下,我们先用 ps 查找指定进程,然后用 kill 杀掉,如下:
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程
ipcs命令
用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
- -a:显示全部可显示的信息;
- -q:显示活动的消息队列信息;
- -m:显示活动的共享内存信息;
- -s:显示活动的信号量信息。
例如:
ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x7401833d 2654208 root 600 4 0
0x00000000 3145729 root 600 4194304 9 dest
0x7401833c 2621442 root 600 4 0
0xd201012b 3080195 root 600 1720 2
ipcrm命令
用来删除一个或更多的消息队列、信号量集或者共享内存标识。
在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof命令
能够查看这个列表对系统监测以及排错将是很有帮助的。 主要有下面这些选项:
- -a:列出打开文件存在的进程;
- -c<进程名>:列出指定进程所打开的文件;
- -d<文件号>:列出占用该文件号的进程;
- +d<目录>:列出目录下被打开的文件;
- -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
- -p<进程号>:列出指定进程号所打开的文件;
jobs命令
用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
其中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。
在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停。
fg %jobnumber # 将后台中的命令调至前台继续运行(%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid))
bg %jobnumber # 将一个在后台暂停的命令,变成继续执行。
ifconfig命令
被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
iptables命令
是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
route命令
用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。
netstat命令
用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。可以显示相关的网络信息,如接口/网卡状态(-i),路由表(-r),网络连接(-a),tcp相关选项(-t),udp相关选项(-u),按各个协议统计(-s)。例如:
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
tcpdump命令
是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。如下:
tcpdump host 210.27.48.1 # 截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump tcp port 23 host 210.27.48.1 # 获取主机210.27.48.1接收或发出的telnet包
tcpdump udp port 123 # 对本机的udp 123 端口进行监视
scp命令
可以将本地localpath指向的文件上传到远程主机的path路径,或者遍历下载path路径下的整个文件系统,到本地的localpath:
$ scp localpath ID@host:path
$ scp -r ID@site:path localpath
free命令
可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
- uname -a # 查看内核/操作系统/CPU信息
- hostname # 查看计算机名
- env # 查看环境变量
- uptime # 查看系统运行时间、用户数、负载
useradd命令
用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码,而可用userdel
删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
新建一个管理员用户admin,可以用下面命令:
useradd -u 0 -o admin
-u 因为系统用户的用户号为0,故指定用户号为0;因为系统本身存在用户号为0的系统用户,故应该用-o选项,重复使用其他用户的标识号。
[新建管理员用户]