Linux常用命令和基础知识

查看进程

1. ps
查看某个时间点的进程信息

示例一:查看自己的进程

# ps -l
示例二:查看系统所有进程

# ps aux
示例三:查看特定的进程

# ps aux | grep threadx

2. top
实时显示进程信息

示例:两秒钟刷新一次

# top -d 2
3. pstree
查看进程树

示例:查看所有进程树

# pstree -A
4. netstat
查看占用端口的进程

示例:查看特定端口的进程

# netstat -anp | grep port

文件操作

ls -a ,all列出全部文件包括隐藏

ls -l,list显示文件的全部属性

ls -d,仅列出目录本身

cd mkdir rmdir 常用不解释 rm -rf永久删除 cp复制 mv移动或改名

touch,更新文件时间或者建立新文件。

权限操作

chmod rwx 分别对应 421

chmod 754 .bashrc 将权限改为rwxr-xr--

对应权限分配是对于 拥有者,所属群组,以及其他人。

文件默认权限

文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。

目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。

目录的权限

ps:拥有目录权限才能修改文件名,拥有文件权限是没用的

文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。

目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。

连接操作

硬链接:使用ln建立了一个硬连接,通过ll -i获得他们的inode节点。发现他们的inode节点是相同的。符合硬连接规定。

# ln /etc/crontab .

# ll -i /etc/crontab crontab

软连接:

符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。

当源文件被删除了或者被移动到其他位置了,链接文件就打不开了。

可以为目录建立链接。

# ll -i /etc/crontab /root/crontab2

获取内容

cat 读取内容 加上-n 按行打印

tac是cat的反向操作

more允许翻页查看,而不像cat一次显示全部内容

less可以先前翻页和向后翻页,more只能向前翻页

head 和tail 负责取得文件的前几行和后几行

搜索和定位

1 which负责指令搜索,并显示第一条 比如which pwd,会找到pwd对应的程序。加-a 打印全部。

2 whereis负责搜索文件, 后面接上dirname/filename

文件搜索。速度比较快,因为它只搜索几个特定的目录。
比如 whereis /bin hello.c

3 locate
文件搜索。可以用关键字或者正则表达式进行搜索。

locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。

# locate [-ir] keyword
-r:正则表达式

locate hello
locate he*
vi heeee
updatedb
locate he?

4. find
文件搜索。可以使用文件的属性和权限进行搜索。

# find [basedir] [option]
example: find . -name "shadow*"

find -name "hike"
find +属性后缀 "属性"

(一)与时间有关的选项

-mtime  n :列出在 n 天前的那一天修改过内容的文件

(二)与文件拥有者和所属群组有关的选项

-uid n
-gid n
-user name

(三)与文件权限和名称有关的选项

-name filename
-size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE

压缩

gzip压缩和解压,还有bzip,xz等压缩

而tar可以用打包,打包的时候也可以执行压缩

压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gip、bzip2、xz 将打包文件进行压缩。

$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename...  ==打包压缩
$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件]              ==查看
$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录]    ==解压缩

管道指令

1 |

2 cut切分数据,分成多列,last显示登陆者信息

正则

grep

g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。

$ grep [-acinv] [--color=auto] 搜寻字符串 filename
-c : 计算找到个数
-i : 忽略大小写
-n : 输出行号
-v : 反向选择,亦即显示出没有 搜寻字符串 内容的那一行
--color=auto :找到的关键字加颜色显示

awk

$ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename
示例 2:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。

$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 " " $3}'
root 0
bin 1
daemon 2
sed

示例 3:输出正在处理的行号,并显示每一行有多少字段

$ last -n 5 | awk '{print $1 " lines: " NR " columns: " NF}'
dmtsai lines: 1 columns: 10
dmtsai lines: 2 columns: 10
dmtsai lines: 3 columns: 10
dmtsai lines: 4 columns: 10
dmtsai lines: 5 columns: 9

sed:

awk用于匹配每一行中的内容并打印
而sed负责把文件内容重定向到输出,所以sed读取完文件并重定向到输出并且通过awk匹配这些内容并打印。

他们俩经常搭配使用

查看进程状态

Linux进程状态(ps stat)之R、S、D、T、Z、X

D    不可中断     Uninterruptible sleep (usually IO)
R    正在运行,或在队列中的进程
S    处于休眠状态
T    停止或被追踪
Z    僵尸进程
W    进入内存交换(从内核2.6开始无效)
X    死掉的进程

<    高优先级
N    低优先级
L    有些页被锁进内存
s    包含子进程
+    位于后台的进程组;
l    多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

ps aux

strace

strace用于跟踪程序执行过程中的系统调用,如跟踪test进程,只需要:

strace -p [test_pid] 或直接strace ./test

比如,跟踪pid为12345的进程中所有线程的read和write系统调用,输出字符串的长度限制为1024:

strace -s 1024 -f -e trace=read,write -p 12345

tcpdump

tcpdump是Linux上的抓包工具,如抓取eth0网卡上的包,使用:

sudo tcpdump -i eth0

比如,抓取80端口的HTTP报文,以文本形式展示:

sudo tcpdump -i any port 80 -A这样你就可以清楚看到GET、POST请求的内容了。

nc

nc可以在Linux上开启TCP Server、TCP Client、UDP Server、UDP Client。

如在端口号12345上开启TCP Server和Client模拟TCP通信:

Server: nc -l 127.0.0.1 12345Client: nc 127.0.0.1 12345 在端口号12345上开启UDP Server和Client模拟TCP通信:

Server: nc -ul 127.0.0.1 12345Client: nc -u 127.0.0.1 12345Unix Socket通信示例:

Server: nc -Ul /tmp/1.sockClient: nc -U /tmp/1.sock

curl

curl用于模拟HTTP请求,在终端模拟请求时常用,如最基本的用法:

curl http://www.baidu.com

lsof

lsof命令主要用法包括:

sudo lsof -i :[port] 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用

sudo lsof -p [pid] 查看进程打开了哪些文件或套接字

ss

Linux上的ss命令可以用于替换netstat,ss直接读取解析/proc/net下的统计信息,相比netstat遍历/proc下的每个PID目录,速度快很多。

awk/sed

awk和sed在文本处理方面十分强大,其中,awk按列进行处理,sed按行进行处理。

如采用冒号分隔数据,输出第一列数据(代表行全部列数据,​1代表第一列,$2代表第二列...)

awk -F ":" '{print $1}'在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能

查看文件的第100行到第200行:sed -n '100,200p' log.txt替换字符串中的特定子串echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"替换test文件每行匹配ab的部分为cdsed -i 's/ab/cd/g' test

vim

打开文件并跳到第10行

$ vim +10 filename.txt打开文件跳到第一个匹配的行

$ vim +/search-term filename.txt以只读模式打开文件

$ vim -R /etc/passwd

crontab

查看某个用户的crontab入口

$ crontab -u john -l设置一个每十分钟执行一次的计划任务

*/10 * * * * /home/ramesh/check-disk-space更多示例:Linux Crontab: 15 Awesome Cron Job Examples

service

service命令用于运行System V init脚本,这些脚本一般位于/etc/init.d文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径

查看服务状态

$ service ssh status查看所有服务状态

$ service --status-all重启服务

$ service ssh restart

free

这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况

默认情况下free会以字节为单位输出内存的使用量

$ free
             total       used       free     shared    buffers     cached
Mem:       3566408      1580220    1986188        0     203988     902960
-/+ buffers/cache:       473272    3093136
Swap:      4000176            0    4000176

如果你想以其他单位输出内存的使用量,需要加一个选项,-g为GB,-m为MB,-k为KB,-b为字节

如果你想查看所有内存的汇总,请使用-t选项,使用这个选项会在输出中加一个汇总行

top

top命令会显示当前系统中占用资源最多的一些进程(默认以CPU占用率排序)如果你想改变排序方式,可以在结果列表中点击O(大写字母O)会显示所有可用于排序的列,这个时候你就可以选择你想排序的列

如果只想显示某个特定用户的进程,可以使用-u选项

$ top -u oracle

df

显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位输出磁盘的使用量

使用-h选项可以以更符合阅读习惯的方式显示磁盘使用量

$ df -h

kill

kill用于终止一个进程。一般我们会先用ps -ef查找某个进程得到它的进程号,然后再使用kill -9 进程号终止该进程。你还可以使用killall、pkill、xkill来终止进程

$ ps -ef | grep vimramesh 7243 7222 9 22:43 pts/2 00:00:00 vim

$ kill -9 7243

mount

如果要挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上

mkdir /u01mount /dev/sdb1 /u01也可以把它添加到fstab中进行自动挂载,这样任何时候系统重启的时候,文件系统都会被加载

/dev/sdb1 /u01 ext2 defaults 0 2

chmod

chmod用于改变文件和目录的权限

给指定文件的属主和属组所有权限(包括读、写、执行)

$ chmod ug+rwx file.txt删除指定文件的属组的所有权限

$ chmod g-rwx file.txt修改目录的权限,以及递归修改目录下面所有文件和子目录的权限

$ chmod -R ug+rwx file.txt更多示例:7 Chmod Command Examples for Beginners

chown

chown用于改变文件属主和属组

同时将某个文件的属主改为oracle,属组改为db

$ chown oracle:dba dbora.sh使用-R选项对目录和目录下的文件进行递归修改

$ chown -R oracle:dba /home/oracle

ifconfig

ifconfig用于查看和配置Linux系统的网络接口

uname

uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信息

实际场景问题

1 cpu占用率

top可以看
ps看不了
但是ps -aux可以看到各个线程的cpu和内存占用

2 进程状态:

ps -ef看不了
ps aux可以看进程状态S R之类

3 IO
iostat查看io状态

4网络
netstat查看tcp连接状态和socket情况,

ipconfig查看网络设备

lsof可以查看端口使用情况

5内存
free

原作者CSDN-黄小斜

学习时的痛苦是暂时的 未学到的痛苦是终生的
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/juanxincai/p/12613799.html