文章目录

  • 文件目录相关
  • 时间日期相关
  • 用户相关
  • 用户组相关
  • 文件权限相关
  • 磁盘分区相关
  • 搜索查找相关
  • 进程线程相关
  • 网络相关
  • 压缩和解压相关
  • 服务相关
  • 系统定时任务相关
  • RPM
  • Yum
  • 下载


文件目录相关

rm -rf /usr/local/tomcat9/logs/localhost_access_log.2018-* # 删除以某个字符开头的所有文件及目录

mkdir -p /data/mysql/backup/topdb_test/2019-01-28 # 建立多级文件目录 -p,父目录没有也可以创建

cp pre_basic.txt /opt/top_resources/db # 拷贝文件
cp -r /usr/tomcat9/webapps/Web/ /usr/nginx/webapps/Web/ # 拷贝目录,nginx下Web不存在
# \斜杠作用:加上斜杠就不会一直提示是否覆盖了。-r 递归处理,-f 强行复制
\cp -rf /opt/top_resources/resource /opt/ossfs/
\cp -rf /opt/ossfs/resource/45* /opt/top_resources/resource

head -n 1000 test.java # 显示前1000行
tail -n 1000 test.java # 显示最后1000行
tail -n +1000 test.java # 从1000行开始显示,显示1000行以后的
tail -f test.java # 实时追踪该档的所有更新
cat test.java | tail -n +1000 | head -n 2000 # 显示1000行到3000行
cat test.java | head -n 3000 | tail -n +1000 # 显示1000行到3000行
head -n 3000 | tail -n +1000 test.java # 显示1000行到3000行

ls -l>t.txt # 重定向(覆盖)
ls -l>>t.txt # 重定向(追加)

echo hello>>test1.java
echo $JAVA_HOME

# ln -s [原文件] [目标文件] 功能描述:给原文件创建一个软链接,软链接存放在目标文件目录
ln -s /opt/module/hadoop-2.1.2/ /opt/software/hadoop 

cd /opt
du -sh * # 查看/opt目录下所有文件及目录的大小
du -sh test.txt # 查看/opt目录下test.txt的大小

stat test.txt # 查看文件的创建时间和修改时间

wc -l test.txt # 查看文件有多少行
sed -n '4,6p' test.txt # 查看第4-6行的数据
sed -n 4p test.txt #查看文件中的第4行数据
sed -n '/hello/p' t.txt # 模式匹配hello并打印出来
sed -i "s/qwe/abc/g" test.txt # 将文件中的"qwe"字符串替换为"abc"

时间日期相关

date # 查看当前时间
date +%Y
date +%Y/%m/%d
date "+%Y/%m/%d %H:%M:%S"

date -d '1 days ago' # 1天前
date -d '-1 days' # 1天前
date -d yesterday +%Y/%m/%d
date -d next-day
date -d 'next-monday'

date -s "2020-02-29 20:00:00" # 设置系统时间

cal # 不加选项,显示本月日历
cal -3 # 显示上月,当前月,下月日历
cal 2020 # 显示2020年日历

用户相关

useradd dly # 添加用户dly
passwd dly # 给dly设置密码
id dly # 判断用户是否存在
su dly # 切换用户,只能获得用户的执行权限,不能获得环境变量
su - dly # 切换到用户并获得该用户的环境变量及执行权限
userdel dly # 删除用户,但保存用户主目录
userdel -r dly # 用户和主目录都删除
who # 看当前有哪些用户登录到了本台机器上
who am i # 显示登录用户的用户名
whoami # 显示自身用户名称
cat /etc/passwd # 查看创建了哪些用户
usermod -g dev dly # 修改用户,将dly加入dev组

# 设置普通用户具有root权限
vim /etc/sudoers
## Allow root to run any commands anywhere
root	ALL=(ALL)	ALL
dly	ALL=(ALL)	ALL
# 或者,配置成采用sudo命令时,不需要输入密码
dly	ALL=(ALL)	NOPASSWD:ALL
# 修改完su - dly登录dly,即可获得root权限进行操作

用户组相关

Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的增加、删除和修改实际上就是对/etc/group文件的更新。

groupadd dev # 添加组
groupdel dev # 删除组
groupmod -n dev_new dev # 修改dev组名为dev_new
cat /etc/group # 查看创建了哪些组

文件权限相关

[root@VM_0_6_centos opt]# ll
总用量 32
drwxr-xr-x. 2 root root  4096 9月   7 2017 rh
-rw-r--r--  1 root root 22044 12月  1 2018 shou.jpg
-rw-r--r--  1 root root   194 3月   1 00:43 t.txt
  • -rw-r–r-- 1 root root 194 12月 1 2018 shou.jpg
    文件类型与权限 链接数 属主 属组 文件大小 建立或最近修改时间 文件名
    链接数:如果是文件,链接数指的是硬链接个数;如果是目录,指的是子文件夹个数。
  • 没有权限会显示-
  • -rw-r–r--
  • 0位表示类型
  • - 代表文件
  • d 代表目录
  • c 字符流,装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
  • s socket
  • p 管道
  • l 链接文档(link file)
  • b 设备文件,装置文件里面的可供储存的接口设备(可随机存取装置)
  • 第1-3位确定属主(该文件的所有者)拥有该文件的权限 --User
  • 第4-6位确定属组(所有者的同组用户)拥有该文件的权限 --Group
  • 第7-9位确定其他用户拥有该文件的权限 --Other
  • rwx作用于文件和目录有不同的解释
  • 作用于文件
  • r:可读取,查看
  • w:可修改。但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
  • x:可以被系统执行
  • 作用于目录
  • r:可读取,ls查看目录内容
  • w:可以修改,目录内创建 + 删除 + 重命名目录
  • x:可以进入该目录
# chmod修改权限 chmod  [{ugoa}{+-=}{rwx}] [文件或目录] [mode=421 ]  [文件或目录]
# u:user,g:group,o:other,a:all
# +:增加权限,-:去掉权限,=:设置权限
# 111 = 4 + 2 + 1 = 7
chmod u+x t.txt
chmod g+x t.txt
chmod o+x t.txt
chmod a+x t.txt # 增加文件所有用户组可执行权限
chmod ug+w,o-rw t.txt # 同时修改不同用户权限,逗号分隔
chmod u=x t.txt # 使用=设置权限
chmod 777 t.txt
chmod -R 777 rh

# chown改变所有者 chown [最终用户] [文件或目录]	
chown dly t.txt
chown -R dly:dev test

# chgrp改变所属组 chgrp [最终用户组] [文件或目录]
chgrp dev t.txt

磁盘分区相关

# 查看分区
fdisk -l # 查看磁盘分区详情

# 查看硬盘
df -a # 列出所有的文件系统
df -k # 以 KBytes 的容量显示各文件系统
df -m # 以 MBytes 的容量显示各文件系统
df -h # 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
df -H # 以 M=1000K 取代 M=1024K 的进位方式
df -T # 显示文件系统类型,连同该 partition 的 filesystem 名称 (例如 ext3) 也列出
df -i # 不用硬盘容量,而以 inode 的数量来显示

# 挂载/卸载 mount [-t vfstype] [-o options] device dir
mkdir /mnt/cdrom # 建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom # 设备/dev/cdrom挂载到挂载点/mnt/cdrom
umount /mnt/cdrom # 卸载
vim /etc/fstab # 开机自动挂载添加如下
/dev/cdrom	/mnt/cdrom	iso9660 	defaults	0	0

搜索查找相关

| 管道符 表示将前一个命令的处理结果输出传递给后面的命令处理

  • which 搜索命令所在目录及别名信息
# which 命令
which ls
  • find 查找文件或目录
    find pathname -options [-print -exec -ok]
  • pathname 所查找的目录路径。/ 根目录,. 当前目录
  • options
  • -name :按照文件名查找文件
  • -perm :按照文件权限来查找文件
  • -user :按照文件属主来查找文件
  • -group :按照文件所属的组来查找文件
  • -mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
  • -atime
  • -ctime
  • -size n[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。
    +n大于,-n小于,n等于
  • -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
  • -newer file1 !file2查找更改时间比文件file1新但比文件file2旧的文件
  • -depth 先查找指定目录有无匹配文件,若无则再在子目录中查找
  • -type 查找某一类型的文件,如
    b:块设备文件
    d:目录
    e:字符设备文件
    p;管道文件
    l:符号链接文件
    f:普通文件
  • print -exec -ok
    print:find命令将匹配的文件输出到标准输出
    exec:find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为
    exec command {} ; (注意{}和\之间有空格)
    ok:和 -exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    注:
    在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的用处所在,特别是与find命令一起使用,exec会发起多个进程,而xargs只有一个。
find /opt -name *.txt 
find . -perm 777
find . -perm 755 -print | xargs chmod o-w # 查找权限为755的文件并传递给chmod处理 
find `pwd` -user dly -print
find . -mtime -5 # 查找当前目录下修改时间为5天内的文件及目录
find /opt -size +100c -size -2000c # 查找大于100字节小于2000字节的文件及目录
find /opt -size +50M # 查找>50M的文件及目录
find /opt -type d # 查找/opt目录下的所有目录
find /opt -type f -exec ls -l {} \; # 查找/opt目录下是否有普通文件,有则执行ls -l(注意:这里的命令不能写缩写,如写成ll,则找不到)
find /var -newer "myfile1" ! -newer "myfile2" -print # 查找/var目录下比myfile1新,但是比myfile2旧的所有文件。 
find /data/top_resources/resource -name 107* -type d| wc -l  # 查看某路径下107开头的文件夹个数
find /data/top_resources/resource -name 107* -type f| wc -l  # 查看某路径下107开头的文件个数
find /data/top_resources/resource -name 107* -type f # 查看某路径下107开头的文件
find /demo -name "*.js" |xargs cat|wc -l # 统计某目录下所有js文件的代码行数
wc -l `find /demo -name "*.js"`|tail -n 1# 统计某目录下所有js文件的代码行数
find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l	# 统计某目录下所有js文件的代码行数(过滤空行)
  • grep过滤查找
    grep + 参数 + 查找内容(一般为正则表达式)+ 源文件
  • 参数
    -c:只输出匹配行的计数。
    -I:不区分大小写(只适用于单字符)。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -n:显示匹配行及行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
  • 正则表达式
  • ^ :只匹配行首。
    ^a 匹配以a开头的行abc,a2e,a12,aaa,…
  • $ :只匹配行尾。
    如^a 匹配以a结尾的行bca,12a,aaa,…
    ^$ :匹配空行
    ^.$ :匹配包含一个字符的行
  • * :匹配0个或多个此单字符。
    如(a)* 匹配 空,a,aa,aaa,…
  • [] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,
    如[1-5]表示[12345]
    [a-z] :任意小写字母
    [A-Za-z] :任意大小写字母
    [S,s] :匹配大小写S
  • \ :只用来屏蔽一个元字符的特殊含义。
    如*,’,",|,+,^,. 等
  • .:(点)只匹配任意单字符。
  • pattern{n}:只用来匹配前面pattern出现的次数n为次数。如a{2}匹配aa。
    pattern{n,}:含义同上,但次数最少为n。如a{2,}匹配aa,aaa,aaaa,…
    pattern{n,m}:含义同上,但次数在n和m之间。如a{2,4}匹配aa,aaa,aaaa三个
ls | grep -n test # 查找包含test的文件,显示匹配行及行号
grep ^[^210] myfile # 匹配myfile中以非2、1、0开头的行 
grep "[5-8][6-9][0-3]" myfile # 匹配myfile中第一位为5|6|7|8,第二位6|7|8|9,第三位为0|1|2|3的三个字符的行 
grep "4\{2,4\}" myfile # 匹配myfile中含有44,444或4444的行 
grep "\?" myfile # 匹配myfile中含有任意字符的行 
grep "5[[:digit:]][[:digit:]]" myfile # 匹配myfile中含有5开头接下去两位都是数字的行。 
ls /opt/top_resources/resource | grep "^t" | wc -l # 查看某个路径下以d开头的文件及文件夹个数 
ls -l|grep "^d">/data/top_resources/d_server.txt # 将某个目录下的文件夹输出到文本文档
# 查看文件中某个字符有多少个
grep -w "192.168.1.1" ttt.txt | wc -w 
grep -w "192.168.1.1" ttt.txt | wc -l 
cat ttt.txt | grep '192.168.1.1'
# 查找文件中有多少ip。-c : 计算查找到的结果数量。-E : 使用正则表达式。
grep -cE "[0-9]+.[0-9]+.[0-9]+.[0-9]+" abc.txt

grep命令类名 :
[[:upper:]] 表示[A-Z]
[[:alnum:]] 表示[0-9a-zA-Z]
[[:lower:]] 表示[a-z]
[[:space:]] 表示空格或者tab键
[[:digit:]] 表示[0-9]
[[:alpha:]] 表示[a-zA-Z]

进程线程相关

查看进程

ps aux # 查看所有进程
ps aux | grep java # 查看java进程
ps -ef | grep mysql # 查看进程
ls -l /proc/进程号/cwd
kill -9 进程号 # 终止进程。-9 强迫进程立即停止

USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位KB;
RSS:该进程占用实际物理内存的大小,单位KB;
TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。
STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名

查看进程树

pstree -p # 显示进程的PID
pstree -u # 显示进程的所属用户

top 实时显示 process 的动态

top -d 1 # 指定top命令每隔几秒更新。默认是3秒
top -i # 使top不显示任何闲置或者僵死进程
top -p 3333 # 通过指定监控进程ID来仅仅监控某个进程的状态
  • 操作选项
  • P:以CPU使用率排序,默认就是此项
  • M:以内存的使用率排序
  • N:以PID排序
  • q:退出top
  • 查询结果解释
  • 第一行

内容

说明

12:26:46

系统当前时间

up 1 day, 13:32

系统的运行时间,本机已经运行1天13小时32分钟

2 users

当前登录了两个用户

load average: 0.00, 0.00, 0.00

系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。

  • 第二行

Tasks: 95 total

系统中的进程总数

1 running

正在运行的进程数

94 sleeping

睡眠的进程

0 stopped

正在停止的进程

0 zombie

僵尸进程。如果不是0,需要手工检查僵尸进程

  • 第三行

Cpu(s): 0.1%us

用户模式占用的CPU百分比

0.1%sy

系统模式占用的CPU百分比

0.0%ni

改变过优先级的用户进程占用的CPU百分比

99.7%id

空闲CPU的CPU百分比

0.1%wa

等待输入/输出的进程的占用CPU百分比

0.0%hi

硬中断请求服务占用的CPU百分比

0.1%si

软中断请求服务占用的CPU百分比

0.0%st

st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。

  • 第四行

Mem: 625344k total

物理内存的总量,单位KB

571504k used

已经使用的物理内存数量

53840k free

空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了

65800k buffers

作为缓冲的内存数量

  • 第五行

Swap: 524280k total

交换分区(虚拟内存)的总大小

0k used

已经使用的交互分区的大小

524280k free

空闲交换分区的大小

409280k cached

作为缓存的交互分区的大小

  • 第六行(空行)
  • 第七行
    PID — 进程id
    USER — 进程所有者
    PR — 进程优先级
    NI — nice值。负值表示高优先级,正值表示低优先级
    VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR — 共享内存大小,单位kb
    S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU — 上次更新到现在的CPU时间占用百分比
    %MEM — 进程使用的物理内存百分比
    TIME+ — 进程使用的CPU时间总计,单位1/100秒
    COMMAND — 进程名称(命令名/命令行)

网络相关

netstat -anp # 此命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传递数据、或是路由表内容
netstat -anp | grep 50070 # 查看端口50070的使用情况

压缩和解压相关

http://blog.51cto.com/dingtongxue1990/1703021

# gzip/gunzip压缩  gzip + 文件
# 1.只能压缩文件不能压缩目录;2.且不保留原来文件
gzip test.txt # 压缩
gunzip test.txt.gz # 解压

# zip/unzip压缩 zip + 参数 + XXX.zip + 将要压缩的内容
# 1.可以压缩目录;2.保留原来文件
zip test.zip test1.java test2.java # 压缩test1.java,test2.java
unzip test.zip # 解压
cd /usr/local/tomcat9/webapps/web
zip -r html.zip * # 压缩目录
cd /var/lib/mysql/backup/topdb_online
zip -r ./Top_Online.git.zip ./Top_Online.git # 压缩目录
unzip Top_Doc.git.zip

# tar打包 tar + 参数 + XXX.tar.gz + 将要打包进去的内容
# 参数:
# -z 打包同时压缩
# -x 解包.tar文件
# -c 产生.tar打包文件
# -v 显示详细信息
# -f 指定压缩后的文件名
tar -zcvf test.tar.gz test1.java test2.java # 打包
tar -zcvf test.tar.gz test # 压缩目录
tar -zxvf test.tar.gz # 解压到当前目录
tar -zxvf test.tar.gz -C /opt # 解压到/opt

服务相关

service network status  # 查看network服务的状态
service network stop    # 停止network服务
service network start   # 启动network服务
service network restart # 重启network服务
service --status-all    # 查看系统中所有的后台服务

# chkconfig 对服务的开启管理
chkconfig   						# 查看所有服务器自启配置
chkconfig iptables off  # 关掉防火墙服务的开机自启动
chkconfig iptables on  	# 开启防火墙服务的开机自启动

系统定时任务相关


service crond start # 启动服务  
service crond stop # 关闭服务  
service crond restart # 重启服务  
service crond reload # 重新载入配置

crontab -e # 编辑crontab定时任务
30 0 * * * /usr/local/batch/sync_data_online.sh # 每天0:30执行命令
0 3 * * 1 /usr/local/batch/market/sync_data_online.sh # 每周一的3:00执行命令
0 5 1,15 * * /usr/local/batch/test.sh # 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 /usr/local/batch/test.sh # 每周一到周五的凌晨4点40分执行命令
*/10 4 * * *  /usr/local/batch/test.sh # 凌晨4点每隔10分钟执行一次
0 0 1,15 * 1 /bin/echo "11" >> /tmp/test # 每月1号和15号,每周1的0点0分执行命令。(星期几和几号最好不要同时出现,容易出现混乱)

cat /etc/crontab # 查看定时任务文件
cat /var/spool/cron/root # 查看root用户下的定时任务
/var/log/cron # 定时任务的log路径

格式:* * * * * 执行的任务

项目

含义

范围

第一个“*”

一小时当中的第几分钟

0-59

第二个“*”

一天当中的第几小时

0-23

第三个“*”

一个月当中的第几天

1-31

第四个“*”

一年当中的第几月

1-12

第五个“*”

一周当中的星期几

0-7(0和7都代表星期日)

特殊符号

含义

*

代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。


代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令

-

代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令。

*/n

代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令。

RPM

RPM(RedHat Package Manager),Rethat软件包管理工具,是Linux这系列操作系统里面的打包安装工具。

Apache-1.3.23-11.i386.rpm
- “apache” 软件名称
- “1.3.23-11”软件的版本号,主版本和此版本
- “i386”是软件所运行的硬件平台
- “rpm”文件扩展名,代表RPM包

# 查询
rpm -qa	# 查询安装的所有rpm软件包
rpm -qa | grep mysql # 检测是否存在mysql包

# 卸载
rpm -e firefox
rpm -e --nodeps firefox # 不管冲突,强制卸载

# 安装
# -i=install,安装
#	-v=verbose,显示详细信息
#	-h=hash,进度条
#	--nodeps,不检测依赖进度,不管冲突,强制安装
rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
rpm -ivh --nodeps firefox-45.0.1-1.el6.centos.x86_64.rpm

Yum

# -y yes
yum install -y xxx
yum install -y openssl openssl-devel
yum -y remove xxx
yum erase xxx # 删除库

下载

wget http://nginx.org/download/nginx-1.14.0.tar.gz