linux的历史

unix的发展

unix和linux关系

linux的种类

centos

  • 6.5
  • 7.6
  • 7.9
  • 8.0
  • 9.0

ubuntu

16
18
22

federa

suse

kali

redhat enterprise linux

文件系统

相对路径和绝对路径

只要是以/到头的就是绝对路径

命令

ls: 显示文件

-l : 详细信息
-c :按照创建时间
-R : 递归
-r : 倒排序
-S: 以文件大小排序

cd: 切换目录
pwd:显示当前目录

touch命令,创建文件

[yanfeng@localhost ~]$ touch a  b c d
[yanfeng@localhost ~]$ ll
total 0
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 a
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 b
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 c
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 d

mkdir: 创建文件夹(创建目录)

mkdir 支持通配符
通配符:
[mn] 表示m或者n
{1..9}表示从从1到9
?: 表示单个字符 类似sql ‘_’
*: 表示所有字符串 类似SQL ‘%’

  • [m-n] m到n 的范围的字符
[yanfeng@localhost ~]$ touch m{f..k}
[yanfeng@localhost ~]$ ll
total 0
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 a
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 b
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 c
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 d
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mf
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:33 m[f-k]
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mg
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mh
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mi
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mj
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mk
[yanfeng@localhost ~]$

[yanfeng@localhost ~]$ touch {m..n}{2..5}
[yanfeng@localhost ~]$ ll
total 0
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 1
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 2
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 3
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 4
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 5
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 6
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 7
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 8
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:35 9
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 a
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 b
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 c
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:29 d
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 m2
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 m3
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 m4
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 m5
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mf
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:33 m[f-k]
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mg
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mh
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mi
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mj
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:34 mk
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 n2
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 n3
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 n4
-rw-r--r--. 1 yanfeng data28 0 Nov  8 03:36 n5

-p : with parent,连同父目录一起创建

[yanfeng@localhost ~]$ mkdir a1
[yanfeng@localhost ~]$ ll
total 0
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:12 a1
[yanfeng@localhost ~]$ mkdir a2 a3 a4
[yanfeng@localhost ~]$ ll
total 0
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:12 a1
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:12 a2
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:12 a3
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:12 a4
[yanfeng@localhost ~]$ mkdir a5/a51
mkdir: cannot create directory ‘a5/a51’: No such file or directory
[yanfeng@localhost ~]$ mkdir -p a5/a51
[yanfeng@localhost ~]$ ll
total 0
drwxr-xr-x. 2 yanfeng data28  6 Nov  8 04:12 a1
drwxr-xr-x. 2 yanfeng data28  6 Nov  8 04:12 a2
drwxr-xr-x. 2 yanfeng data28  6 Nov  8 04:12 a3
drwxr-xr-x. 2 yanfeng data28  6 Nov  8 04:12 a4
drwxr-xr-x. 3 yanfeng data28 17 Nov  8 04:13 a5
[yanfeng@localhost ~]$ ll a5
total 0
drwxr-xr-x. 2 yanfeng data28 6 Nov  8 04:13 a51
[yanfeng@localhost ~]$ mkdir -p a5/a51
[yanfeng@localhost ~]$ mkdir  a5/a51
mkdir: cannot create directory ‘a5/a51’: File exists

隐藏文件

以点打头的文件是默认的隐藏文件
一般,点文件是应用程序的配置文件。

所以的通配符都不能匹配开头文件的.开头。
rm -f *

练习

  • 在家目录下创建文件夹 m1,m2,m5
  • 在每个文件夹下创建a1-a9的文件
  • 创建 m10/m110的目录,并在m10的目录下创建文件abcd四个文件
  • 在~目录下,递归显示所有的文件详细信息。

切换用户

su 命令

su - yanfeng
  • root下切换到其他人,不需要密码
  • 普通用户切换其他人,需要输入密码

文件操作命令

创建文件

touch filename filename1 filename …..

如果文件已经存在,他会修改此文件访问时间
文件包含所有时间

  • 创建时间
  • 修改时间
  • 访问时间

例子:
touch today

复制文件 cp (copy)

例子1:

复制a文件变成b文件,b文件默认就被覆盖并且无提示
cp a b

复制a文件变成b文件,要求提示,如果文件b存在的情况。
cp -i a b
会提示是否需要覆盖,

shell 命令’
命令 开关 参数
ls -l /etc /var /var/logs

例子2 多文件复制

多文件复制最后的参数一定是目录,而且必须存在。

cp file1 file2 dir1

源文件包含目录的复制

  • 必须包含 -r 开关 建议大家复制的时候,都加上 -r
[yanfeng@localhost ~]$ cp a* b c
[yanfeng@localhost ~]$ ll c
total 0
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:06 a
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:06 a1
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:06 b
[yanfeng@localhost ~]$ cp c dir
cp: omitting directory ‘c’
[yanfeng@localhost ~]$ cp -r c dir
[yanfeng@localhost ~]$ ll dir
total 0
drwxr-xr-x. 2 yanfeng data28 34 Nov  9 21:08 c
[yanfeng@localhost ~]$ ll -R dir
dir:
total 0
drwxr-xr-x. 2 yanfeng data28 34 Nov  9 21:08 c

dir/c:
total 0
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:08 a
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:08 a1
-rw-r--r--. 1 yanfeng data28 0 Nov  9 21:08 b
[yanfeng@localhost ~]$ ll -Rd dir
drwxr-xr-x. 3 yanfeng data28 15 Nov  9 21:08 dir

开关

-r : 递归
-i : 提示
-f: 强制,
-n: 不覆盖目标文件,非常有用
-b: 覆盖之前备份原文件,对目录不生效。
-v: 显示操作的内容

yanfeng@localhost dir]$ cp -vbr dir mkdir^C
[yanfeng@localhost dir]$ cd ..
[yanfeng@localhost ~]$ cp -vbr dir mkdir
‘dir/c/a’ -> ‘mkdir/dir/c/a’ (backup: ‘mkdir/dir/c/a~’)
‘dir/c/b’ -> ‘mkdir/dir/c/b’ (backup: ‘mkdir/dir/c/b~’)
‘dir/c/a1’ -> ‘mkdir/dir/c/a1’ (backup: ‘mkdir/dir/c/a1~’)
`

综合练习

  • 复制/etc/a* 文件到当前目录
    cp /etc/a* .
    cp /etc/a* ~

  • 多源复制文件和文件夹
    cp -r /etc/a* ~/backup /tmp ~

cp -n /etc/[mn][q-s]?[fk] .

移动文件 (改名称)

命令: mv
mv a b
mv dir1 dir2

  • 如果dir2不存在,就改名
  • 如果dir2存在,就把dir1移动到dir2,结果是dir2/dir1

多源移动

mv a* a2* *a2 backup

什么是文件

文件有非连续的区块所组成,并且每个区块都有节点号,inode

删除文件(rm remove (unlink ))

-i: 有提示,如果是可读文件,不加i也提示
-f: 强制删除,不提示
-r: 删除目录需要,递归删除

rm -r dir1 dir1 file1 file2
rm -fr dir1 dir2 dir3

rm f1 f2 f3 f4
rm a b 

rm -r /var/log/[0-9]*
rm -r ~/backup/*log
rm -fr /tmp/* a /var/log/*

练习

  1. 复制/var/log的文件到自己家目录的下的log文件夹
  2. 删除 家目录下的log下的以d打头的文件
  3. 复制etc下所有的文件到当前log目录下
  4. 删除当前家目录下的所有文件和目录,不能删除.文件

远程复制命令 scp

scp,ssh,sftp是openssh家族的三个软件
scp: 远程复制文件
ssh: 远程执行命令
sftp:远程操作文件的命令

scp:
linux/unix/mac 相互可以无缝对拷

windows/linux:
scp命令只能执行在windows端。

格式:

1) scp user@host:/path/to/file dest
2) scp source user@host:/path/to
3) scp -r user1@host1:/path1/ user2@host2:/path2 ,不常用

例子:
scp d:\z.zip root@192.168.10.4:/root

sftp命令

sftp是安全文件传输协议
Secure File Transform Protocal
ftp是非安全, 23
sftp走的是22端口,ssh,scp走22端口,22端口访问叫sshd服务。

sftp有各种不同的版本

l打头的表示操作本机的路径
lcd
lpwd
lmkdir
lls

如没l
cd
pwd
mkdir
ls
指的是在服务器端工作。

put 上传
get 下载

ftp 命令基本不用,如果要用,参考sftp

文件查看命令

cat

  • 直接显示文件,不停留
  • -n 表示打印出行号,连续编号,空行也算

例子:
cat /etc/conf
cat dir1/
.txt abcd.txt

nl

类似cat -n
但是跳过空行

tac 倒序输出

rev 镜像输出

more

翻页
回车: 向下显示一行
b: 向上翻页
f: 往下翻页
q:退出
h:help

例子:
more /etc/*.txt
more 1.txt 2.txt
more dir1/1.txt

less

类似 more
但是支持 上下移动,用上下键

tail

默认看文件尾部10行
tail -10 /etc/services /mb/cs/*.txt
tail -n xx = tail -xx
tail -n +xx 表示从xx行显示的尾部

tail -f xxx.log
这个表示一直监视xxx.log尾部10行。ctrl+c退出当前tail命令

head

默认看文件头部10行

练习

  • 复制/etc/services文件当前目录下
    1) 查看它有多少行
    2)倒序输出此文件
    3)查看尾部8行。

文本处理

wc

wc 统计文本行,单词,字符
wc a.txt b.txt /etc/*conf
l: 行数
w:单词书
c:字符数

sort

排序:
-u : unique,排序的同时去除相同的key
-k: 按照第几列排序,需要指定分隔符 -t,不指定是空格。
-n:数字
-r: desc

uniq

grep

查找
-c:
-v:
-l:
-h:
-q:
-i:
-E: {} +

grep -E = egrep
grep -P = pgrep

sed

是流编辑器(streaming editor) ,vi,emacs,nano,这些块编辑器。
主要功能有
替换,删除,打印文字屏幕,插入

p: print

d: delete

sed '0,$d' 9.csv
sed '/.*/d' 9.csv

i: insert

在匹配到的行前面增加一行
sed ‘模式i new line ‘ 9.csv

a: append

在匹配到的行后面增加一行
sed ‘模式a new line ‘ 9.csv

sed ‘/^2002/a new line ‘ 9.csv

s: 替换

[yanfeng@server10 ~]$ sed -e 's/d/D/g' -e '/^$/d' -e '/^#/d' /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeteD

比如打印出9.csv到第21到30行。

nl 9.csv | head -n 30 | tail 

``

模式匹配有2中,一种以行号做匹配.如下列,打印出21,30行

[root@server10 ~]# nl 9.csv | sed -n '21,30p'
    21  2020-11-05,'000009,中国宝安,8.22,8.33,7.87,8.05,7.9,0.32,4.0506,4.5808,117005318,953686456.73,21201138792.3,20996186277.2
    22  2020-11-04,'000009,中国宝安,7.9,7.95,7.71,7.77,7.77,0.13,1.6731,2.2418,57261096,449910028.83,20375790323.5,20178816495.1
    23  2020-11-03,'000009,中国宝安,7.77,7.88,7.71,7.83,7.74,0.03,0.3876,1.7281,44140256,343537490.22,20040492508.0,19846760021.1
    24  2020-11-02,'000009,中国宝安,7.74,7.79,7.5,7.56,7.56,0.18,2.381,1.6859,43061995,329832056.63,19963116089.1,19770131604.1
    25  2020-10-30,'000009,中国宝安,7.56,7.81,7.54,7.78,7.73,-0.17,-2.1992,1.7883,45678272,349811678.7,19498857575.4,19310361101.6
    26  2020-10-29,'000009,中国宝安,7.73,7.91,7.71,7.75,7.86,-0.13,-1.6539,2.129,54380258,424440113.01,19937323949.5,19744588798.4
    27  2020-10-28,'000009,中国宝安,7.86,7.94,7.5,7.59,7.59,0.27,3.5573,2.3554,60162894,468217035.36,20272621764.9,20076645272.3
    28  2020-10-27,'000009,中国宝安,7.59,7.64,7.46,7.6,7.67,-0.08,-1.043,1.3095,33449390,252984852.75,19576233994.3,19386989518.7
    29  2020-10-26,'000009,中国宝安,7.67,7.75,7.52,7.74,7.7,-0.03,-0.3896,1.203,30727285,234862006.65,19782571111.5,19591331964.2
    30  2020-10-23,'000009,中国宝安,7.7,7.9,7.7,7.74,7.66,0.04,0.5222,1.9446,49670369,387850177.07,19859947530.5,19667960381.3

sed -n '$p' 9.csv

第二种匹配方式,是以正则表达式的方式来匹配行

` sed -n ‘/^2002/p’ 9.csv

awk

tr

下载文件

curl
wget

正则表达式

模式匹配
. 匹配任意字符
^: 开头
$: 结尾
{n}:表示前面一个字符重复n次
{m,n} 表示前面一个字符重复m到n次。
+:表示前面一个字符重复1次或者无数次
*:表示前面一个字符重复0次或者无数次
?:表示前面一个字符重复0次或者1次
[mn]表示m或者n
[0-9]: 0-9之间的任意字符
[^m]:不是m字符
[^0-9] 不是0-9
[0-9a-zA-z]: 0-9,a-z,A-Z

练习:

appples

ap{3}les
.*
[a-z]+
[a-z]*
[^0-9]*

管道 |

1) 第一个命令的输出作为第二个命令的输入。
2)第一个命令输出,必须是1的流的才行,2的流管道是不接受的。
3)如果要接受2个流,必须合并输出流到1

重定向 > >>

重定向将标准输出 1 ,标准错误输出2 输出文件当中,而不是屏幕。
1 是可以省略的。
** 重定向 首先清空文件,然后再执行 **
** 追加的重定向>>不受影响 ,有可能造成死循环 **

> 清空目标文件,输出到此文件,
>> 不清空,追加

例子:

 find /etc/*  1>filelist 
 把文件名称输出到filelist,错误信息仍然在屏幕

 find . -type f 2>/dev/null
 将正确文件信息输出到屏幕,错误输出到null设备。null设备永远都是零字节

 find /etc/*  1>>filelist 
 追加

 grep centos /etc/a.conf >/etc/a.conf
 这是错误的,a.conf执行之前就被情况,因此结果都是0字节。

 find /etc/* >/dev/null 2>&1
 什么结果都不要了。

 tomcat.exe >log 2>&1  & 
 这个表示将tomcat log日志按照正常的输出到log文件里面去。




输入重定向

从文件中输入重定向 <

<: 从文件中读取,把此文件作为键盘缓冲区

ssh-keygen < answers
这个命令至少4个回车,例如下面文件名称answers





`

ssh-keygen < answers

从屏幕读取作为键盘缓冲区 <<

cat EOF >file.txt
>this is the first line
>secodline
> 3rd line 
>EOF

会产生file.txt.它的内容如下:

this is the first line
secodline
3rd line 

直接把字符串当键盘的缓冲区

cat <<<”as keyboard buffer “
as keyboard buffer

综合

cat </etc/services >myservices
=> cp /etc/services myservices

mysql -uroot -p’1qaz!QAZ’ database < batch.sql

cat batch.sql
use aicourse;
select * from aicourse;
drop table aicourse;
create database aicourse_1 charset utf8;

##作业

在10.4服务器上,创建10个用户,并且创建10个和他同名的数据库,并且授权所有权限
create user user1@’%’ identified by ‘123456’;
create database user1 charset utf8;
grant all privileges on user1.* to user1@’%’
flush privileges;

删除10个用户和此数据库

drop user user1@’%’;
drop database user1;

系统相关命令

top

右上角的平均负载1分钟,5分钟,10分钟。
意思争夺CPU进程个数,一般不能长时间超过 cpu内核 * 0.7

top左上角看到系统的启动的时长

top - 20:49:16 up 4 days, 19:19, 11 users,  load average: 0.05, 0.03, 0.05
Tasks: 152 total,   1 running, 151 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.3 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1707580 total,   285832 free,   352432 used,  1069316 buff/cache
KiB Swap:  3129340 total,  3129084 free,      256 used.  1081092 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1022 root      20   0  574284  17544   6120 S   0.3  1.0   0:31.34 tuned
    1 root      20   0  128304   6888   4196 S   0.0  0.4   0:21.28 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.09 kthreadd
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0.0  0.0   0:00.72 ksoftirqd/0
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.64 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_b

free命令

看内存大小,和使用量。

[root@server10 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1707580      353972      281504       25648     1072104     1079412
Swap:       3129340         256     3129084

kill

kill是正常杀死,只能杀自己进程。除了root
kill -9 是直接杀死,不再通知。只能杀自己进程

kill -9 PID
kill -9 10101

pkill

pkill会模糊匹配,要小心

pkill PNAME 进程名称
pkill -9 bash
pkill -9 mysql

ps

ps命令是显示进程的。及其复杂。

ps -ef

查找所有进程的详尽信息

ps aux

查内存

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 128304  6888 ?        Ss   Nov07   0:21 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    Nov07   0:00 [kthreadd]
maruiqi+ 20420  0.0  0.1 158904  2328 ?        S    20:06   0:00 sshd: maruiqing@pts/8
maruiqi+ 20421  0.0  0.1 115540  2056 pts/8    Ss+  20:06   0:00 -bash
mysql    21352  0.0  0.0 113412  1604 ?        Ss   01:10   0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
root     21407  0.0  0.3 158904  5680 ?        Ss   20:25   0:00 sshd: zhanghao [priv]
zhanghao 21415  0.0  0.1 158904  2328 ?        S    20:25   0:00 sshd: zhanghao@pts/10
zhanghao 21416  0.0  0.1 115544  2088 pts/10   Ss+  20:25   0:00 -bash

ps afxj

查进程树

PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 1021 19958 19958 19958 ?           -1 Ss       0   0:00  \_ sshd: hcf [priv]
19958 19985 19958 19958 ?           -1 S     1012   0:00  |   \_ sshd: hcf@notty
19985 19986 19986 19986 ?           -1 Ss    1012   0:00  |       \_ /usr/libexec/openssh/sftp-server
 1021 20413 20413 20413 ?           -1 Ss       0   0:00  \_ sshd: maruiqing [priv]
20413 20420 20413 20413 ?           -1 S     1009   0:00  |   \_ sshd: maruiqing@pts/8
20420 20421 20421 20421 pts/8    20421 Ss+   1009   0:00  |       \_ -bash
 1021 21407 21407 21407 ?           -1 Ss       0   0:00  \_ sshd: zhanghao [priv]
21407 21415 21407 21407 ?           -1 S     1008   0:00  |   \_ sshd: zhanghao@pts/10
21415 21416 21416 21416 pts/10   21416 Ss+   1008   0:00  |       \_ -bash
 1021 22175 22175 22175 ?           -1 Ss       0   0:00  \_ sshd: gaokaidi [priv]
22175 22182 22175 22175 ?           -1 S     1003   0:00  |   \_ sshd: gaokaidi@pts/9
22182 22183 22183 22183 pts/9    22183 Ss+   1003   0:00  |       \_ -bash
 1021 22661 22661 22661 ?           -1 Ss       0   0:00  \_ sshd: yanfeng [priv]
22661 22667 22661 22661 ?           -1 S     1000   0:00      \_ sshd: yanfeng@pts/5
22667 22668 22668 22668 pts/5    23772 Ss    1000   0:00          \_ -bash
22668 23772 23772 22668 pts/5    23772 R+    1000   0:00              \_ ps afxj
    1  1022  1022  1022 ?           -1 Ssl      0   0:31 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
    1  1023  1023  1023 ?           -1 Ssl      0   0:20 /usr/sbin/rsyslogd -n
    1  1354  1354  1354 ?           -1 Ss       0   0:02 /usr/libexec/postfix/master -w
 1354  1360  1354  1354 ?           -1 S       89   0:00  \_ qmgr -l -t unix -u
 1354 23771  1354  1354 ?           -1 S        0   0:00  \_ pickup -l -t unix -u
    1 21352 21352 21352 ?           -1 Ss      27   0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
21352 21517 21352 21352 ?           -1 Sl      27   0:49  \_ /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql

du

du -sh . 或者 du -sh

查看各目录的文件大小情况汇总

[root@server10 home]# du -sh *
1.5M    gaokaidi
16K     hcf
16K     lipenglei
2.0M    lishinan
2.3M    liuhu
20K     lixingzhu
85M     maruiqing
64K     shaojianghe
124K    testing
3.6M    user01
16K     user02
12K     user03
16K     user04
16K     user05
16K     wyc
16K     xc
20M     yanfeng
1.7M    zhanghao
5.0M    zhouding

df

[root@server10 ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  822M     0  822M   0% /dev
tmpfs                   tmpfs     834M     0  834M   0% /dev/shm
tmpfs                   tmpfs     834M   26M  809M   4% /run
tmpfs                   tmpfs     834M     0  834M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        26G  2.3G   24G   9% /
/dev/sda1               xfs      1014M  152M  863M  15% /boot
//192.168.10.2/data     cifs      1.9T  823G  1.1T  45% /mnt/server10.2
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1009
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1001
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1002
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1012
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1008
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1003
tmpfs                   tmpfs     167M     0  167M   0% /run/user/1000

netstat 查看网络的命令

ping

检测对方机器是否联通,还可以检查DNS解析是否正常。

PS C:\Users\Andy> ping 192.168.10.4

正在 Ping 192.168.10.4 具有 32 字节的数据:
来自 192.168.10.4 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.10.4 的回复: 字节=32 时间=2ms TTL=63
来自 192.168.10.4 的回复: 字节=32 时间=2ms TTL=63
来自 192.168.10.4 的回复: 字节=32 时间=2ms TTL=63

PS C:\Users\Andy> ping www.baidu.com

正在 Ping www.wshifen.com [104.193.88.123] 具有 32 字节的数据:
来自 104.193.88.123 的回复: 字节=32 时间=207ms TTL=52
来自 104.193.88.123 的回复: 字节=32 时间=206ms TTL=52
来自 104.193.88.123 的回复: 字节=32 时间=206ms TTL=52
来自 104.193.88.123 的回复: 字节=32 时间=207ms TTL=52

netstat

判断一个程序有没有启动,比如oracle

ps -ef |grep oracle
netstat -antp |grep 1521

netstat -antp 结果示例。

[root@server10 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      21517/mysqld
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1021/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1354/master
tcp        0      0 192.168.10.4:22         192.168.20.200:64538    ESTABLISHED 19497/sshd: shaojia
tcp        0      0 192.168.10.4:22         192.168.20.213:13503    ESTABLISHED 19891/sshd: hcf [pr
tcp        0      0 192.168.10.4:48004      192.168.10.2:445        ESTABLISHED -
tcp        0      0 192.168.10.4:22         192.168.20.69:49863     ESTABLISHED 19452/sshd: lishina
tcp        0      0 192.168.10.4:22         192.168.20.208:1909     ESTABLISHED 19951/sshd: hcf [pr
tcp        0    232 192.168.10.4:22         192.168.20.188:13491    ESTABLISHED 22661/sshd: yanfeng
tcp        0      0 192.168.10.4:22         192.168.20.155:61245    ESTABLISHED 22175/sshd: gaokaid
tcp        0      0 192.168.10.4:22         192.168.20.213:13505    ESTABLISHED 19898/sshd: hcf [pr
tcp        0      0 192.168.10.4:22         192.168.20.211:50026    ESTABLISHED 19708/sshd: lishina
tcp        0      0 192.168.10.4:22         192.168.20.216:50545    ESTABLISHED 21407/sshd: zhangha
tcp        0      0 192.168.10.4:22         192.168.20.69:62206     ESTABLISHED 18881/sshd: maruiqi
tcp        0      0 192.168.10.4:22         192.168.20.214:63338    ESTABLISHED 20413/sshd: maruiqi
tcp        0      0 192.168.10.4:22         192.168.20.187:64848    ESTABLISHED 19587/sshd: shaojia
tcp        0      0 192.168.10.4:22         192.168.20.208:1911     ESTABLISHED 19958/sshd: hcf [pr
tcp6       0      0 :::22                   :::*                    LISTEN      1021/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1354/master

telnet

telnet 192.168.10.4 3306

类似 connnted

[root@server10 ~]# telnet 192.168.10.3 33062
Trying 192.168.10.3...
Connected to 192.168.10.3.
Escape character is '^]'.
J
5.7.36FY*Z5:x2[liOf     lAImysql_native_password

!#08S01Got packets out of orderConnection closed by foreign host.

综合练习

[yanfeng@server10 ~]$ sqlplus -S system/oracle@192.168.10.3:15210/xe <<< " select 'drop table LISHINAN.' || table_name || ' ;' from all_table
s where upper(owner)='LISHINAN';"  |grep drop | sqlplus -S system/oracle@192.168.10.3:15210/xe

shell 脚本编写

特殊符号

$#: shell脚本后面参数的个数
$1,$2,..$n :表示第一个参数到第n个参数
$*: 表示所有参数
$@: 表示所有参数,但是它是数字
$$: 当前的程序进程号
$?: 上一个命令退出返回值,如果是0,表示上一个命令是正确的,否则是错误。

if

if [condition] ; then
statements
fi

if [ condtions] ; then
statements
elif [condition] ; then

else

fi

例子:

if grep -q centos /etc/* -r 2>/dev/null ; then
fi

* [] = test
if [ $A -eq 5 ] ; then
fi
==>
if test $A -eq 5 ; then
fi

for

for file in * /etc/* /var/log/* 
do
    echo $file
done
for num in  1  2 3 4 5 6 
do
 echo $(( $num ** $num ))
done


for num in $(seq 1 10)
do
done

for user  in $( cat  userlist.txt )
do
  if [ $user = 'xiaosan'] ; then
      continue
  fi
  if [ $user = 'SYSTEM' ] ; then
    break
  fi 
  ./drop_oracle_user $user
done

until

while

cat /etc/services | while read line
do
echo $line
done

while [ $a -gt 5]
do
done
while [ $( wc -l /etc/services ) -lt 20000 ]
do
done

综合

[yanfeng@server10 ~]$ cat create_oracle_user
#!/bin/bash

echo "$1,$2,$3"
echo "参数个数 $# "

# -gt ,-lt, -le, -ge,-eq ,-ne
if [ $#  -gt 0 ] ; then
for user in $@
do
echo "creating $user user ..."
echo " create user $user identified by 123456 ;" | sqlplus -S system/oracle@192.168.10.3:15210/xe
echo "creating $user user ... done ! "
done
fi
作者:严锋  创建时间:2023-11-08 15:54
最后编辑:严锋  更新时间:2025-05-09 15:48