Linux系统
Linux系统的一些知识框架
1.概念类
字和字符
文本和word之列
交互式和非交互式
vim nano sed
面向行的和面向屏幕的
面向行的
面向屏幕--分页 less pg 命令 分页显示文件内容 命令:pg (page)
命令行和图形界面
shell 内部命令和外部命令
远程和本地
本地命令行和图形界面
远程命令行和图形界面
主机和终端
参数方式
Unix 风格
BSD 风格
GNU 风格
其他
-- 长选项 短选项 必选项 可选项 可组合 不可组合 不带- 带-个 带--个
服务前台和后台
bg fg
帮助系统
内部命令: help
外部命令: man info -h --help
type history
2.动作类
--增删改查-- 查-确认状况 动作反馈
--查询-了解和查看
框架: who when where what which why how
命令: whoami locate
echo cat head tail ls
echo $JAVA_HOME
uname -a :显示系统名、节点名称、操作系统的发行版号、操作系统版本、运行系统的机器 ID 号
env
printenv
-搜索和匹配
find regex
-动作类 -- 增加 删除 修改 查-验证
cd
chmod
文件:
复制 创建 创建目录 创建文件
改名 改内容 移动位置 改权限 替换
删除文件
3.层级类
三大层级
资源和硬件 文件和用户 进程和服务
01.资源和硬件 本地和网络 cpu 内存 硬盘 内核 网络 lshw
cpu: lscpu
内存 free
显存: lspci | grep -i nvidia
硬盘 lsblk df du mount umount
网络 ping ifconfig netstat traceroute host ip / ip addr
时间 data
设备: lsusb `lsusb`查看USB设备信息
lspci `命令查看系统中PCI总线和连接了哪些设备
内核: cat /proc/version
02.文件和用户 ls tree
cd pwd touch cp scp rm rmdir chmod mv tar wget
su sudo uname whoami useradd userdel usermod id group
03.进程与服务: ps pstree top vmstat fuser lsof
jobs fg bg & at crontab
systemctl journalctl
export source fork exec sh kill
`lsof`显示正在打开的Linux文件、网络端口和进程
补充:硬件-硬件驱动-内核
service --status-all chkconfig --list init
rsyslog.service /logrotate
tail -f 持续显示文件信息
Nvidia自带了一个 nvidia-smi 的命令行工具,会显示显存使用情况
4.流程类--目的
安装程序 下载-移动-改变位置-解压-修改权限-配置环境变量-运行
编译程序 configure make make install
数据分析 导入数据-管道-预处理-数据统计-数据输出
流程-- 给出命令,给出验证命令成功的标志
安装程序
01.源码编译安装
wget tar cd mv chmod configure make install
02.编译包安装
wget tar mkdir cd ./idea.sh
03.编译包在线
RPM (RedHat Package Manager) -- YUM(Yellow dog Updater Modified): 基于RPM包构建的软件更新机制
sudo yum install -y git
dpkg APT 软件管理系统
sudo apt-get install git
5.常识记忆类
cat /proc/version
---静态信息--动态信息
# 操作系统类型 操作系统版本 操作系统位数
lsb_release -a
uname -a
cat /proc/version
# cpu
lscpu
cat /proc/cpuinfo
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
查看CPU的主频
cat /proc/cpuinfo |grep MHz|uniq
# 内存
free -h
vmstat -s
#查看盘的情况lsblk命令的英文是“list block
lsbsk
df -h
du --max-depth=1 -h
fdisk -l gdisk
mount
#网卡信息
ifconfig 当前主机的ip地址和网卡信息
ping
# 文件-磁盘 程序-进程-服务 用户-权限
6.逻辑思维类
###1.了解和判断--命令类型
$ type mv
mv is hashed (/bin/mv)
$ type -a echo
echo is a shell builtin
echo is /bin/echo
type命令可以查询命令类型
说明:
内部命令:命令本身存放在系统内存中,是shell程序的一部分,这些命令由shell程序内部完成运行,不需要添加运行程序。
is a shell builtin --------->>> 表示该命令为内部命令
外部命令:因为命令功能比较大,所以在系统启动加载时不会存放在内存中,只有在使用时才会加载到内存中。
is hashed (/bin/mv) ---------->>> 表示命令为外部命令
第一次,按path搜索命令文件再次运行,已hash在内存中
####Linux系统的查询命令顺序
alias builtin-内部命令 外部命令/hash-已经通过哈希加密 PATH
查看内部命令 enable -a 利用enable 查看shell中已集成的内部命令
查看hash的命令 hash
PATH 可以通过 echo $PATH 或者 env
~/.bash_profile ~/.bashrc
~/.bash_profile 是交互式、login方式进入bash运行的,
~/.bashrc是交互式non-login方式进入bash运行的,通常二者设置大致相同,所以通常前者会调用后者。
/etc/profile
###2.搜索和查找--命令位置
$ which mv
/bin/mv
$ whereis mv
mv: /bin/mv /usr/share/man/man1/mv.1.gz
which whereis locate find
#file指令, 文件的类型
#文件查看 head -n 100 tail cat less more
###3.详细的内容和案例
whatis mv
man mv
info mv
mv --help
###其他
~ 帐户的 home 目录
$
# root 权限
7.解释说明
0.命令方式--空格 空白符
find ./ -type f
通配符-- 通配符必须用引号引用起来,find 取反 ! 或者'!' ii ignorecase
find ./ ! -name "*.jpg"
ls -al ./
1.重定向:
一: Linux系统预留可三个文件描述符:0、1和2, 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr)
/dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。
二: 重定向的符号有两个:>或>>
&> - 以覆盖的方式将正确输出和错误输出同时输出到指定位置
&>> - 以追加的方式将正确输出和错误输出同时输出到指定位置
2>&1 - 将错误输出以正确输出的形式输出到指定位置
> /dev/null 作用是将标准输出1重定向到/dev/null
2>/dev/null 把错误输出到
> /dev/null 2>&1 命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中
1>/dev/null 2>&1 等价于 >/dev/null 2>&1 标准输出和错误输出都进了“黑洞”
2>&1 >/dev/null 是标准输出进了黑洞,错误输出打印到屏幕
三: tee
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
2.工作job
01.fg、bg、jobs、&、ctrl + z都是跟系统任务
jobsID PID
1. 首次让任务进入后台 &
2. jobs 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;
Job的状态 -- running, stopped, Terminated
02.nohup
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
案例:
01.后台执行 root 目录下的 runoob.sh 脚本 : nohup /root/runoob.sh &
02.后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:
nohup /root/runoob.sh > runoob.log 2>&1 &
2>&1 解释:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文
3.管道
01.多个命令在同一行,用分号划分
02.多个命令连续执行
管道符号 |
xargs -i(insert) 允许{}作为占位符 自定义占位符
4.搜索
type 命令搜索--内部命令 -外部命令-PATH
which whereis locate find
变量 变量值 反引号
5.查看日志
服务 systemd
systemctl
日志
内存日志: journald.service
硬盘日志: rsyslog.service
日志轮循: logrotate
日志分析: logwatch
挂载的操作
lsblk
df -h
sudo umount -f /media/test
fuser -muv /media/test
fuser -kv /media/test
kill -9
sudo mount /dev/sdb1 /media/test
说明:
####结束进程
killall kill processes by name killall命令用于杀死指定名字的进程
kill terminate a process
fuser 使用文件、文件结构或者套节字来表示识别进程
常用的两个功能:查看需要的进程和要kill查到的进程
####查看端口占用
netstat -ntlp | grep 22
lsof -i:22
####查看文件占用
fuser -mv /opt
lsof /opt
1.磁盘空间根目录占满,命令逐级查找大文件
du -h -x --max-depth=1
2. fuser查询并关闭使用相应文件系统的进程
fuser -mv /mytest
3.排查删掉的数据是否还在占用磁盘空间,如果有进程占用文件,kill -9 PID 可以释放
通过 lsof 这个命令可以获取一个已经被删除但仍然被应用程序占用的文件列表
lsof | grep delete:
检查/tmp下最大的三个数据文件
du -s /tmp/*|sort -nr|head -3
进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,可以通过如下命令完成:echo " " >/tmp/acess.log
ctrl + h 显示隐藏的文件夹
4.磁盘的IO iostat
iostat -x
磁盘的平均响应时间 <5ms,磁盘使用率>80 磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB
rqm/s:每秒这个设备相关的读取请求有多少被Merge了
rsec/s:每秒读取的扇区数
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
5.挂载
/IP地址是windows地址,后面跟上windows上的共享目录,后面的路径是linux上的挂载路径
mount -t cifs -o username="共享用户",password="密码" //ip/sharing_folder /mountpoint
sudo mount -t cifs -o username=Everyone //192.111.111.111/win /home/sk/win
NFS(Network File System)即网络文件系统
CIFS(Common Internet File System) CIFS是一种通用网络文件系统,主要用于网络设备之间的文件共享
CIFS可以在linux系统和windows系统之间共享文件
提供CIFS的服务是SAMBA: samba samba-common samba-client
samba服务的组成部分
samba在linux系统上的服务名称:smb
samba – 服务端应用程序
samba-common – 用来提供一些配置文件
samba-client – 客户端应用程序
主配置文件:/etc/samba/smb.conf
服务端口:通常使用TCP/445进行所有连接。
还使用UDP137、UDP138和TCP/139进行向后兼容
mount -r /dev/sdb1 /media/data
1. -t
vfstype 指定文件系统的类型,通常不必指定。
nfs -UNIX(LINUX) 文件网络共享
2. -o
options 主要用来描述设备或档案的挂接方式。常用的参数有:
3.device 要挂接(mount)的设备。
4.dir设备在系统上的挂接点(mount point)
Windows命令行
cmd是command的缩写.即命令行
命令 MS-DOS Linux
列举文件 dir ls
查看文件 type cat
显示你在文件系统中的位置 chdir pwd
用指定的路径(绝对路径,absolute path)来改换目录 cd 路径名
显示文件目录 tree
用一个相对路径(relative path)来改换目录 cd .. cd ..
把输出“回响”到屏幕上 echo echo echo this message
查看文件 more less([d]) less thisfile.txt
搜索 where where命令显示命令所在的路径
在文件中寻找字串 find grep grep 词或词组 thisfile.txt
显示命令帮助 命令 /? man([c])
创建目录 mkdir mkdir mkdir 目录
复制文件 copy cp
转移文件 move mv
重新命名文件 ren mv([e]) mv thisfile.txt thatfile.txt
程序
查看所有进程 tasklist
查看进程号信息: tasklist |findstr 9999
杀进程: taskkill -f -t -im javaw.exe;
设置环境变量
set path=G:ant
ocketmq-all-4.2.0;%path%;
其他相关
explorer ------- 打开资源管理器
taskmgr ------- 任务管理器
windows变量
cmd
%APPDATA% C:Users用户名AppDataRoaming
%HOMEPATH% C:Users用户名
%USERPROFILE% C:Users用户名
%TEMP%和%TMP% C:Users用户名AppDataLocalTemp
%SystemRoot% C:Windows
%WINDIR% C:Windows
windows进程
explorer.exe是Windows程序管理器或者文件资源管理器,
它用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用。
%SystemRoot%explorer.exe
iexplore.exe 是浏览器进程
示例
type c:windowssystem32driversetchosts
net start 查看开启了哪些 Windows 服务
echo %PATH% Linux中是 echo $PATH
退出
exit
ver uname -a
点击 F7 或者 doskey /history 类似于 linux history
查看最近操作 recent
执行情况
bat文件是dos下的批处理文件,批处理文件是无格式的文本文件,
它包含一条或多条命令,后缀为.cmd或.bat
区分文件类型
window中默认情况下有一下后缀名的文件可以直接执行:
.EXE 最常见的可执行文件
.MSI 一般用来做安装文件
.VBS 这个是vb脚本文件
.JS 这个是java脚本文件
.CMD 这个是操作命令文件
.BAT 这个是批处理文件
.SCR 这个一般是屏保之类的
.REG 这个是导入注册表文件
Linux与Windows不同,不是根据扩展名来区分文件类型的
UNIX/LINUX 平台下三种主要的可执行文件格式:
a.out(assembler and link editor output 汇编器和链接编辑器的输出)
COFF(Common Object File Format 通用对象文件格式)、
ELF(Executable and Linking Format 可执行和链接格式
积累的一些操作
重命名
#01.
unable to execute /usr/bin/rename: Argument list too long
#02. find需要知道exec的参数何时终止 ;
find /old -name '*.*' -exec mv {} /new ;
# 03批量重命名
find ./ -name "*.jpeg" |xargs -i sudo rename -v 's/.jpeg/.jpg/' {}
# <() 操作 类似于匿名文件
comm <(find ./ -maxdepth 1 -type f -name "test*.zip" |cut -d . -f1-2 |sort) <( find ./ -maxdepth 1 -type d -name "test*"|sort )
### 比较两者之间的差异,然后删除 uniq -d表示仅显示重复行
sort <(find ./ -maxdepth 1 -type f -name "test*.zip" |cut -d . -f1-2 ) <( find ./ -maxdepth 1 -type d -name "test*" ) |uniq -d | xargs -i rm -v {}.zip
批量查看
--查看当前目录下每个子目录的文件数量
find ./ -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l);echo "$dir :$count"; done
-- 查看当前目录压缩文件内的图像个数
find ./ -maxdepth 1 -type f -name "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep ".jpg" |wc -l); echo "$dir : $count "; done
--命令说明
01.linux变量赋值 :变量赋值的格式:变量名=值
注意: 变量名和和值与=之间不要有空格 bash中变量赋值,等号两边均不能有空格存在;
count=$(unzip -v "$dir" |grep ".jpg" |wc -l); 对的格式
count = $(unzip -v "$dir" |grep ".jpg" |wc -l);错误格式
02.:查看压缩文件目录,但不解压 -v list verbosely/show version info
unzip -v ./345.zip | wc -l
03.shell中while read line的一种用法:
read通过输入重定向,把file的第一行所有的内容赋值给变量line
while read line 是一次性将文件信息读入并按行赋值给变量line ,
while中使用重定向机制,文件中的所有信息都被读入并重定向给了整个while 语句中的line 变量
04.find
--不是以Test开头的有哪些
find . -name "[^Test]*"
简名 全名 中文名 含义
atime access time 访问时间 文件中的数据库最后被访问的时间
mtime modify time 修改时间 文件内容被修改的最后时间
ctime change time 变化时间 文件的元数据发生变化。比如权限,所有者等
ls -l #默认的ls -l显示的是mtime
ls -l --time=ctime #列出ctime
find -amin -mmin -cmin (注意只能以time、min作为单位)
##进一步完善
find ./ -maxdepth 1 -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done
find ./ -maxdepth 1 -ctime 0 -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done
find ./ -maxdepth 1 -newermt '2021-10-01' ! -newermt '2021-10-21' -type f -iname "*.zip" | while read dir; do count=$(unzip -v "$dir" |grep -i ".jpg" |wc -l); echo "$dir : $count "; done
-newermt '2021-10-01' ! -newermt '2021-10-21
find -newermt的真正形式是find -newerXY {variable} X可选a,c,m; Y可选a,c,m,t。
2. 进行反选,在find中加入 !
Linux目录下面,如果有文件或文档名中带有空格, 可以考虑将空格转化其它的字符,比如将空格转化为“_”这种下划线
find . -type f -name "* *" -print |while read name; do rep_nm=$(echo $name | tr ' ' '_') if [[ $name != $rep_nm ]]; then mv "$name" $rep_nm fi done
shell命令
循环-常用循环方式
for i in `cat $FILENAME`
do
echo $i
done
while read line
do
echo $line
done < file
command | while read line
do
…
done
shell 一行写一个循环
管道命令
数据重定向
while read f_nm; do echo "$f_nm "; done < /opt/test.txt
cat /opt/test.txt | while read f_nm ;do echo "$f_nm "; done
for file_nm in `cat /opt/test.txt` ;do echo $file_nm; done
for file_nm in $(cat /opt/test.txt) ;do echo $file_nm; done
shell脚本
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
视角:
硬件: CPU机制:寄存器机制、多级缓存机制、分段机制、分页机制、中断机制、多核同步机制
Linux的开发者(内核开发 和后台程序开发 和应用开发)
Linux系统管理员
Linux桌面用户
私服
echo 1.10.10.10 repo.test.com >> /etc/hosts
cd /etc/apt/
cp sources.list{,_bak}
echo deb https://repo.test.com/repository/apt-aliyun/ bionic main restricted universe multiverse >/etc/apt/sources.list
echo deb https://repo.test.com/repository/apt-aliyun/ bionic-security main restricted universe multiverse >>/etc/apt/sources.list
--非常不安全
sudo apt-get update --allow-insecure-repositories
sudo apt-get install vim --allow-unauthenticated