Linux笔记
Posted dovienson
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux笔记相关的知识,希望对你有一定的参考价值。
一。基础思想
-
一切皆文件。
-
两条权限原则:
- 权限分组原则
- 权限最小原则
-
su是切换用户,而sudo则是用root权限执行某操作( 普通用户+sudo=安全)
-
Linux目录
- 系统只存在一颗文件树、从==/==开始,所有的文件都挂载在这个节点上。 ( 树型目录 )
- Windows系统存在多颗文件树,以盘开始。如==C:\\==D:\\
- 注意:两者斜杆不一样,正反斜杆。Linix正斜杆,Windows反斜杠。
-
没有返回值就是成功:执行Linux命令,无返回值即成功,有反回值有可能成功也有可能失败。
-
关机前需要先同步数据
- 虽然如今Linux系统已默认执行sync。但是为了避免数据丢失,实现手动sync是好习惯。
sync #同步数据 shutdown -h now #立即关机 shutdown -h 1 #1分钟之后关闭计算机 reboot #立即重启
-
在众多Shell中,Linux系统中的文件系统因为不同的类别,颜色都是不一样的。
d:目录 -:文件 l:链接
-
r4、w2、x1:读写执行分别对应二进制111。
-
记住、用户目录 /etc/passwd
-
只有当要修改文件时才需要vim,其余时cat即可、或者head、less。
-
可执行文件是绿色的。
-
ping百度检查设备是否联网
ping baidu.com
-
tab提示很好用,单机或者双击的规则我已领悟。
-
-h在Linux中是非常重要的一个参数,其在绝大多数情况下都表示显示计量单位,即可以以人可以读懂的方式去显示。如:
ls -lh df -h #查看磁盘使用情况 du -h #查看指定的目录(默认是当前目录)下的文件占用空间情况
-
清空或者截断文件
> a.txt 或者 echo "" > a.txt
-
日常使用which来查询指令出处。
-
第三方软件安装应所在位置:/opt
二。基础操作
-
ls指令
ls -alh #隐藏文件、长列表、方便阅读 ls -R #递归子目录 ls -r #反序显示 ls -S #Size,以文件大小顺序输出 ls -t #按修改时间 '注意 -r:reverse -R:Recursive,常用于连续递归子目录
- 第2列:硬链接数或者子目录数
- 3/4:文件属主与属组
- 5:文件大小(单位:字节),如果是文件夹则显示4096字节,文件则显示其内容的实际大小。
- 6/7/8:最后修改日期
- 9:文件名
-
mkdir递归创建目录
mkdir -p demo/1..100
-
rmdir:仅能删除非空的目录。
-
rm详解
'技巧' rm -rf /tmp #删除这个目录 rm -rf /tmp/* #删除这个目录下的所有文件,但不包括这个文件本身
-
文件查看汇总
cat # 第一行开始查看文件 tac # 倒序 nl # 显示行号(相当cat -n) more # less #一页一页的显示,比more更好 head -5 #头 tail -10 #尾
-
cat、tac详解
- 优势:不会修改文件内容,安全。
cat -n txt '显示行号' cat a1 a2 a3 ... '拼接文本' cat > a.txt '等待输入,并且重定向至新文本' tac #反序cat
-
head与tail
head -5 txt tail -5 txt tail -f txt '实时查看文件末尾'
-
less指令
- 优势:**动态加载。**more的升级版,less在显示文件内容时并不会整个加载,而是会根据显示需要加载动态加载,在打开大文件时具备无可比拟的优势。
'less中查找文本' /abd "向下查找 ?abc "向上查找 n 下一条 N 上一条
-
sort与uniq
- uniq只能作用于连续且重复的行。
ls -l | sort ls -l | sort -r #倒序 sort a.txt | uniq -c '-c为--count,统计重复行数 uniq -d #只输出重复行 uniq -i #忽略大小写
-
cut详解
"参数:-f输出字段,-c输出范围字符"
ls -lh | cut -d " " -f 1 | cut -c 2-10
- awk详解
- 代替cut(cut功能受限),但是远没有cut来的方便。
- awk实际上是三位创始人的名字首字母。
- awk只能使用单引号,支持C/C++的写法
'awk分割:以空格为分隔符( 连续空格都能算作一个 ),然后写awk表达式(支持C语言)
ls -lh | awk -F ' ' 'print $5,$9'
#或者
ls -lh | awk -F ' ' 'printf("%s\\t%s\\n",$5,$9)'
-
df与du磁盘查看
df -h 'df查看整个系统' df -hl '-l,将列表限制为本地文件系统 du -a -h 'du查看当前文件夹、局部' du -h /home '指定目录'
-
free内存使用情况查看
free -h '-h人性化
-
tree文件树显示
yum -y istall tree tree /tmp
-
==\\==指令
- 允许命令换行,人性化操作。
ls -l \\ -a
-
cp复制
- -u只更新、不复制重复的且同时间的项目,加快大文件复制
cp 1.txt 2.txt -i #交互,防止直接覆盖掉原有文件夹 -u #只更新,不复制重复的且同时间的项目--->加快大文件复制 -r #递归
-
ln软、硬链接
ln a b ln -s a b
-
history
history #显示全部历史记录 history 10 #只显示10条 !2022 #执行第2022条记录 !! #执行上一条指令
-
date与cal
date #显示当前时间 date "+%Y-%m-%d-%H-%M%-%S" #显示指定时间 date -s "9999-10-20" #修改系统时间 cal #正常显示日历 cal 2022 #显示年日历 cal 10 2000 #月份在前
-
which指令
which ls
-
find与locate(获取路径)
-
区别:
-
find:基于硬盘查找,会从指定的目录向下递归遍历所有子目录,速度慢。
-
locate:基于数据库索引查找,需要事先执行数据库建立索引语句,速度较快。
-
-
简单使用:
find /home -name hello.txt #正常查找 find /home -name *.txt #递归查找 find /home -user thinkstu #查找用户 find /home -size +100M #小于100MB find /home -size -100M #大于100MB
yum -y install mlocate updatedb locate xxx
-
范例:
find /etc -type d # 文件 find /etc -type f # 文件夹 find /etc -type l "但是其实grep确实也能实现这一点,方法多样" find / -type f -name "*.jpg" -size +1M |wc -l 'find指令扩展:直接删除搜索出来的文件 find find / -type f -name "*.jpg" -delete
-
-
grep
-
前景说明:常用来和cat进行管道的组合使用
-
参数含义:
-n '结果显示行号 -i '忽略大小写 -R '递归的在目录中查找 -v '只匹配不相符合的行
-
范例:
cat /tmp/1.txt | grep -in "yes" grep -in "yes" /tmp/1.txt
-
-
alias别名、unalias取消别名
alias #显示系统所有的别名 alias custom='ls -l'
- 持久化: /etc/profile
- 常与type一起使用,查看具体的命令别名而不是全部的
-
立即关机
sudo shutdown -h now
-
wc统计
- 输出文件中的行数、单词数、字节数
cat 1.txt | sort | uniq | wc -l -l #行数 -w #单词数 -c #字节数
-
file确定文件类型
file 具体文件 #事实上怕记也可以使用ls -l查看
-
type显示指令类别
- 如:shell内置的、还是alias别名定制的
type ls [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type ls ls is aliased to `ls --color=auto' [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type man man is hashed (/bin/man) [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type type type is a shell builtin
-
uname显示系统信息
uname -a # 显示所有信息 uname -r # 显示系统内核版本 [root@VM-4-3-centos]~# uname -r 3.10.0-1160.59.1.el7.x86_64
-
stat指令
- 显示当前文件的所有信息和属性
[root@VM-4-3-centos ~]$ stat index.html File: ‘index.html’ Size: 730 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 397149 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2022-03-29 11:58:49.895527049 +0800 Modify: 2022-03-29 11:58:49.062502555 +0800 Change: 2022-03-29 11:58:49.062502555 +0800 Birth: -
-
netstat指令在网络配置中详解
-
mount挂载、unmount卸载
mount #不加任何参数
'显示所有的挂载情况,包括硬盘、网卡、音箱等设备
'格式:device on mount_point type filesystem_type
- lsblk查看系统挂载情况
[root@004 ~]$ lsblk 'lsblk即:list block
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 159.1M 0 rom
vda 253:0 0 80G 0 disk
└─vda1 253:1 0 80G 0 part /
-
fstab文件查看存储设备情况
cat /etc/fstab
-
top网络配置章节详细介绍。
-
iotop查看io读写情况
-
说明:io读写也是瓶颈,观察哪些用户正在疯狂的io,从而禁掉。
-
动态显示( 默认未安装,故yum )
yum -y install iotop iotop
-
三。基础概念
-
配置信息全部在/etc里
- /etc/passwd 用户信息,密码用X代替;
- /etc/shadow 用户密码所在地(加密了,可以破解,root用户才有权限访问)
- /etc/group 用户组信息
-
/boot与**/root**:注意区分这两个目录,它们不一样!
-
Bash说明
- GNU项目的产物,Shell程序。
- 几乎所有的Linux发行版本均存在bash。
- bash表示其是sh的加强版,而sh是最初编写的UNIX Shell程序。
-
wildcard通配符
1. *:几乎全部,只不能匹配隐藏文件。
2. ?:单个字符
3. '匹配隐藏文件:.[!.]*
-
单引号、双引号规则:在单引号中,所有的转义字符会失效。
-
/dev/null垃圾桶
- 可以将不需要的输出全部重定向至这个文件中,神秘消失~
- 俗称:bit bucket 位桶,Unix古老概念
ls / &> /dev/null
-
Linux自带英文字典
- locate:/usr/share/dict/words文件
- 大小:4.8MB。
"里面有47万个单词,一行一个。可用grep搜索" [root@VM-4-3-centos dict]$ cat words | wc -l 479828 "填字游戏" [root@VM-4-3-centos dict]$ cat words | grep '^..j.r$' Major major
-
系统字符集查看
"查看字符集的两种方法" 1. locale 2. echo $LANG
- locale的字面意思就是语言环境:字符集。
-
重定向标准错误
- 前置知识:Linux的Shell中有三个文件描述符
- 0、1、2:标准输入、输出、错误输出。
#仅标准输出,两种写法 ls /aaa > a.txt ls /aaa 1> a.txt #仅重定向错误 ls sasa 2> a.txt #同时输出,两种写法 ls sasa > a.txt 2>&1 ls sasa &> a.txt
-
系统版本信息查看
[root@VM-4-3-centos]~# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
四。安装软件
-
centOS:三种方式
- 解压缩( 模式:解压即安装 )
- rpm手动安装
- yum在线安装
-
前景说明:
- yum是高层工具,rpm是低层工具。
- yum与rpm都可以删除已安装的软件,效果一样
- yum的帮助文档,直接yum --help或者yum -h
-
rpm详解
-
全称:redhat package management,行业标准而不只是redhat的专用;
-
基本格式:bt-mysql56-5.6.50-1.el7.x86_64
- 名称:bt-mysql56
- 版本:5.6.50
- 适用操作系统:1.el7.x86_64( 表示支持centos7.x的Intel—X86架构64位操作系统 ),如果是i386表示32位系统,noarch表示通用。
-
安装说明:不会帮你自动下载并配置默认环境。
-
参数说明:
rpm -qa "查询所有已安装软件 rpm -q gcc '查询本地是否安装gcc。不比grep好用、容易导致误解、出错' #比 yum -info gcc 详细,更好 rpm -qi gcc '查询软件包的具体信息,包括安装时间等 rpm -ql gcc '查询软件包中的文件 rpm -qf 文件路径 '查询该份文件隶属于哪一个软件 #-e普通卸载,可能会被Linux阻止。卸载失败 #--nodeps强制卸载 rpm -e --nodeps gcc #-i_install安装,-v_verbose显示信息,-h_hash进度条 rpm -ivh rpm包
-
范例:
#安装JDK1.8 1. '检查系统中是否存在jdk1.8,两种方式' rpm -qa | grep jdk 1-1. '存在即强制卸载' rpm -e --nodeps jdk名称 #强制卸载 2. '前提:已经拿到jdk的rpm包、并且存储在系统里' rpm -ivh rpm包
-
-
yum详解
-
全称:Yellow dog Updater, Modified
-
安装说明:会帮你自动下载并配置好所有的默认环境,省心安装。
-
参数说明:
yum makecache fast '生成目录缓存,方便日后检索。每日系统自动更新一次' yum -y install gcc '安装 yum list | grep jdk '列出所有可以安装的软件' yum check-update '检查是否有' yum remove gcc '卸载' yum update '更新所有软件' yum update gcc '更新gcc' # 不如 rpm -qi gcc 详细,没有安装日期等等 yum info gcc '查看具体信息'
-
范例:
yum -y install java-1.8.0-openjdk.x86_64
-
-
五。解压缩文件
-
常用tar,记住即可
tar -zxvf file #解压 tar -zcvf file #压缩
-
其他指令
-
gzip压缩、gunzip解压
gzip 1.txt gunzip 1.txt.gz
-
zip与unzip
- 注意看其表达形式,不可改变!易错。
- Linux有时没有为我们安装此,自行安装即可
#安装unzip yum install -y unzip #压缩 zip -r a.zip /home/think 压缩 递归压缩目录 压缩后的文件名 将要压缩的目录 #解压 unzip -d ./usr a.zip 解压 指定解压到的文件目录 压缩包文件
-
tar详解
-
tape archive,原本功能:磁带存档。
-
前景说明:只提供打包、解包,没有解压缩功能。
-
通过调用gzip实现解压缩功能。
-
后缀:.tar.gz见名思意,先借助tar打包、然后利用gzip进行压缩。
-
打包和压缩区分:
- 打包是指将一大堆文件或目录变成一个总的文件;
- 压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
-
与其他指令的区别:其他指令只能针对某一文件进行解压缩,而不能同时针对不同地方的多份文件进行压缩。
-
参数说明:
tar -zxvf a.tar.gz -x '解压文件,extract -c '压缩文件,compress -z #支持gzip解压文件 -v #显示操作过程,verbose -f #指定压缩文件(理解:指定要解压的压缩文件名)
-
-
六。用户与用户组
-
查看用户信息
id id 用户名
-
创建用户、删除用户
useradd -m -G 设置用户组 #-m自动创建用户的家目录 userdel -r #删除用户并且删除家文件
-
修改用户密码
passwd #回车设置密码(普通用户权限) passwd 用户名 #回车设置用户密码(root权限) passwd -l 用户名 #lock,冻结某用户、暂时无法登陆。应用:离职期间
-
用户切换
su 用户名
-
退出登录
'退出账号' exit '退出Shell端' logout
-
创建、删除用户组(group的操作与useradd这系列的操作类似一样)
groupadd thinkstu groupdel thinkstu
-
修改用户所在组
usermod -g 组 用户名 #修改用户所在组
-
直接修改文件或者目录属组
chgrp think组 1.txt
-
为用户赋予新的家目录
'只能用root用户设置,因为在设置的时候该用户不能登录 usermod -d 目录名 用户名
-
思想:
- Linux中,所有的用户都必须存在于一个组中,用户不能独立于组而存在。
- 某文件在创建时所归属于的组—>取决于创建者所在的组
-
修改文件所有者
chown thinkstu 1.txt
-
rwx权限详解
-
权限排序:文件所有者、文件所在组、其他人。
-
作用在文件
-
r :可读取该文件
-
w :可修改该文件,但是并不能删除该文件。
删除该文件的前提是对该文件所在的目录拥有w写的权限。
-
x :可执行该程序
-
-
作用在目录
- r : 可读,可以使用ls查看该目录结构
- w :可以对目录里的内容进行修改。—>如:创建、删除、重命名该目录或其他目录内的文件
- x :可执行,表示可以进入该目录。
-
Summary
- 如果想要对目录内的文件进行操作,那么首先要有针对目录的相应权限才行!
- 目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
- 只有执行权限只能进入目录,不能 ls 看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
- 一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
- 目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件
-
七。环境配置
-
检查环境配置
-
set:显示Shell变量+环境变量
-
printenv:只显示环境变量
-
alias:别名( 以上两者均无法查看别名,只有它可以 )
set #全部 printenv #全部 alias #全部
-
-
常见变量
echo $PATH echo $PS1 echo $LANG '输出服务器字符集'
-
前提说明:Shell程序在启动时会自动加载并读取一系列配置文件(用户登录操作并不会)。
-
配置文件读取规则
-
**登录Shell会话:**非图形界面登录。
"全局变量" /etc/profile as "用户变量" 1、 2、 3 为只要前面一个存在,则后面的就不会被读取; ~/.bash_profile 1 ~/.bash_login 2 ~/.profile 3
-
**非登录Shell会话:**利用图形界面进行登录。
"全局变量" /etc/bash.bashrc "用户变量" ~/.bashrc
-
特例:
~/.bashrc
文件,无论启动方式如何,总会被执行( 但其只是用户自定义变量 )。
-
-
export命令含义:告诉Shell,该环境变量的内容可用于Shell的子进程。
export PATH=$PATH:~/bin
-
二月指示:以前我总是修改/etc/profile文件,直到我进去该文件中注意到这句话:
System wide environment and startup programs, for login setup Functions and aliases go in /etc/bashrc It's NOT a good idea to change this file unless you know what you are doing. It's much better to create a custom.sh shell script in /etc/profile.d/ to make custom changes to your environment, as this will prevent the need for merging in future updates. ---------------------------'代码部分'--------------------------------- i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do if [ -r "$i" ]; then if [ "$-#*i" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done
- 意思即:官方更加推荐在==/etc/profile.d/目录下新建.sh==脚本。
- 步骤:在/etc/profile.d/下新建shell脚本,然后刷新==/etc/profile==文件( 无需给定脚本执行权限 )
-
总结( 修改全局变量与用户变量 ):
全局变量:
-
优先:往/etc/profild.d目录下添加脚本文件.sh, 方便日后管理 。
-
其次:修改/etc/profile文件本身。
用户变量:
- 优先:~/.bashrc文件,因为修改这不会导致一系列的文件优先权问题(但在mac下可能每次都需要 source手动更新,所以 mac推荐/.bash_profile)。
- 其次:/.bash_profile(想要一定会生效的话),但这可能会导致/.bash_login、/.profile失效(如果存在的话)
最后记得,都要刷新配置文件~
-
八。网络
-
ip指令详解
"过时:已不再维护" ifconfig "现代" 1 ip a 2 ip addr 3 ip -c a
-
ip指令取代ifconfig。
-
ip指令的正确使用方式
"全部在《man ip》手册里,具体要配什么怎么配注意查看即可,真就还不如学会如何看手册,比这方便" ip a #a是addr的缩写,所以可以直接用a ------------------------------------- SYNOPSIS ip [ OPTIONS ] OBJECT COMMAND | help OBJECT := link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | mad‐dress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | macsec OPTIONS := -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec |-f[amily] inet | inet6 | ipx | dnet | link | -4 | -6 | -I | -D | -B | -0 | -l[oops] maximum-addr-flush-attempts | -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] |-n[etns] name | -a[ll] | -c[olor]
-
-
ping指令详解
-
作用:
-
ping百度:检查网络连通性
-
检测双方网络的通畅性。
-
-
使用说明:
-
默认1秒发送一次包,Linux平台默认持续 ping,win平台一般 ping 4次即结束。
-
在按下ctrl+c快捷键中断继续发送的请求之后,命令行会返回本次网络请求的统计信息。
[root@VM-4-3-centos test]]$ping thinkstu.com PING thinkstu.com (39.107.99.33) 56(84) bytes of data. 64 bytes from 39.107.99.33 : icmp_seq=3 ttl=51 time=37.6 ms 64 bytes from 39.107.99.33 : icmp_seq=4 ttl=51 time=37.7 ms ^C --- thinkstu.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 37.679/37.793/38.090/0.219 ms
-
ttl(Time To Live)
的含义:该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。当 ttl = 0 时,该数据包就会被路由器丢弃,这样就防止了幽灵数据在网络中一直循环(浪费互联网资源)的情况。- 查看初始值:ping本身 ip地址,一般 Linux是64,win是128。
ping localhost 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.082 ms
- 查看其他网站
ping thinkstu.com 64 bytes from 39.107.99.33: icmp_seq=0 ttl=48 time=64.576 ms # 此处表明经过了 64 - 48 =16 层网关。
-
-
-
traceroute与tracepath追逐网络请求链条( 抓包 )
#范例,两者差不多 traceroute baidu.com tracepath baidu.com
-
netstat指令详解
-
全称:network statistic网络统计,检查网络设置和统计网络信息。用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
-
应用:
'输出有点长' netstat | less netstat -an #按照一定顺序输出 netstat -p #附加显示进程号 netstat -pan
-
案例
#查找80端口 netstat -pan | grep :80 #我之前使用过另外一种方法 lsof -i :80
-
额外说明:Linux以上两种方案均可,但是Mac中 isof 或许是最佳方案!
-
-
ftp指令
- 经典但过时。
以上是关于Linux笔记的主要内容,如果未能解决你的问题,请参考以下文章