Linux学习笔记

一.宏观上Linux的注意点:

1.Linux是严格区分字母大小写的
2.Linux中一切皆文件,包括硬件也是文件
3.Linux中区分文件不靠扩展名区分(即不靠后缀区分),实际上后缀是可有可无的,Linux是靠权限来区分文件的,但是一般情况下会约定俗成的使用一些后缀(但不强制)

二.实际操作中应该注意的地方

1.dev表示硬件,/dev/hda1 IDE硬盘接口
/dev/sda1 SCSI和SATA硬盘接口

2.挂载:将盘符和分区连接在一起的过程(类似于windows中的盘符)
其中必须要有的分区
/(即根分区) 和 swap分区(即交换分区,内存的2倍)
推荐要有的分区:
/boot(即启动分区,200MB)

3.Linux默认上传、下载的服务器位置是/home目录

4.网卡信息
在配置好网络后,用ifconfig命令查看网卡eth0信息,配置DHCP时,最好用[*],其他的DNS用推荐方式即可;
如果用ifconfig命令没有eth0时,可以用ifup eth0打开网卡

5.基本目录的简要说明
/ 根目录(最高级别的命令,开机默认进入的是/root目录)
/home 用户文件的主目录
/bin 存放必要的命令
/lib 存放必要的运行库
/boot 存放内核以及启动所需的文件
/mnt 空目录,通常将软驱和光驱挂载此处
/dev 存放硬件文件
/proc和/sys目录 存放进程和系统信息,在内存上,重启会丢失,用户数据不要放在此处
/etc 存放系统配置文件
/root 超级用户目录
/user 包含一般不需要修改的应用程序等
/var 包含系统产生的经常变化的文件
/temp和/root以及/home可以用来存放数据

三.常用命令

Linux中的命令大部分都是这样的格式:命令 【选项】 【参数】
1.查询目录中内容命令:ls
形式 ls 【选项】 【文件或目录】
选项有: -a 显示所有文件(包含隐藏文件)
-l 显示详细信息
-d 查看目录属性
-h 人性化显示文件大小
-i 显式inode(节点)

2.权限(Linux是靠权限区分文件的)命令
隐藏文件的意义:一般都是系统文件,免得用户误操作
默认是10位,形如:-rw-r--r--
其中第1位:表示文件类型,-表示文件,d表示目录,l表示软链接
后面第2位到第10位:每三个划分为一组(即为rw-r--r--),分别表示用户读写文件的权限,其中r表示读权限,w表示写权限,x表示执行权限
第一组表示所有者的权限
第二组表示所属组的权限
第三组表示其他人的权限

常用的赋权命令:

# 将三组权限转换成数字,777表示将读、写、运行的权限赋予文件所有人
chmod 777 文件名

# 给所有人赋予可执行该文件的权限
chmod a+x 文件名

3.目录处理命令
创建空文件(是空文件不是空目录!):touch 文件名

建立目录:mkdir 【目录名】 ,如mkdir test

建立递归目录:mkdir -p 【目录】,-p表示创建多级目录,如 mkdir -p test1/test2

切换当前所在目录里:cd 【目录】,
进入当用用户的家目录,一般默认是/root目录:cd 或者是cd ~
进入上次历史目录:cd -
进入根目录:cd /
进入上级目录:cd …
进入当前目录:cd .(基本无用)

<注:>如果忘记要进入当前目录下具体哪个子目录时,可以用补齐命令:cd (子目录的首字母) 再连按两次Tab键,系统会列出当前目录下所有以此开头的子目录(如果有且一个的话会自动补齐)

4.删除目录命令:rmdir
删除空目录(只针对啥都没有的空目录!!):rmdir 【目录名】

删除目录或者文件:rm -rf 【文件或者目录】,其中-r表示删除目录(系统会询问用户是否进入其子目录并删除),-f表示强制删除(系统不会询问用户)

5.复制命令:cp
形式 cp 【选项】 【源文件或者目录】 【目标目录】
选项有: -r 复制目录
-p 连带文件属性复制
-d 若源文件是链接文件则复制链接属性
-a 相当于 -pdr,让复制文件和源文件一模一样
如cp -p test1/test /root就是将test1/test文件复制到/root目录下

6.剪切或者改名命令:mv
形式 mv 【源文件或目录】 【目标目录】
注意:源目录和目标目录相同就是执行改名的操作,不同目录就是执行剪切操作

7.链接命令:ln
形式 ln -s 【源文件】 【目标文件】
-s表示创建软链接,比较灵活

硬链接:
两个文件的节点是一样的,删除源文件时,那么链接文件仍然可用;

软链接:
1.软链接有自己的I节点和Block块,只保存源文件的文件名和I节点,并没有实际数据;
2.修改任意文件,另一个也会跟着改变
3.删除源文件,软链接将不能使用

比如建立Nginx的软链接(以后直接可以全局使用nginx命令):

ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

8.文件搜索命令:locate、whereis、which、find、grep
1.locate命令
形式: locate 文件名(只能搜索文件名)
locate并不是直接在系统中搜索,而是在/var/lib/mlocate库中搜索,但是这个库不是实时更新的(一天更新一次),所以新建的文件用locate命令不能立刻找到,但是可以用update db命令强制更新更库,然后再用locate命令搜索即可。

2.whereis命令:搜索命令位置的命令,如whereis ls

3.which命令:which 文件名,当用它来搜索命令时,会显示命令的别名;

4.find命令:find 【搜索范围】 【搜索条件(一般时文件名)】,find命令功能强大,但是比较耗费资源。
这里的文件名可以包含通配符(使用通配符时必须使用“”包裹):

  • 匹配任意内容
    ? 匹配任意一个字符
    [] 匹配任意一个中括号里的字符

5.grep命令(在文件中搜索符合条件的字符串):
grep 【选项】 字符串 文件名
选项有: -v 取反,即不包含条件
-i 忽略大小写

9.压缩与解压缩命令
Linux中常用的压缩格式有.zip、.gz、.bz2、.tar.gz、.tar.bzz,虽然Linux中文件没有后缀,这里后缀是让自己可以区分,无实际意义。
9.1 zip
压 缩 : zip 压缩文件名 源文件
如果压缩目录,用zip -r 压缩文件名 源文件
解压缩:unzip 压缩文件

9.2gzip
压缩:
gzip 源文件(源文件会消失)
gzip -c 源文件 压缩文件 (保留源文件)
gzip -r 目录 (压缩目录下所有子文件,但不能压缩目录)

解压缩:
gzip -d 压缩文件
gunzip 压缩文件

9.3 bz2(此命令不能压缩目录)
压缩:
bzip2 源文件(不保留源文件)
bzip2 -k 源文件(保留源文件)

解压缩:
bzip2 -d 压缩文件
bzip2 -k 压缩文件(保留源文件)
bunzip2 压缩文件

9.4 tar.gz和tar.bz2,由于gz和bz2对目录的压缩和解压缩都有些问题,所以产生了这两个,先打包再压缩

打包命令: tar -cvf 打包文件名 源文件
-c表示打包
-v显示过程
-f指定打包后的文件名

解打包命令: tar -xvf 打包文件名
-x 表示解打包

将打包和压缩以及解压缩集成到一起:
tar -zcvf xxx.tar.gz 源文件
tar -zxvf xxx.tar.gz

9.5 tar.bz2
打包压缩:tar -jcvf xxx.tar.bz2 源文件
解打包解压缩:tar -jxvf xxx.tar.bz2

10.关机重启命令:shutdown
shutdown 【选项】 时间
选项有:-c 取消前一个关机命令
-h 关机
-r 重启
时间: 就是普通时间,如果写为now就会立刻执行

除上述以外,重启也可以用reboot命令,比较安全;init 6也可以但经量不要用,这里捎带一下系统运行级别:

级别职能
0关机,init 0指令可以用来关机
1单用户,相当于windows中的安全模式,启动最小程序,用于系统修复
2字符界面,不含NFS服务(即文件共享符)
3完全多用户,及完全的字符界面
4未分配
5图形界面
6重启,init 6指令可以用来重启
查看当前系统运行级别可以使用runlevel指令,会显示两个数字,前者代表用户进入当前级别的上一次进入的级别,如果上一次没有记录,则显示N,后者的代表当前用户的系统级别。

可以用指令id:3:initdefault来修改默认系统运行级别

11.清屏命令:Ctrl+l

12.挂载命令:mount
挂载即分配盘符,Linux中所有的存储设备(U盘、光盘。。。),都必须挂载后才能使用。
12.1 查询与自动挂载
mount 查询系统中已经挂载的设备
mount -a 一句配置文件/etc/fstab的内容,自动挂载
12.2 挂载命令格式:
mount 【-t 文件系统】 【-o特殊选项】 设备文件名 挂载点;
说明如下:
【-t 文件系统】 加入文件系统类型来制定挂载类型,可以是ext3、ext4、iso9660等文件系统,如果挂在光盘,默认是iso9660类型;
挂载点:Linux中常用空白目录来做挂载点。

【典例】挂载光盘
1.建立挂载点 :mkdir /mnt/cdrom
2.挂载光盘:mount -t iso9660 /dev/cdrom /mnt/cdrom
即将设备文件/dev/cdrom挂载到对应的挂载点/mnt/cdrom文件目录上方便读取,后面的读取直接到/mnt/cdrom读取即可
3.卸载光盘 umount 设备文件名或者挂在短 (注意,卸载时必须退出挂载点,否则无法卸载)

【典例】挂载U盘
1.fdisk -l (用来查看U盘的设备名,一般是sdb1,查到啥写啥,其中sda是虚拟机,另一个就是U盘设备名,这里不支持NTFS格式的,要想支持另下插件)
2.流程一样,如果没有挂载点就新建挂载目录mkdir /mnt/usb
3.进行挂载,mount -t vfat /dev/sdb1 /mnt/usb,这里的vfat相当于fat32
4.卸载 umount 设备文件名或者挂在短 (注意,卸载时必须退出挂载点,否则无法卸载)

13.创建、追加文件内容
之前可能不管创建还是追加,都是直接vim xxx的方式来搞,此外其实cat也可以搞,主要如下:

# 若test.txt文件存在,则清空并写入内容;否则创建该文件并写入内容
cat <<EOF> test.txt
>test1
>EOF

# 若test.txt文件存在,则不清空直接在原文件后追加;否则创建该文件并写入内容
cat <<EOF>> test.txt
>test2
>EOF

注:上述EOF可以换成任意字符,用于定义文本内容的开始输入和终止输入的标志。

四、之后遇见的实用命令

【重要】最重要的是装完无法联网;
【解决方案】网络的配置(修改成桥接模式),默认CentOS7默认网卡ens33是不开机自启的,手动更改配置文件ifcfg-ens33(不同版本网卡名字可能会有所差异,请随机应变(●ˇ∀ˇ●)):

cd /etc/sysconfig/network-scripts 
vi ifcfg-ens33

# 更改ONBOOT=no为ONBOOT=yes保存退出

# 重启网络服务
sudo service network restart

1.shell脚本的执行

关于脚本命令xxx.sh文件运行时,不能进入所在目录直接执行xxx.sh命令,这样会报错:-bash: startup.sh: command not found,应该用以下的一些命令执行脚本。

//法1:在脚本所在目录下,其中./表示当前目录,一定不能掉
# ./xxx.sh

//法2:用绝对路径来执行
# 父目录1/父目录2等/xxx.sh

//法3:在脚本目录下,可以用bash或者sh命令执行
# bash(或者sh) xxx.sh

【注】脚本写完后,需要给定权限才能变绿(可执行):chmod a+x xx.sh

2.关于防火墙

1.查看防火墙状态

# systemctl status firewalld

2.开启防火墙(关闭我想你应该会了,将start改为stop)

# systemctl start firewalld

3.禁止防火墙开机启动

# systemctl disable firewalld

4.配置防火墙开放端口并重新载入

# firewall-cmd --permanent --zone=public --add-port=8080/tcp

# firewall-cmd --reload

5.查看防火墙开放的所有端口

# firewall-cmd --zone=public --list-ports

6.查看防火墙是否开放某个端口

# firewall-cmd --zone=public --query-port=8080/tcp

7.将防火墙中已开放的端口删除(即不对外开发)

# firewall-cmd --zone=public --remove-port=8080/tcp

3.关于端口

1.端口使用情况查看

# netstat -tunlp

Linux查询指定端口号 lsof -i:8080 (需要安装 yum install lsof

2.查看监听端口

netstat -ano

3.网卡信息查看

# ifconfig

4.查看端口状态

netstat -lnp|grep 8081(端口号)

4. 时间同步

 解决CentOS已经设置为GMT+8后时间不同步的问题:

yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
ntpdate -u cn.pool.ntp.org

5. 安装图形界面

默认不安装,需手动安装:

# 安装
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
# 重启到图形界面
init 5

6.文件内部的删除命令

 在使用vim xx.conf文件后,大量内容需要删除的时候,总不能一直按着退格键吧:

  • 整行删除:光标移至待删除的行上,dd命令即可,或:.d
  • 第5行(包含)到第10行(包含):5,10d
  • 将光标移动到第5行:5G
  • 将光标直接移动到末行:G

注:其中d表示删除,.表示当前行,即当前光标所在的行,在上述命令也可以用,比如删除整个文档中的内容,可以G到末行,然后输入:1,.d,即删除第1行到当前行(末行)所有内容。

7. 后台运行

 在Linux中,运行脚本,很多时候会直接进入程序的控制台,这样就不能干其他事了,使用如下命令可以让程序在后台运行,不会自动进入控制台:

# 后台运行/root/test.php程序,并追加日志文本,&符号不能忽略
nohup /root/test.php(命令文件) &
# 根据提示追加如下命令,将日志文件写入到nohup.out文件中,不指定默认就是这个文件
appending output to nohup.out

# 查看后台运行的进程
jobs -l

# 结束进程,可以先用上述命令查看进程号
kill -9 进程号

8. 配置SSH免密登录

# 生成密钥,一路回车,不要设置密码
ssh-keygen -t rsa

使用下面的命令进行远程复制,如果远程机器上配置过authorized_keys将会被覆盖(这种做法只适合远程机器没有进行过SSH配置的情况)

scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys

如果A机器已经授权可以免密登录B机器,如果现在也要让C机器可以免密登录B机器,作如下操作:
首先在C机器上生成密钥,然后将id_rsa.pub文件中的内容追加到B机器的authorized_keys文件中,
可以先将C机器上的公钥复制到B机器上的/tmp目录下,然后再进行追加到授权文件中:

# 1. 将公钥复制到远程机器上的临时目录中
scp -p ~/.ssh/id_rsa.pub root@10.4.37.124:/tmp
# 2. 登录到远程机器上,将公钥内容追加到授权文件中
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

注:同时授权多台机器可以SSH免密登录,只能用上述的第二种方式。、

9. 修改Host

命令如下:

# 绑定hosts
vim /etc/hosts

# 绑定完让host立刻生效 
hostname search.xxxx.com(定义的主机名)

10. 查看系统类型

cat /etc/redhat-release 

11. fuser命令无法识别

yum install psmisc

12. 实时查看日志

实时查看日志 tail -f xxx.out

13. 生成指定大小的文件

在作上传、下载时,通常需要对性能作参数测试,就需要各种大小的文件,在Linux中,dd指令提供了这种功能,比如:

dd if=/dev/zero of=test bs=1M count=1000

生成指定大小的文件,表示在当前目录生成1000M的文件,名字为test

  • if =输入文件
  • of =输出文件
  • bs = bytes 同时设置读/写缓冲区的字节数
  • count = blocks 只拷贝输入的blocks块

14. 查看本机的公网IP

curl icanhazip.com

15. 文件格式及转换

vim可以查看文件格式,命令:set fileencoding,我这里显示的编码是utf-8
vim还可以查看文件类型(换行符是LF还是CRLF),同样在vim中通过:set ff可以查看其类型(比如fileformat=dos),将其转成unix::set ff=unix。如果是指定转换某个文件将出现换行符CRLF转成LF

dos2unix kubectl-apply.sh

如果是某个目录下的所有文件:find ./ -type f -exec dos2unix {} +

16. 执行脚本

执行.sh提示权限不够,需要对脚本文件赋权chmod +x xxx.sh

17. 端口占用

查看占用端口的程序(i后面的:不能丢!!),如:lsof -i:30001

18. 创建多级目录

创建目录以及子目录:mkdir -p test/test1

19. 删除多级目录

删除目录以及子目录:rm -rf test

20. vim粘贴代码混乱

vim 粘贴格式时,自动缩进,注释连续,解决:粘贴前先:set paste,然后再粘贴;如果又需要缩进了,再设置:set nopaste即可。

21. top命令:

top命令用于显示当前进程的状态(在迁移老应用到K8S时作资源配置参考很好用),下面是一些一些重要参数的说明:

VIRT:virtual memory usage 虚拟内存,单位kb(进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等);
RES:resident memory usage 常驻内存(进程当前使用的内存大小);
SHR:shared memory 共享内存(除了自身进程的共享内存,也包括其他进程的共享内存);

22. 利用PS指令查看进程

ps指令即可,用法如下:

选项参数:

  • -A/-e:显示所有进程;
  • -a: 显示现行终端机下的所有进程,包括其他用户的进程;
  • -u:以用户为主的进程状态 ;
  • x:通常与a这个参数一起使用,可列出较完整信息;
  • T:显示所有和当前终端相关的进程,默认参数,等同于不带选项参数的ps指令;

输出格式参数:

-l:较长、较详细的将该PID 的的信息列出;
-j:工作的格式(jobs format);

23. curl 无法请求https

  1. 查看有无目录/etc/pki/tls/certs(无则创建);
  2. 如果上述没录下没有证书,下载最新证书到上述目录中wget http://curl.haxx.se/ca/cacert.pem即可;
  3. 如果上述目录已有证书,则将最新下载的证书追加到已有证书中即可

24. sed指令

sed 指令可以依照脚本对文本文件进行处理和编辑,sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等:

Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-i[SFX]] [-nrE] CMD [FILE]...

        -e CMD  Add CMD to sed commands to be executed
        -f FILE Add FILE contents to sed commands to be executed
        -i[SFX] Edit files in-place (otherwise sends to stdout)
                Optionally back files up, appending SFX
        -n      Suppress automatic printing of pattern space
        -r,-E   Use extended regex syntax

If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).

主要使用场景如下:

# 在文件的第4行插入指定字符串并输出,原来的第4行下移一行,不对文件本身修改,下面2个指令等价
sed -e '4a\newLine' testfile
sed 4anewLine testfile

# 在指定行的前一行(即第1行)插入,如果指定第0行,那这个插入的行为会发生在每一行,不对文件本身修改
sed '2i new Line' testfile

# 如果是插入的多行可以文本,可以使用换行符\n

# 替换范围行的内容(整行替换,包头不包尾),不会文件本身修改,将第1行替换为 new String 
sed '1,2c new String' testfile

# 打印范围行(包头包尾),常和 -n 使用显式行号
sed '1,2p'

# 删除指定范围行(包头不尾),末行用$表示,用$表示范围行的末端可以删除全部,不对文件本身修改
sed '1,3d' testfile


# 删除含有某个字符的行,删除 testfile 中所有含有 test 字符的行
sed '/test/d' testfile

# 搜索替换,只将指定字符替换为另一个字符(非整行),将test
sed 's/test/newTest/g'

# 多点编辑,即一个 sed 指令执行多个行为
sed 

# 在 filename(待操作的文件名) 文末添加新的一行并写入内容
sed -i '$a\待插入的内容' filename
# 删除 filename 的最后一行
sed -i '$d' filename
# 替换 filename 中所找到的字符串替换为目标字符串(不加 -i 参数不会对文件本身修改,只会输出屏幕上)
sed -i 's/要被取代的字串/新的字串/g' filename

参数:

a:表示新增
d:表示删除
c:表示替换(整行替换)
p:表示打印,常和-n使用
s:表示替换(部分替换),可用正则

25. curl 指令

curl 通常会用来在服务器上调用一些请求,本地我一般习惯于 postman 本地自测,服务器若要请求 api(尤其是带有复杂请求参数时),我都是直接利用 postman 来生成 curl 指令,但通常直接把指令复制过去是各种报错,摸索下来,大概场景如下:

原始指令:

curl --location --request POST 'localhost:8080/excel_import' \
--header 'Content-Type: application/json' \
--data-raw '{
    "domainId": 2000,
    "orgId": 2001,
    "templateType": 10,
    "taskName": "运营数据",
    "fileKey": "f_r-d-3c7ec81ee9af4370b4dff85237f99624.xlsx",
    "creatorId": 800012405
}'

执行上述指令报错 curl: option --data-raw: is unknown,这个异常通常就是 curl 版本差异的结果,可以尝试用 --data 代替 --data-raw,最终可以正常运行的指令如下:

curl --location --request POST 'localhost:8080/excel_import' \
--header 'Content-Type: application/json' \
--data '{
    "domainId": 2000,
    "orgId": 1405,
    "templateType": 10,
    "taskName": "运营数据2",
    "fileKey": "f_r-d-a03421ea45024448b3e140a28ccc2c09.xlsx",
    "creatorId": 800012301
}'

26. less 指令

 之前用的比较多的就是翻屏,没用过搜索,但发现搜索要比 grep 指令快,具体语法为:/xxx 就是向下搜索,?xxx 就是向上搜索,其中 xxx 表示的就是待搜索的字符串,其实都一样,进入搜索模式后,nN 可以向上或向下跳到另一个匹配处,其中 /xxx 模式下 N 是向下, n 是向上;?xxx 模式下 nN 的跳转方向则刚好和 /xxx 模式相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值