系统管理

# 查看系统版本
uname -a
lsb_release -a

# 查看cpu信息
cat /proc/cpuinfo

# 查看内存信息
cat /proc/meminfo

# 显示架构
arch

# 显示当前系统时间
date

# 设置时区
tzselect

Linux 关机

Linux一般是不用关机的

正确的关机流程为:sync > shutdown > reboot > halt

# 将数据由内存同步到硬盘中。
sync

# 关机指令
shutdown 

# 可以用man shutdown 查看帮助文档
man shutdown

# 立刻关机
shutdown -h now

# 指定20:25关机
shutdown -h 20:25

# 十分钟后关机
shutdown -h +10

# 系统重启
shutdown -r

# 重启 ,等同于 shutdown -r now
reboot

# 关闭系统 ,等同于 shutdown -h now 和 poweroff
halt

帮助命令

# 查看简要说明
whatis command

# 正则匹配
whatis -w "loca*"

# 详细说明文档
info command

# 查看帮助文档
man command

# 查询关键字
man -k keyword

# 查看程序binary文件所在路径
which command

# 查看程序的搜索路径
whereis command

Linux 文件基本属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

  • chown (change owner) : 修改所属用户与组。
  • chmod (change mode) : 修改用户的权限。

llls -l 查看文件的属性以及文件所属的用户和组

img

第一个属性是文件类型

  • 当为 d 则是目录
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

每个文件的属性由左边第一部分的 10 个字符来确定

img

更改文件属性

# chgrp:更改文件属组 -R 递归
chgrp [-R] 属组名 文件名
-c 或 --changes:效果类似"-v"参数,但仅回报更改的部分。
-f--quiet 或 --silent:  不显示错误信息。
-h 或 --no-dereference:  只对符号连接的文件作修改,而不改动其他任何相关文件。
-R 或 --recursive:  递归处理,将指定目录下的所有文件及子目录一并处理。
-v 或 --verbose:  显示指令执行过程。

# chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

# chmod:更改文件9个属性 
r:4
w:2
x:1
# xyz : 就是数字类型的权限属性,为 rwx 属性数值的相加。
chmod [-R] xyz 文件或目录

# 符号类型改变文件权限
# 如果我们需要将文件权限设置为 -rwxr-xr--
chmod u=rwx,g=rx,o=r test1

# 去掉权限
chmod a-x test1

Linux 文件与目录管理

处理目录的常用命令

  • ls(英文全拼:list files): 列出目录及文件名
    • -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
    • -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
    • -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
  • cd(英文全拼:change directory):切换目录
  • pwd(英文全拼:print work directory):显示目前的目录
    • -P :显示出确实的路径,而非使用连结 (link) 路径。
  • mkdir(英文全拼:make directory):创建一个新的目录
    • -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
    • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
  • rmdir(英文全拼:remove directory):删除一个空的目录
    • -p :从该目录起,一次删除多级空目录
  • cp(英文全拼:copy file): 复制文件或目录
    • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
    • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
    • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
    • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
    • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
    • -r:递归持续复制,用於目录的复制行为;(常用)
    • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
    • -u:若 destination 比 source 旧才升级 destination !
  • rm(英文全拼:remove): 删除文件或目录
    • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
    • -i :互动模式,在删除前会询问使用者是否动作
    • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
  • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
    • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

文件内容查看

Linux系统中使用以下命令来查看文件的内容:

  • cat 由第一行开始显示文件内容
    • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    • -E :将结尾的断行字节 $ 显示出来;
    • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
    • -T :将 [tab] 按键以 ^I 显示出来;
    • -v :列出一些看不出来的特殊字符
  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行

文件操作

查看当前目录下文件个数

find ./ | wc -l

目录切换

cd path

# 切换到home目录
cd
cd ~

# 切换到上一个工作目录
cd -

# 显示当前路径
pwd

列出目录项

# 时间排序
ls -lrt

查找目录及文件

# 查找目录及子目录
find / -name '*.c'

查看文件内容

# 显示文件内容同时显示行号
cat -n file

# 显示前10行
head -10 file

# 显示后10行
tail -10 file

# 查看两个文件的差别
diff file1 file2

# 动态显示文本最新信息
tail -f file

# 查找文件内容
egrep 'keyword' file

给文件增加别名

# 硬链接
ln sourcefile targetfile

# 软链接
ln -s sourcefile targetfile

管道和重定向

  • 批处理命令连接执行,使用 |
  • 串联: 使用分号;
  • 前面成功,则执行后面一条,否则,不执行:&&
  • 前面失败,则后一条执行: ||

示例:

ls /proc && echo  suss! || echo failed.
# 等同于
if ls /proc; then echo suss; else echo fail; fi

# 重定向
ls  proc/*.c > list 2> &l
# 等同于
ls  proc/*.c &> list

# 清空文件
:> a.txt

# 重定向
echo aa >> a.txt

文本处理

find文件查找

# 查找 txt 和 bash 文件
find . \( -name "*.txt" -o -name "*.bash" \) -print

# 正则方式查找 查找.list
find . -regex ".*\.list$"

# 否定参数 !
find . ! -regex ".*\.list$"

# 指定搜索深度
find . -maxdepth 4 -regex ".*\.list$"

# 最近第7天被访问过的所有文件
find . -atime 7 -type f -print
# 按时间
-atime 7	# 第七天
-atime -7	# 最近七天
-atime +7	# 7天前

# 按大小搜索 k M G
find . -type f -size +2M

# 按照权限查找
find . -type f -perm 644 -print	# 找具有可执行权限的所有文件

# 按用户查找
find . -type f -user weber -print	# 找用户weber所拥有的文件

grep文本搜索

# 多级目录中对文本递归搜索
grep "class" . -R -n

# -n 单行转为多行输出
ls | xargs -n 3

sort排序

ll | sort -d -k 5

# -n 按数字排序 -d 按字典序排序
# -r 逆序排序
# -k N 指定按第N列排序

uniq消除重复行

# 消除重复行
sort unsort.txt | uniq

# 统计各行在文件中出现的次数
sort unsort.txt | uniq -c

# 找出重复行
sort unsort.txt | uniq -d

用tr进行转换

# 加解密转换,替换对应字符
echo 12345 | tr '0-9' '9876543210'

# 删除所有数字
cat file | tr -d '0-9'

# 压缩字符
cat file | tr -s ' '

tr中可用各种字符类:

  • alnum:字母和数字
  • alpha:字母
  • digit:数字
  • space:空白字符
  • lower:小写
  • upper:大写
  • cntrl:控制(非可打印)字符
  • print:可打印字符

cut按列切分文本

# 截取文件的第2列和第4列
cut -f2,4 filename

# 去文件除第3列的所有列
cut -f3 --complement filename

# -d 指定定界符
cut -f2 -d";" filename
  • cut 取的范围
    • N- 第N个字段到结尾
    • -M 第1个字段为M
    • N-M N到M个字段
  • cut 取的单位
    • -b 以字节为单位
    • -c 以字符为单位
    • -f 以字段为单位(使用定界符)

paste 按列拼接文本

1
2

cat file2
colin
book

paste file1 file2
1 colin
2 book

paste file1 file2 -d ","
1,colin
2,book

wc 统计行和字符的工具

# 统计行
wc -l file
# 统计单词数
wc -w file
# 统计字符数
wc -c file

sed文本替换利器

# 替换每一行的第一处匹配的text
sed 's/text/replace_text/' file

# 全局替换
sed 's/text/replace_text/g' file

# 默认替换后是输出 ,如果要替换原文件 ,使用-i
sed -i 's/text/replace_text/g' file

# 变量转换
# 已匹配的字符串通过标记&来引用
echo this is en example | sed 's/\w\+/[&]/g'

awk数据流处理工具

  • awk脚本结构
awk ' BEGIN{ statements } statements2 END{ statements } '
  • 工作方式
  1. 执行begin中语句块;
  2. 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
  3. 执行end语句块;
不带参数
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print } END{ print "End" }'
特殊变量

NR:表示记录数量,在执行过程中对应当前行号;

NF:表示字段数量,在执行过程总对应当前行的字段数;

$0:这个变量包含执行过程中当前行的文本内容;

$1:第一个字段的文本内容;

$2:第二个字段的文本内容;

awk结合grep找到指定的服务,然后将其kill掉
ps -fe| grep msv8 | grep -v MFORWARD | awk '{print $2}' | xargs kill -9;
awk实现head、tail命令

head

awk 'NR<=10{print}' filename

tail

awk '{buffer[NR%10] = $0;} END{for(i=0;i<11;i++){ \
print buffer[i %10]} } ' filename

打印指定列

awk方式实现

ls -lrt | awk '{print $6}'

cut方式实现

ls -lrt | cut -f6

打印指定文本区域

确定行号

seq 100| awk 'NR==4,NR==6{print}'

确定文本

打印处于start_pattern 和end_pattern之间的文本:

awk '/start_pattern/, /end_pattern/' filename

示例:

seq 100 | awk '/13/,/15/'
cat /etc/passwd| awk '/mai.*mail/,/news.*news/'

awk常用内建函数

index(string,search_string):返回search_string在string中出现的位置

sub(regex,replacement_str,string):将正则匹配到的第一处内容替换为replacement_str;

match(regex,string):检查正则表达式是否能够匹配字符串;

length(string):返回字符串长度

echo | awk '{"grep root /etc/passwd" | getline cmdout; print length(cmdout) }'

printf 类似c语言中的printf,对输出进行格式化:

seq 10 | awk '{printf "->%4s\n", $1}'

迭代文件中的行、单词和字符

# while 循环
while read line;
do
echo $line;
done < file.txt

# 改成子shell:
cat file.txt | (while read line;do echo $line;done)

# awk法
cat file.txt| awk '{print}'

Linux 用户和用户组管理

添加用户账号

useradd 选项 用户名

# useradd -s /bin/sh -g group –G adm,root gem
# 添加一个用户 ,指定用户登录shell ,指定用户组 ,指定附加组 ,指定用户名
  • -c comment 指定一段注释性描述。
  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -g 用户组 指定用户所属的用户组。
  • -G 用户组,用户组 指定用户所属的附加组。
  • -s Shell文件 指定用户的登录Shell。
  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

删除帐号

userdel -r sam
# 常用的选项是 -r,它的作用是把用户的主目录一起删除。
# 此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

修改帐号

usermod 选项 用户名

# usermod -s /bin/ksh -d /home/z –g developer sam
# 修改用户 shell ,更改用户主目录 ,指定用户组

用户口令的管理

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名
  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

增加用户组

groupadd 选项 用户组

# groupadd -g 101 group2
# 添加一个标识是101 ,组名是group2 的用户组
  • -g GID 指定新用户组的组标识号(GID)。
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

删除用户组

groupmod 选项 用户组

# groupmod –g 10000 -n group3 group2
# 此命令将组group2的标识号改为10000,组名修改为group3
  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字

用户账号有关的系统文件

/etc/passwd

# cat /etc/passwd

root:x:0:0:root:/root:/bin/zsh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

# 一行记录对应一个用户 ,每行记录被冒号(:)分隔
# 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

/etc/shadow

/etc/passwd中一一对应

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

/etc/group

用户组的所有信息

组名:口令:组标识号:组内用户列表

添加批量用户

根据/etc/passwd格式写一个文件

user001:x:600:100:user:/home/user001:/bin/bash
user002:x:601:100:user:/home/user002:/bin/bash
user003:x:602:100:user:/home/user003:/bin/bash
user004:x:603:100:user:/home/user004:/bin/bash
user005:x:604:100:user:/home/user005:/bin/bash
user006:x:605:100:user:/home/user006:/bin/bash
newusers < user.txt
pwunconv

编写密码对照文件

user001:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456
chpasswd < passwd.txt
pwconv

没成功 ,后面再看看 🤔

Linux 磁盘管理

Linux 磁盘管理好坏直接关系到整个系统的性能问题。

Linux 磁盘管理常用三个命令为 dfdufdisk

  • df(英文全称:disk full):列出文件系统的整体磁盘使用量
    • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
    • -k :以 KBytes 的容量显示各文件系统;
    • -m :以 MBytes 的容量显示各文件系统;
    • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    • -H :以 M=1000K 取代 M=1024K 的进位方式;
    • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
    • -i :不用硬盘容量,而以 inode 的数量来显示
  • du(英文全称:disk used):检查磁盘空间使用量
    • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
    • -h :以人们较易读的容量格式 (G/M) 显示;
    • -s :列出总量而已,而不列出每个各别的目录占用容量;
    • -S :不包括子目录下的总计,与 -s 有点差别。
    • -k :以 KBytes 列出容量显示;
    • -m :以 MBytes 列出容量显示;
  • fdisk:用于磁盘分区
    • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

进程管理工具

查询进程

# 查看正在运行的进程信息
ps -ef

# 根据用户root查询进程
ps -lu root

# 查询进程id
pgrep -l re

# 完成格式显示进程
ps -ajx

# 查看端口占用进程状态
lsof -i:3306

分析线程栈

pmap PID

打包/压缩

打包

# 打包,不压缩
tar -cvf etc.tar /etc
# -c	打包选项
# -v	显示打包进度
# -f	使用档案文件

压缩

gzip demo.test

解包/解压

tar -xvf demo.tar

# 解压缩 gunzip bzip

# tar解压参数说明:
# -z 解压gz文件
# -j 解压bz2文件
# -J 解压xz文件

vim文本编辑器

img

yum 命令

yum [options] [command] [package ...]
  • **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • **package:**安装的包名。

yum常用命令

  • 列出所有可更新的软件清单命令:yum check-update
  • 更新所有软件命令:yum update
  • 仅安装指定的软件命令:yum install <package_name>
  • 仅更新指定的软件命令:yum update <package_name>
  • 列出所有可安裝的软件清单命令:yum list
  • 删除软件包命令:yum remove <package_name>
  • 查找软件包命令:yum search <keyword>
  • 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

国内 yum 源

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 下载
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv CentOS7-Base-163.repo CentOS-Base.repo

# 生成缓存
yum clean all
yum makecache