系统管理
# 查看系统版本
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) : 修改用户的权限。
ll
或 ls -l
查看文件的属性以及文件所属的用户和组
第一个属性是文件类型
- 当为 d 则是目录
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
每个文件的属性由左边第一部分的 10 个字符来确定
更改文件属性
# 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 } '
- 工作方式
- 执行begin中语句块;
- 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
- 执行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 磁盘管理常用三个命令为 df、du 和 fdisk。
- 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文本编辑器
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
: 清除缓存目录下的 headersyum clean oldheaders
: 清除缓存目录下旧的 headersyum 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