Linux笔记
一、基础知识
-
Linux分为内核版本和发行版本。
-
Linux常见的目录结构如下:
/root linux的超级管理员的家目录 /home/username linux操作系统所有用户的家目录 /etc 配置文件 /bin 二进制文件,一般可以存储shell命令 /opt 用户自己的第三方应用程序 /usr 英文为unix system resourc 资源目录,头文件 游戏 用户自己的应用程序 /dev device设备目录,在linux一切都是文件。U盘,显卡 /mnt 手动挂载目录 /lib 动态库 /media 外设的自动挂载目录 /tmp 临时文件,重启就没 /boot 系统启动项目录
-
命令行显示:[root@node00 opt]# root当前登录名,@ at在,node00主机名 opt当前文件夹,#为root ;$为普通用户
-
ll -h
人类查看文件列表 -
文件类型
- 常规文件,即file d 目录文件 b block device 即块设备文件,如硬盘;支持以block为单位进行随机访问 l symbolic link 即符号链接文件,又称软链接文件
二、基本操作
-
关机和重启:
shutdown
和reboot
,其中shutdown也可以执行重启的过程。shutdown -h now shutdown -r now reboot
-
帮助命令,man操作手册、 info命令注释、 help帮助文档。
[root@master qsm]# man find [root@master qsm]# info find [root@master qsm]# find --help
-
查看,
cat小文件,
more,
less –Nm(功能更加强大,可以向前翻页);
head -10 qsm.txt ;
tail -100f qsm.txt 持续等待尾部输出。
vim 查看也可编辑 -
查找
1、whereis(所有相关的),which(可执行文件),
2、find(普通查找),locate(按照目录树查找),
3、过滤grep,若后接文件,则是类似查找,实际上还是过滤文件内的内容。-i,忽略大小写,-o,只展示匹配到的值。vim之后直接输入 / 向后搜索 ? 向前搜索
4、awk和sed可以查找。[root@master ~]# whereis docker docker: /usr/bin/docker /etc/docker /usr/share/man/man1/docker.1.gz [root@master ~]# which docker /usr/bin/docker [root@master ~]# find /root/qsm -name "qsm*" /root/qsm /root/qsm/qsm.txt [root@master ~]# updatedb [root@master ~]# locate qsm* /root/qsm /root/qsm.txt /root/k8s/qsm /root/k8s/qsm/index.html /root/k8s/qsm/k8s-nginx.yaml /root/qsm/qsm.txt /var/lib/docker/volumes/4aa4d336090deb58039b512842860f6b52d253a04fadc34c90efda8ae9cc8c2e/_data/qsmtestfile.txt [root@master qsm]# grep -i "记者" qsm.txt 新京报快讯 据商务部网站11月16日消息,商务部新闻发言人就美方禁止美国投资者对部分中国企业进行投资答记者问。 记者:11月12日,美国政府发布行政令,禁止美国投资者对所谓由中国军方拥有或控制的企业进行投资。请问商务部对此有何回应? 新京报快讯 据商务部网站11月16日消息,商务部新闻发言人就美方禁止美国投资者对部分中国企业进行投资答记者问 [root@master qsm]# grep -io "黄鹤楼" qsm.txt 黄鹤楼 黄鹤楼 黄鹤楼 [root@master qsm]# sed -n '/Linux/p' qsm2.txt Linux 85 Linux 85 [root@master qsm]# awk '$2=="95" {print $0}' qsm2.txt Hello 95 Hello 95 Hello 95
-
history 查看所有之前编写过的命令。
history 5
查看历史执行记录最新 5 条。 -
cd ~
意思就是到家目录。cd ..
是返回上一层目录,cd -
,是返回到上一次的工作目录 ;pwd
显示目录 -
mkdir,直接就是创建目录,如果需要多层,且不存在中间某些目录,直接-p
-
touch 创建文件,不存在则创建,存在则更新时间。vim可以可以创建。
-
cp 拷贝
-
mv可以改名或者移动
-
rm 删除,一般都要加r,递归,-f强制性
-
压缩工具tar
tar -zcvf mingzi.tar.gz 各种想压缩的文件。 tar –zxvf mingzi.tai.gz -C 想解压到某处的路径
-
vim三种模式,一般模式,编辑模式,底行模式。vim、i、:。查找使用/qsm、保存:wq。不保存:q!。
-
用户和用户组
useradd 新增用户,# useradd -g root tt userdel 删除用户 passwd 修改密码 usermod 修改用户属性 usermod -aG group qsm groupadd groupdel id 查看用户信息 uid 组信息等
-
权限
//chmod修改文件权限(change mode),r w x 分别为4 2 1 。用户u 用户组g 全部a chmod 777 qsm.txt chmod ug+w,o-w file1.txt file2.txt //chown 修改文件的所有者和所属组 chown hn test.txt //将qsm的文件所有者给了hn。 chown hn:hngroup test.txt。//将qsm的文件所有者给了hn,组权限交给hngroup
权限数字4 2 1的原因
-
su和sudo
//su 切换用户,其中-可以直接切换到用户界面 su - qsm su - root //sudo 本用户可以执行一些其他用户授权的命令。依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。 sudo shutdown //visudo root授权 visodu
-
uname -a
uname -a uname -r
-
rpm,yum
wget就是一个下载工具,相当于一个迅雷,可以是tar包,也可以是rpm格式软件包等。 yum是一个包管理工具,用于下载rpm格式的包,并且自动下载相关依赖包并且自动安装好软件。 rpm也是一个包管理工具,仅仅单纯的下载rpm格式的包。rpm -qa查看所有已安装软件 用法: 使用wget+地址下载一个 rpm包, 然后用 rpm -ivh xxx.rpm 安装这个软件。 直接用 yum install XXX来自动下载和安装依赖的rpm软件,例如下载wget插件yum -y install wget
-
scp远程拷贝
scp local_file remote_username@remote_ip:remote_folder 例如scp qsm.txt root@1.1.1.1:/root
-
uniq 可检查文本文件中重复出现的行列,-c进行统计
uniq 用处理于重复,直接使用之前只管自己前后,不管全局,所以最好之前先sort一下。-c可以计数,不加就直接去重显示。 -c 进行计数, [root@master qsm]# uniq -c qsm2.txt 3 test 30 4 Hello 95 2 Linux 85 [root@master qsm]# sort qsm2.txt | uniq -c | sort -r 4 Hello 95 3 test 30 2 Linux 85
-
sort排序
sort可以直接使用,默认按照ASCII来排序 -r 逆序
-
grep过滤或者查找。
-i,忽略大小写 -o,只展示匹配到的值 linux查找某个文件中单词出现的次数 grep -io wuhan qsm.txt | wc -l cat qsm.txt | grep -o wuhan | wc -l
-
sed查找和修改
sed -n '/qsm/p' qsm.txt 相当于 grep "qsm" qsm.txt [root@master qsm]# sed -n '/85/p' qsm2.txt Linux 85 Linux 85 Linux 85 Linux 85 Linux 85 cat /etc/passwd | sed -n 'qsm' cat qsm.txt | sed 's/a/xx/' //修改,展示全部 cat qsm.txt | sed -n 's/a/xx/p' //展示修改的部分
-
awk强大的文本分析工具,包括查找,分割等
awk '{print $1}' log.txt awk '$1==2 {print $1,$3}' log.txt cat /etc/passwd | awk -F: '/mac/{print $5}' cat /etc/passwd | awk -F: '{print $5}' cat b.txt | awk -F "," '{print $1}' | sort | uniq -c | sort -nr | head -5 cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
-
xargs,将标准输入作为其指定命令的参数
标准输入传为命令的参数
#cat后面直接指定china.txt参数, 可以展示china.txt文件的内容 [roc@roclinux ~]$ cat china.txt hello beijing #我们尝试通过标准输入把参数传给cat, 结果却只是显示了文件名而已 [roc@roclinux ~]$ echo china.txt | cat china.txt #xargs果然不负众望, 协助cat完成了使命 [roc@roclinux ~]$ echo china.txt | xargs cat hello beijing
-
last用户最近登录信息
//最近登录的次数最多的前10个人 last | awk '{print($1)}'|sort|uniq -c|sort -nr|head -10 last | awk '{print($1)}'|sort|uniq -c|tail -10
-
wc统计
wc统计单词数,行数,字符数 wc -l < qsm.txt -l 行 -w 单词 -m 字符
[root@master qsm]# wc -l < qsm2.txt 12 [root@master qsm]# wc -l qsm2.txt 12 qsm2.txt
三、进阶操作
-
查看进程和线程
进程 ps -ef,是一种静态的进程查看命令,比如看到进程号、某个应用是否运行起来,然后kill掉。 top,是可以动态的查看进程的命令。有5个部分,基本信息之平均负载情况,进程数量以及运行情况,CPU情况,内存和交换分区情况。 线程 ps -Tf,查看线程。LWP light weight process ID 可以称其为线程ID。还有 ps -efL top -H -p 进程号,查看线程信息。 cat /proc/9094/status, /proc这个文件系统下存放运行时文件的状态信息。Linux系统上的/proc目录是一种文件系统,即proc文件系统。
[root@master ~]# ps -ef | grep rsyslogd root 9094 1 0 21:00 ? 00:00:01 /usr/sbin/rsyslogd -n root 49476 24874 0 21:50 pts/0 00:00:00 grep --color=auto rsyslogd [root@master ~]# ps -efL | grep rsyslogd root 9094 1 9094 0 3 21:00 ? 00:00:00 /usr/sbin/rsyslogd -n root 9094 1 9098 0 3 21:00 ? 00:00:01 /usr/sbin/rsyslogd -n root 9094 1 9099 0 3 21:00 ? 00:00:00 /usr/sbin/rsyslogd -n root 49497 24874 49497 0 1 21:50 pts/0 00:00:00 grep --color=auto rsyslogd [root@master ~]# cat /proc/9094/status Name: rsyslogd Umask: 0066 State: S (sleeping) Tgid: 9094 Ngid: 0 Pid: 9094 PPid: 1 #####线程数 Threads: 3 ##### voluntary_ctxt_switches: 26 nonvoluntary_ctxt_switches: 17 [root@master ~]# ps -efL | grep rsyslogd | wc -l 4
-
网络管理相关命令
查看ip的命令,ip,ifconfig
查看路由表,查找下一跳route
网络连接和端口占用,lsof,netstat
#查看ip [root@master ~]# ip a [root@master ~]# ifconfig [root@master ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.180.2 0.0.0.0 UG 100 0 0 ens33 10.244.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0 10.244.1.0 10.244.1.0 255.255.255.0 UG 0 0 0 flannel.1 10.244.2.0 10.244.2.0 255.255.255.0 UG 0 0 0 flannel.1 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.180.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 [root@master ~]# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 11472/kubelet tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 21103/kube-proxy tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 18823/etcd tcp 0 0 127.0.0.1:10251 0.0.0.0:* LISTEN 18600/kube-schedule tcp 0 0 127.0.0.1:10252 0.0.0.0:* LISTEN 18742/kube-controll tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 18823/etcd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9093/sshd [root@master ~]# netstat -ntp | grep ssh tcp 0 0 192.168.180.130:22 192.168.180.1:52784 ESTABLISHED 78460/sshd: root@no tcp 0 0 192.168.180.130:22 192.168.180.1:60869 ESTABLISHED 24859/sshd: root@no tcp 0 48 192.168.180.130:22 192.168.180.1:60867 ESTABLISHED 24855/sshd: root@pt tcp 0 0 192.168.180.130:22 192.168.180.1:52783 ESTABLISHED 78456/sshd: root@pt [root@master ~]# netstat -ntp | grep 78460 tcp 0 0 192.168.180.130:22 192.168.180.1:52784 ESTABLISHED 78460/sshd: root@no [root@master ~]# netstat -natp | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9093/sshd tcp 0 0 192.168.180.130:22 192.168.180.1:52784 ESTABLISHED 78460/sshd: root@no tcp 0 0 192.168.180.130:22 192.168.180.1:60869 ESTABLISHED 24859/sshd: root@no tcp 0 0 192.168.180.130:22 192.168.180.1:60867 ESTABLISHED 24855/sshd: root@pt tcp 0 0 192.168.180.130:22 192.168.180.1:52783 ESTABLISHED 78456/sshd: root@pt tcp6 0 0 :::22 :::* LISTEN 9093/sshd [root@master ~]# netstat -natp | grep :22 | awk '{print $7}' | awk -F / '{print $1}' 9093 78460 24859 24855 78456 9093 [root@master ~]# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 9093 root 3u IPv4 52875 0t0 TCP *:ssh (LISTEN) sshd 9093 root 4u IPv6 52877 0t0 TCP *:ssh (LISTEN) sshd 24855 root 3u IPv4 107684 0t0 TCP master:ssh->192.168.180.1:60867 (ESTABLISHED) sshd 24859 root 3u IPv4 106275 0t0 TCP master:ssh->192.168.180.1:60869 (ESTABLISHED) sshd 78456 root 3u IPv4 347261 0t0 TCP master:ssh->192.168.180.1:52783 (ESTABLISHED) sshd 78460 root 3u IPv4 347282 0t0 TCP master:ssh->192.168.180.1:52784 (ESTABLISHED) [root@master ~]# lsof -i :22 | awk '{print $2}' | sort |uniq PID 9093 24855 24859 78456 78460
lsof -i 列出所有的网络连接 lsof -i tcp 列出所有tcp 网络连接信息 lsof -i udp 列出所有udp网络连接信息 lsof -i :22 列出谁在使用某个端口 netstat -natp 所有状态下的进程,并显示端口 netstat -nltp 列举listen状态的进程,并显示端口 netstat -ntp | grep :22 标识22端口的使用情况 根据端口列进程 netstat -natp | grep :22 | awk '{print $7}' | awk -F / '{print $1}'| uniq lsof -i :22 | awk '{print $2}' | uniq
-
网络故障排查命令
ping 对面IP是否可以达到。使用了ICMP协议,发送和返回各一个ICMP差错报告 traceroute 返回经过的路由,即,各个下一跳。使用了ICMP协议,返回一个差错报告。 telnet 对端口进行调试 telnet www.baidu.com 80 nslookup 查看域名对于的IP。DNS相关。 nslookup www.baidu.com 解析成 Name: www.a.shifen.com Address: 220.181.38.150 netstat 分析TCP、upd,端口等各种网络连接问题 -natp。查看连接状态,端口被占用等情况 tcpdump 对网络上的数据包进行截获的包分析工具,分析TCP连接问题
-
内存、磁盘和文件
内存: free -h top 磁盘: df -h :磁盘大小,显示磁盘分区上可以使用的磁盘空间 fdisk -l :。磁盘分区工具fdisk 文件大小: ls :文件大小 du -h : 文件/目录的大小,显示每个文件和目录的磁盘使用空间~~~
[root@master ~]# free -h total used free shared buff/cache available Mem: 3.7G 751M 2.0G 12M 986M 2.6G Swap: 0B 0B 0B [root@master ~]# top top - 22:03:41 up 1:08, 1 user, load average: 0.13, 0.18, 0.21 Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.5 us, 2.1 sy, 0.1 ni, 97.2 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 3861512 total, 2080952 free, 769928 used, 1010632 buff/cache KiB Swap: 0 total, 0 free, 0 used. 2673408 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17630 root 20 0 149112 84772 31740 S 8.3 2.2 5:45.20 kube-controller [root@master ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 7.8G 9.3G 46% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 13M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup [root@master ~]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000c1b42 Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM [root@master ~]# du -h 0 ./docker/share 4.0K ./docker 0 ./es 89M ./k8s/rpm 8.0K ./k8s/qsm 1.2G ./k8s 0 ./.kube/http-cache/.diskv-temp 2.4M ./.kube/http-cache [root@master ~]# ll -h total 1.1M -rw-------. 1 root root 1.2K Mar 23 2020 anaconda-ks.cfg drwxr-xr-x. 3 root root 37 Jul 15 02:02 docker drwxr-xr-x. 2 root root 6 Jul 15 09:05 es drwxr-xr-x. 4 root root 271 Jul 17 08:11 k8s -rw-------. 1 root root 1.4K Jul 5 22:43 nohup.out
-
服务管理chkconfig,systemctl和service
init: 有7个运行级别,0关机,3多用户命令行,5图形界面,6重启。 chkconfig: 命令用于检查,设置系统的各种服务。chkconfig --list;chkconfig --level 35 httpd on systemctl: 主要是用来管理linux中的各种服务的。是一个新的用来控制systemd和service的工具,用来取代旧的SysV init 系统管理。启动、停止、重启、重载,状态服务等
[root@master ~]# chkconfig --list netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@master ~]# cat /etc/inittab # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 [root@master ~]# systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-11-17 20:55:38 EST; 1h 57min ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 9106 (sshd) Tasks: 1 Memory: 6.6M CGroup: /system.slice/sshd.service └─9106 /usr/sbin/sshd -D Nov 17 20:55:38 master systemd[1]: Starting OpenSSH server daemon...
-
进程的nice值,-20到19,越小优先级越高,占用资源就越多。renice可以重新分配nice值。
-
jobs可以查看所有的后台运行的进程情况。&,以后台方式进行,ctrl+z可以暂停到后台,bg继续后台运行,fb继续前台运行。
-
进程的通信有共享内存、管道、消息。
-
inode和数据块
硬链接和软连接
软连接:win快捷键,方便访问很长的路径,节省空间 硬连接:公用一个inode去磁盘找数据块。删除了一个文件,另外一个没事。只要不是最后一个就好。 ln [-s] 源 目标 修改内容,都能变化了。
[root@master qsm]# ln qsm2.txt qsm3.txt [root@master qsm]# ln -s qsm2.txt qsm4.txt [root@master qsm]# ll -i total 288 842297 -rw-r--r--. 2 root root 105 Nov 16 02:13 qsm2.txt 842297 -rw-r--r--. 2 root root 105 Nov 16 02:13 qsm3.txt 842119 lrwxrwxrwx. 1 root root 8 Nov 17 23:19 qsm4.txt -> qsm2.txt 842296 -rw-r--r--. 1 root root 142527 Nov 15 21:50 qsm.txt 842241 -rw-r--r--. 1 root root 142527 Nov 16 23:29 uhan [root@master qsm]# cat qsm4.txt
-
磁盘分区和挂载fdisk mkfs mount
//第一步分区,设置大小 fdisk /dev/sdc //第二步设置分区格式化 mkfs.ext4 /dev/sdc1 //将分区挂载到文件目录 mount /dev/sdc1 /mnt/sdc1 //parted 分区大于2T
-
Linux的7个运行级别,是相对于系统而言的 , 切换运行级别通过“init运行级别”来进行切换
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:X11控制台,登陆后进入图形GUI模式 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 一般使用的是init 0 关机; init 3切换到命令行模式; init 5图形模式; init 6重启模式 init 首先根据 /etc/inittab 文件决定 Linux 运行的级别,然后根据运行级别在后台启动所有其他进程和应用程序 使用 --level 参数启用指定运行级别下的某个服务,下面展示如何在运行级别 3 和运行级别 5 下启用 httpd 服务。 # chkconfig --level 35 httpd on # chkconfig --level 35 httpd off
四、Shell脚本
-
Shell是一个命令解释器,我们使用的bash就是Bourne Again shell。还有C shell等。
Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh)
#!/bin/bash echo $1
[root@master qsm]# vim qsm.sh [root@master qsm]# cat qsm.sh #!/bin/bash echo qsm hello go! [root@master qsm]# ./qsm.sh -bash: ./qsm.sh: Permission denied [root@master qsm]# ll total 296 -rw-r--r--. 1 root root 21 Nov 18 21:21 qsm.sh [root@master qsm]# chmod 777 qsm.sh [root@master qsm]# ./qsm.sh qsm hello go! [root@master qsm]# bash qsm.sh qsm hello go!
-
执行命令的方式
//产生子进程运行 bash ./xx.sh ./xx.sh //当前进程运行 source ./xx.sh .xx.sh
-
重定向
> 覆盖 >> 追加 2> 错误重定向 &> 无论错误还是正确,都是直接输出到指定文件 FD (file descriptor) 0 是一个文件描述符,表示标准输入(stdin) 1 是一个文件描述符,表示标准输出(stdout) 2 是一个文件描述符,表示标准错误(stderr) ll &> /dev/null ll &> log.log
-
变量,username=qsm ,sum= 3 + 4 。 获 取 {3+4}。获取 3+4。获取username。导出export,子进程可以使用。删除unset
-
环境变量
env命令之后都是环境变量 PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin $? //上一条命令是否正常执行 0是正常,非0为错误 $$ //当前进程的PID $0 //当前进程的名称
-
数组
arr1=(1 2 3 ) echo ${arr1[2]} echo ${arr1[@]} echo ${#arr1[@]}
-
运算符
双圆括号,数值计算,是let命令的简化 ((a = 10))
-
测试判断test
test 可以简化为[] ,比如比较数字大小,需要[[ ]]
-
IF-Then、cash,for, while, util,break,continue
if[ 成立] then elif[成立] then else fi for 参数 in 列表 do done while[成立] do done
-
命令参数,shell脚本里可以使用$*全部获取为一个列表。可以生产自定义函数。
-
at一次性计划任务。crontab -e 配置,crontab -l 查看。
更多常用命令可以查看linux常用命令汇总-持续更新
【完】
喜欢就点个赞呗~~~
正在去BAT的路上修行