系统管理员常用的Linux命令

整理Linux的一些基本系统管理命令作为备忘

=========================================================================

查看文件或编辑文件:

=========================================================================

查看当前目录下文件、文件夹及读写执行权限

$ ll

系统管理员常用的Linux命令

输出说明:(以mnt/这条记录为例)

第一列(drwxrwxr-x)标识文件类型和文件权限

第二列(5)标识文件链接个数

第三列(root)标识文件所有者

第四列(bme319-users)标识文件所在组

第五列(4096)表示文件长度(大小)

第六至八列(Aug 3 20:54)文件最后更新时间

第九列表示文件名称

第一列第一个字符表示文件类型:

d

目录

-

文件

l

链接

s

socket

p

named pipe

b

block device

c

character device

第一列2~10字符每三个字符一组,分别表示文件所有者、文件所在组、其他用户的权限:

rwx(read, write, execute) 显示为有权限,-表示没有权限,以mnt/为例,表示文件所有者root拥有读写执行权限,所在组bme319-users拥有读写执行权限,其他用户有读和执行权限,没有写权限。需要说明的是,用户需要有执行权限才能进入文件夹(或目录)

=========================================================================

查看文件最后一部分内容:

$ tail

查看文件最后10行内容:

$ tail mongod.log

查看文件最后20行内容:

$ tail -n 20 mongod.log

当文件有新内容时打印出来:

$ tail -f mongod.log

适合在执行应用程序时查看日志输出

=========================================================================

查看或合并文件

$ cat

查看文件:

$ cat mongod.log

标注文件行号:

$ cat -n mongod.log

两行以上的空白行只显示一行:

$ cat -s mongod.log

合并文件:

把log1.log的内容加上行号后输入到log2.log里:

$ cat -n log1.log log2.log

把log1.log和log2.log中的内容除空白行外加上行号输入到log3.log里:

$ cat -b log1.log log2.log log3.log

=========================================================================

编辑文件

$ sudo vim /etc/mongod.conf

进入编辑页面后,即可使用vim的一些用法编辑文件:

i 进入编辑插入模式,点击Esc可以返回vim
x 删除光标后的一个字符
:q 退出
:wq 保存并退出
:q! 强制退出(不保存)

具体其他编辑方法请查看vim用法

=========================================================================

权限相关:

更改文件或目录权限:

$ chmod

read权限赋值为4,write权限赋值为2,execute权限赋值为1,更改权限时,将需要赋予的权限相加,共有3个数字,分别表示所有者、所有组、其他用户。例如:对文件mongod.conf,所有者有读写执行权限、所有组拥有读和执行权限、其他用户只有读权限,那么使用如下命令:

$ chmod 754 mongod.conf

对于目录,希望将其子目录都进行更改,只需要增加-R操作:

$ chmod -R 755 /mnt

=========================================================================

更改文件或目录的所有者:

$ chown (change owner)

把文件mongod.conf的所有者更改为bme319

$ chown bme319 mongod.conf

同样可以使用 -R操作:

$ chown -R bme319 /mnt

=========================================================================

更改文件或目录的所有群组:

$ chgrp (change group)

与上面用法类似:

$ chgrp bme319 mongod.conf
$ chgrp -R bme319 /mnt

=========================================================================

curl命令:

这是一个网站开发的十分有用的命令

查看网页源代码:

$ curl www.sina.com

自动跳转(有些网址是自动跳转的):

$ curl -L www.sina.com

可以跳转到www.sina.com.cn

显示http response头信息:

i大写只显示头信息,小写显示头信息及网页代码

$ curl -i www.sina.com
$ curl -I www.sina.com

显示http通信过程:

$ curl -v www.sina.com

或者更详细的通信过程:

$ curl –trace output.txt www.sina.com

或者

$ curl –trace-ascii output.txt www.sina.com

发送表单信息:

GET请求:

$ curl example.com/form.cgi?data=xxx

POST请求:

$ curl -X POST –data “data=xxx” example.com/form.cgi

如果需要将数据进行表单编码:

$ curl -X POST –data-urlencode “date=April 1” example.com/form.cgi

注意到上面GET时直接使用$ curl [url]而POST时需要-X参数,事实上,-X参数可以指定任意HTTP动词:

$ curl -X DELETE www.example.com

如果网域需要HTTP认证,可以用--user参数:

$ curl –user name:password example.com

或者只输入用户名,然后会有提示输入密码:

$ curl –user name example.com

若需要模拟客户端设备,需要用到user agent字段,服务器有可能根据这个字段返回不同的数据格式。比如iPhone4的User Agent是:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

那么使用curl可以这样模拟:

$ curl –user-agent “[User Agent]” [URL]

设置代理:

$ curl -x proxyserver.test.com:1111 http://google.com

FTP服务器上传或下载文件:

列出文件或目录:

$ curl -u ftpuser:ftppass -O ftp://ftpserver/dir/

下载文件:

$ curl -u ftpuser:ftppass -O ftp://ftpserver/dir/file.html

上传文件myfile.log到服务器:

$ curl -u ftpuser:ftppass -T myfile.log ftp://ftpserver

同时上传多个文件:

$ curl -u ftpuser:ftppass -T “{file1, file2}” ftp://ftpserver

从表中输入获取内容保存到服务器指定文件中:

$ curl -u ftpuser:ftppass -T – ftp://ftpserver/myfile.log

上传或下载(保存)文件:

将文件下载到本地并命名为myfile.html

$ curl -o myfile.html http://example.com/file.html

将文件下载到本地而且不重新命名:

$ curl -O http://example.com/file.html

也可以使用>进行转向输出

同时获取多个文件:

$ curl -O URL1 -O URL2

-C选项可以对大文件使用断点续传功能:

若在下载完成前结束进程:

$ curl -O http://example.com/file.html

通过添加-C操作继续对文件进行下载,已经下载过的文件不会被重新下载:

$ curl -C - -O http://example.com/file.html

上传文件:

$ curl –form “fileupload=@filename.txt” http://example.com/dir

=========================================================================

python -m json.tool

使用curl后,API调用的输出可读性很差,JSON格式的数据都堆在一行,若希望将其格式成换行,可以使用python -m json.tool来缩进和组织JSON。需要使用管道机制,将JSON文件的输出作为输入,写入到python -m json.tool命令行。

$ curl http://example.com/api/getjson/ | python -m json.tool

=========================================================================

grep

grep能使用特定模式匹配(包括正则表达式)搜索文本。如果在另一条命令的输出中寻找特定的模式,grep会高亮显示相关的行。可以使用这条命令来搜索日志文件以及特定进程等:

$ cat mongod.log | grep “port 27017

=========================================================================

ps

ps可以查看进程的各种状态信息,-e操作表示列出所有,-f选项表示列出详细信息,因此:

$ ps -ef

即可检查服务器运行的所有进程。更常用的是找到具体某个进程的信息,可以和grep连用:

$ ps -ef | gref “mongo”

=========================================================================

env

env用于列出所有的环境变量及为其赋值。在故障排除期间,可能会需要检查是否有错误的环境变量阻止应用程序启动。检查程序主机上设置的环境变量:

$ env

=========================================================================

top

top用于显示系统中各个进程的信息和资源占用情况,类似于Windows的任务管理器。使用该命令可以确定哪些进程正在运行,以及它们小号了多少内存和CPU。

系统管理员常用的Linux命令

按下C键可以查看启动红线标出的进程的详细启动命令:

系统管理员常用的Linux命令

=========================================================================

netstat

netstat用于显示网络状态信息。该命令可显示正在使用的网络端口及其传入连接。同样的,一般与grep连用:

$ netstat -tupln | grep 27017

操作符说明:

-t -u (tcp, udp)只显示这两种协议的结果;
-p 显示PID或程序名称
-l 只显示监听端口
-n 不解析域名(只显示IP)

=========================================================================

ip address

用于显示应用程序的主机接口和IP地址。查看某接口的IP地址可以使用show。查看本机IP地址可以使用以下命令:

$ ip address show eth0

如果需要查看所有容器和主机的地址,可以使用以下命令:

$ ifconfig

=========================================================================

lsof

lsof(list open files)用于列出当前系统打开的文件。在Linux系统中,几乎任何和系统的交互都被视为一个文件。因此,如果应用程序写入文件或进行网络连接,lsof会把这个交互映射为一个文件。与netstat类似,可使用lsof检查侦听端口。需要注意的是,可能需要root权限才能查看到所有进程,尤其是当进程不是由当前用户运行的时候。

$ sudo lsof -i tcp:27017

操作符-i选择了所有ipv4/ipv6的进程。如果根据进程ID(PID)选择:

$ sudo lsof -p 3235

可以查看该进程的所有信息。

=========================================================================

df

使用df命令显示空闲的磁盘空间(display free disk space)以排查磁盘空间问题。为了使结果可读性较好,使用-h操作:

$ df -h

即可获取磁盘空间信息,包括已用和未用等。

=========================================================================

du

也是用于查看使用空间的,但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看,要获取有关哪些文件在目录中使用磁盘空间的更多详细信息,可以使用du命令。比如要获得总大小可用-s操作,加上-h可以使结果更可读:

$ sudo du -sh /mnt/*

以上命令是为了获取/mnt目录下所有目录或文件大小。

=========================================================================

id

该命令可以检查当前用户身份,包括UID(user ID), GID(group ID), groups信息。使用方法:

$ id

$ id user_name

=========================================================================

dig/nslookup

dig 命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。域名服务器(DNS)有助于将 URL 解析为一组应用程序服务器。然而,你会发现有些 URL 不能被解析,这会导致应用程序的连接问题。

=========================================================================

iptables

iptables 用于阻止或允许 Linux 主机上的流量,用于 IP 包过滤器管理,类似于网络防火墙。此工具可阻止某些应用程序接收或发送请求。更具体地说,如果应用程序难以访问另一个端点,可能已被 iptables 拒绝流量访问该端点。查看iptables规则:

$ sudo iptables -S

=========================================================================

sestatus

通常会在企业管理的应用程序主机上使用 SELinux(一个 Linux 安全模块)。SELinux 对主机上运行的进程提供最低权限的访问,防止潜在的恶意进程访问系统上的重要文件。某些情况下,应用程序需要访问特定文件,但可能会发生错误。要检查 SELinux 是否阻止了应用程序,使用 tail 和 grep 在 /var/log/audit 日志记录中查找”denied”(被拒绝)的信息。否则,使用 sestatus 来检查是否启动了 SELinux。

=========================================================================

history

当你使用大量的命令进行测试和调试时,可能会忘记有用的命令。每个 shell 都有一个 history 命令的变体。它可显示自会话开始以来使用的命令的历史记录。可以使用 history 来记录用来排除应用程序故障的命令。history 命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。

$ history

该命令可以查看历史命令列表,使用!加指定命令的序号可以执行对应命令:

$ !288

执行历史命令列表中序号为288的命令。

=========================================================================

设置自定义命令:

$ vim ~/.bashrc

在最后一行添加:

alias 命令别名='原命令'

例:

alias codedir='cd /mnt/codes'

这样在当前用户下,即可使用codedir命令访问/mnt/code文件夹(可能需要重新建立连接才行)

=========================================================================

参考:

https://mp.weixin.qq.com/s/pEwNyYPfZ18h5vUxA_TQsg

http://www.ruanyifeng.com/blog/2011/09/curl.html