Linux笔记,不定期更新

linux目录

 /             # 根目录
 /bin          # 用户和系统管理员需要使用的命令程序
 /boot         # 存放内核及启动所需要的文件
 /dev          # 设备文件的目录
 /etc          # 存放系统和应用程序的配置文件
 /home         # 存放用户文件的主目录
 /lib          # 存放系统最基本的动态连接共享库
 /lib32        # 存放32位系统最基本的动态连接共享库
 /lib64        # 存放64位系统最基本的动态连接共享库
 /libx32       # 存放X32位系统最基本的动态连接共享库
 /lost+found   # 系统异常时,存放一些文件
 /media        # 挂载的设备目录
 /mnt          # 存放临时的映射文件(挂载光驱、硬盘等)
 /opt          # 存放第三方软件
 /proc         # linux系统目录
 /root         # 超管目录
 /run          # 存放系统启动以来的信息
 /sbin         # 存储系统管理员专用的应用程序
 /snap         # 存储快照程序
 /srv          # 存放一些服务启动之后需要提取的数据
 /sys          # 存放系统硬件信息
 /tmp          # 程序运行时生成的临时文件
 /usr          # 存放一般不需要修改的应用程序,大部分安装的程序也会安装到该目录
 /var          # 包含各种数据文件,日志,临时文件等
 /selinux      # 存放selinux的配置文件

windows上安装所选的 Linux 分发

打开 Microsoft Store(下载地址:https://www.microsoft.com/store/apps ),并选择你偏好的 Linux 分发版
推荐Ubuntu,在Store里输入"ubuntu"搜索,下载并安装最新Lts版本,会弹出窗口并设置username(xiazhexi),password(123456)
安装完后,管理员PowerShell输入以下命令,查看已安装的Linux发行版 name(名称) state(状态) version(版本):

wsl -l -v

关闭当前子系统

wsl --shutdown

导出ubuntu到D盘

wsl --export Ubuntu-22.04 D:\Ubuntu-22.04\Ubuntu-22.04.jar

注销ubuntu

wsl --unregister Ubuntu-22.04

重新导入(等待系统处理,在文件夹中看到.vhdx文件即为导入成功)

wsl --import Ubuntu-22.04 D:\Ubuntu-22.04 D:\Ubuntu-22.04\Ubuntu-22.04.jar

配置之前的默认登录用户

ubuntu2204.exe config --default-user xiazhexi

菜单启动ubuntu(linux系统),Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。可以在终端输入命令

sudo passwd
sudo passwd 用户名

终端会提示输入新的密码并确认,此时的密码就是root新密码。修改成功后,输入命令登录

su root
chmod +w /etc/sudoers    # 赋予/etc/sudoers写权限
chmod -w /etc/sudoers    # 取消/etc/sudoers写权限

编辑 /etc/sudoers 并添加xiazhexi用户对应的sudo权限

# User privilege specification
root    ALL=(ALL:ALL) ALL
xiazhexi    ALL=(ALL:ALL) ALL

赋予所有用户都有读、写、执行权限(目录里所有子目录和文件,慎用)

sudo chmod -R 777 /usr/local/tomcat/

linux更新软件仓库和下载(XXX表示软件名称)

apt和apt-get无任何区别
1.将所有包的来源更新,也就是提取最新的包信息,这一条我们经常使用到

sudo apt-get update

2.这条指令一般执行在sudo apt-get update之后,它的作用是将系统中旧版本的包升级成最新的,慎用
因为在linux下,由于大部分为非商业软件,所以稳定性并没有得到很好的验证,升级到最新版本需要十分慎重

sudo apt-get upgrade

3.一键安装软件包,与源码安装不同的是,这个指令会自动检测并安装依赖,而且用apt-get安装的包都是成熟的软件包,基本不存在安装包有严重bug或者文件缺失的情况

sudo apt-get install XXX

4.这里主要将的就是-y选项,添加这个选项就相当于不需要重复地确认安装

sudo apt-get install -y XXX

5.即-quiet,静默安装,当然也不是完全静默,会将低等级的log信息屏蔽

sudo apt-get install -q XXX

6.既然有安装就会有卸载,remove指令就是卸载,值得注意的是,remove仅仅卸载软件,但是并不卸载配置文件

sudo apt-get remove XXX

7.卸载指令,同时卸载相应的配置文件

sudo apt-get purge XXX

8.在卸载软件的时候同时卸载那些当初作为依赖但是现在并不需要的包
看起来非常完美的指令,但是博主建议慎用!!这条指令很可能将你要用的依赖包同时卸载,有时候你的安装包并没有通过apt-get指令来管理,apt-get管理工具不会加入这些包的信息,所以在检索包的依赖关系时可能出问题
又或者是另一种情况:举个例子:在安装某个包时,这个包依赖git,但是git并非你主动下载的,而是作为依赖下载的,包安装完之后系统可能就会提示git作为依赖不再需要使用,它并不知道你是不是正在使用这个软件包

sudo apt-get autoremove

linux安装lrzsz

下载地址:https://www.ohse.de/
1.通常的安装方式

yum install lrzsz
sudo apt-get install lrzsz

2.源码方式安装
(1)直接下载tar.gz的源码包

https://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz

(2)在linux环境使用wget或curl下载

wget https://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz

(3)解压

tar -xzvf lrzsz-0.12.20.tar.gz

(4)编译安装 ,进入lrzsz库解压后的路径,然后执行下面3个命令

./configure
make
make install

(5)环境配置 ,默认安装在了/usr/local/bin/ 目录,需要建立软链接

ln -s /usr/local/bin/lrz /usr/bin/rz
ln -s /usr/local/bin/lsz /usr/bin/sz 

(6)可以把 rz,sz权限设置成777,解决权限问题

sudo chmod 777 /usr/libal/bin/lrz
sudo chmod 777 /usr/libal/bin/lsz

linux安装docker

在Linux上安装Docker可以按照以下步骤进行操作:
卸载旧版本docker

sudo apt-get remove docker docker-engine docker.io containerd runc

1.更新系统软件包列表:

sudo apt update

2.安装必要的依赖项:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

3.添加Docker官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4.设置Docker存储库:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5.再次更新软件包列表并安装Docker引擎:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

6.将当前用户添加到docker组中(无需重启):

sudo groupadd docker
sudo usermod -aG docker $USER

7.确认Docker已成功安装:

docker version

8.安装docker后启动不起来
检查防火墙,并关闭

systemctl status firewalld
systemctl stop firewalld

“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the Docker daemon running?”,解决方案:
查看 /var/run/docker.dock 文件是否变成目录,如果是就删除该目录

rm -rf /var/run/docker.sock/

或者进入到 /usr/lib/systemd/system 目录下,修改docker.service文件

vim docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock

重新加载配置文件,然后重启docker

systemctl daemon-reload
systemctl restart docker

检查docker是否在运行

systemctl status docker

如果 Docker 未运行,你可以使用以下命令启动 Docker 服务

systemctl start docker

linux安装jdk

下载地址:https://www.oracle.com/java/technologies/downloads/
jdk发布地址:https://www.java.com/releases/
(1)通过rz命令上传jdk-8u231-linux-x64.tar.gz到/usr/local/目录下,并创建jdk目录

cd /usr/local/
mkdir java

(2)解压jdk-8u231-linux-x64.tar.gz到指定路径

tar -zxvf /usr/local/jdk-8u231-linux-x64.tar.gz -C /usr/local/java/

(3)配置环境变量

vim /etc/profile

在文件末尾添加如下内容

export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(4)重新加载环境变量,使配置文件生效

source /etc/profile

(5)验证jdk安装(与windows命令相同)

java -version
java --version(windows命令独有)

/etc/profile:

/etc/profile 是系统级别的配置文件,用于设置全局的环境变量和执行系统范围的初始化命令
当登录到系统时,会首先读取 /etc/profile 文件来加载系统的环境变量
在这个文件中,你可以设置系统范围的环境变量、修改 PATH 等,任何在这个文件中设置的变量将对所有用户生效

~/.bashrc:

~/.bashrc 是用户级别的配置文件,用于设置当前用户的特定环境变量和执行用户级别的初始化命令
当用户登录时,在加载完 /etc/profile 后,会加载当前用户的 ~/.bashrc 文件
在这个文件中,你可以设置个人用户的环境变量、自定义别名、设置命令提示符等,任何在这个文件中设置的变量只会对当前用户生效

登录时的加载顺序:

/etc/profile --> /etc/profile.d/*.sh 或 ~/.bash_profile --> ~/.bashrc --> /etc/bashrc --> /etc/bash.bashrc

非登录时的加载顺序:

~/.bashrc --> /etc/bashrc --> /etc/bash.bashrc --> /etc/profile.d/*.sh

注:

/etc/profile 用来设置系统环境参数,比如$PATH。这里面的环境变量是对系统内所有用户生效的

/etc/bashrc 这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用

~/.bash_profile 用来设置一些环境变量,功能和/etc/profile 类似。但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效.

~/.bashrc 作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效。另外/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系

~/.bash_profile 是交互式、login 方式进入 bash 运行的,意思是只有用户登录时才会生效

~/.bashrc 是交互式 non-login 方式进入 bash 运行的,用户不一定登录,只要以该用户身份运行命令行就会读取该文件

linux安装tomcat(tomcat基于jdk,需先安装jdk)

下载地址:https://tomcat.apache.org/
(1)通过rz命令上传apache-tomcat-9.0.84.tar.gz到/usr/local/目录下,并创建tomcat目录

cd /usr/local/
mkdir tomcat

(2)解压apache-tomcat-9.0.84.tar.gz到指定路径

tar -zxvf /usr/local/apache-tomcat-9.0.84.tar.gz -C /usr/local/tomcat/

(3)修改配置server.xml

cd /usr/local/tomcat/apache-tomcat-9.0.84/conf/
vim server.xml

修改其中的端口号,将8080修改为你想要的端口号,例如8987

<Connector port="8987" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxParameterCount="1000"
           />

修改配置tomcat-users.xml

cd /usr/local/tomcat/apache-tomcat-9.0.84/conf/
vim tomcat-users.xml

在文件末尾上一行添加如下内容(事例里有写,可放开注释)

<user username="tomcat" password="tomcat" roles="manager-gui"/>

或者在文件末尾上一行添加如下内容

<role rolename="tomcat"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(4)配置环境变量

vim /etc/profile

在文件末尾添加如下内容

export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.84
export CATALINA_PATH=${CATALINA_HOME}/bin
export PATH=$PATH:${JAVA_PATH}:${CATALINA_PATH} # PATH用冒号做分隔符,其后追加环境变量

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(5)重新加载环境变量,使配置文件生效

source /etc/profile

(6)验证tomcat安装

catalina.sh version(linux命令独有)
catalina version(windows命令独有)

(7)在访问tomcat的时候需要关闭防火墙,否则防火墙会拦住我们的请求,若未关闭防火墙,在这里我们可以选择给某个端口开放访问权限

sudo apt-get install firewalld                              # 安装firewall
firewall-cmd --list-ports                                   # 查看已经开放的端口
firewall-cmd --zone=public --add-port=8987/tcp --permanent  # 永久开放8987端口
firewall-cmd --reload                                       # 重启firewall

命令解析

--zone             # 作用域,默认public,共block、dmz、drop、external、home、internal、public、trusted、work
--add-port=80/tcp  # 添加端口,格式为:端口/通讯协议
--permanent        # 永久生效,没有此参数重启后失效

也可以直接关闭防火墙

systemctl stop firewalld

但是要注意:工作中一定不可以直接关闭防火墙,只能对某个端口开放特定权限
(8)启动(可能有时候需要命令前加上 ./ ,因为tomcat的启动脚本在bin目录下)

startup.sh                          # 当前会话后台启动
catalina.sh run                     # 带日志的当前会话启动
nohup startup.sh &                  # 后台永久启动
nohup startup.sh > /usr/local/tomcat/tomcat.log 2>&1 &  # 后台带输出日志文件和输出类型的永久启动
nohup java -jar jar包名称.jar &      # 后台运行jar包
ps -ef | grep 'tomcat'              # 查看tomcat进程
kill -9 PID                         # 杀死tomcat进程

参数含义:

文件描述符号  类型                                          对应文件句柄位置
0           标准输入(standard input)                       /proc/self/fd/0
1           标准输出(standard output)                      /proc/self/fd/1
2           标准错误输出(standard error)                    /proc/self/fd/2
&           后台运行
>           输出重定向到文件
2>&1        将标准错误输出重定向到标准输出
2>&1 &      标准错误输出和标准输出都重定向到文件,并后台运行
nohup       不挂断运行,退出终端不会影响程序的运行

(9)把项目的war包放在webapps目录下,然后重新启动tomcat(删除war包可能会导致访问不了)

http://localhost:8987/flowable-ui/

(10)访问

http://localhost:8987/

linux安装maven(maven基于jdk,需先安装jdk)

下载地址:https://maven.apache.org/
(1)通过rz命令上传apache-maven-3.9.6-bin.tar.gz到/usr/local/目录下,并创建maven目录

cd /usr/local/
mkdir maven

(2)解压apache-maven-3.9.6-bin.tar.gz到指定路径

tar -zxvf /usr/local/apache-maven-3.9.6-bin.tar.gz -C /usr/local/maven/

(3)修改配置settings.xml

cd /usr/local/maven
mkdir repository
cd /usr/local/maven/apache-maven-3.9.6/conf/
vim settings.xml

创建本地仓库

<localRepository>/usr/local/maven/repository</localRepository>

在标签中添加如下内容

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  <mirrorOf>central</mirrorOf>
</mirror>

(4)配置环境变量

vim /etc/profile

在文件末尾添加如下内容

export MAVEN_HOME=/usr/local/maven/apache-maven-3.9.6
export MAVEN_PATH=${MAVEN_HOME}/bin
export PATH=$PATH:${JAVA_PATH}:${CATALINA_PATH}:${MAVEN_PATH} # PATH用冒号做分隔符,其后追加环境变量

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(5)重新加载环境变量,使配置文件生效

source /etc/profile

(6)验证maven安装(与windows命令相同)

mvn -v
mvn -version
mvn --version

linux安装nginx

下载地址:https://nginx.org/
(1)通过rz命令上传nginx-1.24.0.tar.gz到/usr/local/目录下,并创建nginx目录

cd /usr/local/
mkdir nginx

(2)解压nginx-1.24.0.tar.gz到指定路径

tar -zxvf /usr/local/nginx-1.24.0.tar.gz -C /usr/local/nginx/

(3) 安装依赖包

dpkg -l | grep 软件名                        # 检查是否安装某软件
sudo apt-get install build-essential        # 安装c/c++语言开发包,包含gcc、g++、make、gdb和libc等函数库,提供nginx编译时依赖gcc环境
sudo apt-get install libpcre3 libpcre3-dev  # 安装pcre库,提供nginx支持重写功能
sudo apt-get install zlib1g-dev             # 安装zlib库,提供nginx压缩和解压缩功能
sudo apt-get install openssl libssl-dev     # 安装openssl库,提供nginx通信加密功能

配置configure

cd /usr/local/nginx/
mkdir nginx-1.24.0-compile
cd /usr/local/nginx/nginx-1.24.0/
./configure --prefix=/usr/local/nginx/nginx-1.24.0-compile/ --with-http_ssl_module --with-http_stub_status_module

--prefix                            # 编译安装路径,切勿和nginx安装目录(/usr/local/nginx/nginx-1.24.0/)同路径
--with-http_ssl_module              # 安装ssl,支持HTTPS
--with-http_stub_status_module      # 提供nginx的客户端状态信息
–-user=dailiang                     # 所属用户
–-group=nginx                       # 所属组   

编译和安装,会在编译路径下生成conf、html、logs、sbin目录

make & make install

测试配置是否正确

cd /usr/local/nginx/nginx-1.24.0-compile/sbin/
./nginx -t

/usr/local/nginx/nginx-1.24.0-compile/sbin/nginx -t

修改配置nginx.conf

cd /usr/local/nginx/nginx-1.24.0-compile/conf/
vim nginx.conf

修改nginx的监听端口

server {
    listen       8979;
    server_name  localhost;

(4)配置环境变量

vim /etc/profile

在文件末尾添加如下内容

export NGINX_HOME=/usr/local/nginx/nginx-1.24.0-compile
export NGINX_PATH=${NGINX_HOME}/sbin
export PATH=$PATH:${JAVA_PATH}:${CATALINA_PATH}:${MAVEN_PATH}:${NGINX_PATH} # PATH用冒号做分隔符,其后追加环境变量

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(5)重新加载环境变量,使配置文件生效

source /etc/profile

(6)验证nginx安装(与windows命令相同)

nginx -v
nginx -version

(7)在访问nginx的时候需要关闭防火墙,否则防火墙会拦住我们的请求,若未关闭防火墙,在这里我们可以选择给某个端口开放访问权限

sudo apt-get install firewalld                              # 安装firewall
firewall-cmd --list-ports                                   # 查看已经开放的端口
firewall-cmd --zone=public --add-port=8979/tcp --permanent  # 永久开放8979端口
firewall-cmd --reload                                       # 重启firewall

命令解析

--zone             # 作用域,默认public,共block、dmz、drop、external、home、internal、public、trusted、work
--add-port=80/tcp  # 添加端口,格式为:端口/通讯协议
--permanent        # 永久生效,没有此参数重启后失效

也可以直接关闭防火墙

systemctl stop firewalld

但是要注意:工作中一定不可以直接关闭防火墙,只能对某个端口开放特定权限
(8)启动(可能有时候需要命令前加上 ./ ,因为nginx的启动脚本在sbin目录下)

nginx -c /usr/local/nginx/nginx-1.24.0-compile/conf/nginx.conf  # 指定配置文件启动nginx
nginx -s reopen                                                 # 重启nginx
nginx -s reload                                                 # 重新载入nginx配置文件
nginx -s stop                                                   # 强制停止nginx
nginx -s quit                                                   # 停止nginx
nginx -t                                                        # 测试nginx配置文件是否正确
nginx -T                                                        # 查看nginx配置文件
nginx -v                                                        # 查看nginx版本信息
nginx -V                                                        # 查看nginx编译参数
ps -ef | grep nginx                                             # 查看nginx进程
killall nginx                                                   # 杀死所有nginx进程
kill -9 pid                                                     # 杀死指定nginx进程

(9)访问

http://localhost:8979/

(10)conf配置文件详解

# 全局块
# 运行nginx的默认账号
#user  nobody;
# nginx进程数,建议设置为CPU总核心数
worker_processes  1;

# 全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# PID文件
#pid        logs/nginx.pid;

# 事件块
events {
# 单个进程最大链接数(最大连接数=连接数*进程数)
# 根据硬件调整,和前面工作进程配合起来用,尽量大,但别把CPU跑到100%就行,每个进程允许的最多连接数,理论上为每台nginx服务器的最大连接数
worker_connections  1024;
}

# http块
# 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
# include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
# 文件扩展名与文件类型映射表
include       mime.types;
# 默认文件类型
default_type  application/octet-stream;

    # 日志格式设定
    # $remote_addr:用来记录客户端的ip地址
    # $remote_user:用来记录客户端用户名称
    # $time_local:用来记录访问时间与时区
    # $request:用来记录请求的url与http协议
    # $status:用来记录请求状态;成功是200
    # $body_bytes_sent:用来记录发送给客户端文件主体内容大小
    # $http_referer:用来记录从那个页面链接访问过来的
    # $http_user_agent:用来记录客户端浏览器的相关信息
    # $http_x_forwarded_for:用来记录客户端的ip地址
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 定义本虚拟主机的访问日志
    #access_log  logs/access.log  main;

    # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设置为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载,注意:如果图片显示不正常把这个改成off
    # sendfile指令指定,nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime
    sendfile        on;
    #tcp_nopush     on;

    # 长连接超时事件,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # 第一个server区块开始,表示一个独立的虚拟主机站点
    server {
        listen       80;	# 提供服务的端口,默认80
        server_name  localhost; # 提供服务的域名或IP

        #charset koi8-r;

        # 对"/"启动反向代理,第一个location区块开始
        location / {
            root   html;	# 服务默认启动目录,可以改成指定的目录位置
            index  index.html index.htm;	# 默认的首页文件,多个用空格分开
            #try_files $uri $uri/ /index.html;	# 表示检查文件是否存在,返回第一个找到的文件,这里设置是index.html内部重定向
        }

        # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        #location /prod-api/ {
        #    proxy_set_header Host $host;
        #    proxy_set_header X-Real-IP $remote_addr;
        #    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #    proxy_connect_timeout  600;
        #    proxy_send_timeout     600;
        #    proxy_read_timeout     600;
        #    proxy_pass http://localhost:8384/;
		#}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        #错误页面路由
        error_page   500 502 503 504  /50x.html; # 出现对应的http状态码是,使用50x.html回应客户
        location = /50x.html { # location区块开始,访问50x.html
            root   html; # 指定对应的站点目录为html
        }

    }

}

linux安装nvm

下载地址:https://github.com/nvm-sh/nvm/releases/
(1)通过rz命令上传nvm-0.39.3.tar.gz到/usr/local/目录下,并创建nvm目录

cd /usr/local/
mkdir nvm

(2)解压nvm-0.39.3.tar.gz到指定路径

tar -zxvf /usr/local/nvm-0.39.3.tar.gz -C /usr/local/nvm/

(3)配置环境变量

vim ~/.bashrc

在文件末尾添加如下内容

export NVM_DIR="/usr/local/nvm/nvm-0.39.3"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
# This loads nvm bash_completion
# nodejs下载更换淘宝镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

保存后,按esc键,输入:wq,然后回车,退出vim编辑器
(4)重新加载环境变量,使配置文件生效

source ~/.bashrc

(5)验证nvm安装(与windows命令相同)

nvm -v
nvm --version

linux常用的软件位置

1.下载的软件的存放位置:

/var/cache/apt/archives

2.安装后软件的默认位置:

/usr/share

3.可执行文件位置:

/usr/bin

4.配置文件位置:

/etc

5.lib文件位置:

/usr/lib

ubuntu设置ssh连接(可通过FinalShell连接)

服务端主程序:

/usr/sbin/sshd

客户端程序:

/usr/bin/ssh

服务端配置文件:

/etc/ssh/sshd_config

先配置文件进行备份:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

更新软件库

sudo apt-get update

安装net-tools软件(包含了arp, hostname, ifconfig, netstat, rarp, route, plipconfig, slattach, mii-tool and iptunnel and ipmaddr等命令)

sudo apt-get install net-tools

卸载原始的openssh-server

sudo apt-get remove openssh-server

安装新的openssh-client openssh-server

sudo apt-get install openssh-client openssh-server

修改配置文件(可默认不修改)
vim /etc/ssh/sshd_config

Port 36000  # 默认的是22,但是windows有自己的ssh服务用的也是22端口,修改一下
UsePrivilegeSeparation no
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
AllowUsers root

重启ssh服务

sudo service ssh --full-restart

查看ip地址

ifconfig

打开FinalShell,添加ssh连接,填写ip 端口:22 账号:xiazhexi 密码:123456

Linux中的文件权限

在Linux系统中,读、写和执行的权限是以下列方式表示的,可以由三位或四位数字组成,范围从0到7。当使用3位数字时:

第一位代表文件所有者的权限
第二位代表文件组的权限
最后一位代表所有其他用户的权限

写入、读取和执行权限具有以下数字值:

r (读) = 4
w (写) = 2
x (可执行) = 1
无权限 = 0 特定用户类的权限数字是该类的权限值之和

权限的每个数字可以是4、2、1 和 0 的和:

值              权限             符号
0 (0+0+0)	   无权限	        ---
1 (0+0+1)	   仅执行	        --x
2 (0+2+0)	   仅写入	        -w-
3 (0+2+1)	   读取和执行	        -wx
4 (4+0+0)	   仅读取	        r--
5 (4+0+1)	   读取和执行	        r-x
6 (4+2+0)	   读取和写入	        rw-
7 (4+2+1)	   读取,写入和执行    rwx

例如,如果权限设置为750,则表示文件所有者有读、写、执行权限,文件组有读、执行权限,其他用户没有权限:

属主:rwx=4+2+1=7。
属组:r-x=4+0+1=5。
其他:---=0+0+0=0

当权限使用4位数字时,第一个数字的含义如下:

setuid = 4
setgid = 2
sticky = 1
no changes = 0 接下来的三位数的含义与使用三位数时相同

如果第一位数字为0,则可以省略,模式可以用3位数字表示,例如0755与755相同

linux操作防火墙信息

ubuntu22 ufw防火墙常用命令

检查防火墙状态,active活跃代表开启了防火墙,inactive非活跃代表关闭了防火墙

sudo ufw status

检查防火墙状态,输出将包含有关日志记录,默认策略和新配置文件的信息

sudo ufw status verbose

检查防火墙状态,使用编号状态获取所有活动规则的顺序和ID号

sudo ufw status numbered

防火墙版本

sudo ufw version

启用防火墙

sudo ufw enable

禁用防火墙

sudo ufw disable

开放端口、开放IP和开放端口/网络协议权限

sudo ufw allow 8080             # 允许8080访问
sudo ufw allow from 127.0.0.1   # 允许127.0.0.1访问
sudo ufw allow to 127.0.0.1     # 允许127.0.0.1访问
sudo ufw allow 22/tcp           # 允许22端口的tcp(udp、sctp、dccp)流量

删除开放端口、开放IP和开放端口/网络协议权限

sudo ufw delete 8080             # 删除8080访问
sudo ufw delete from 127.0.0.1   # 删除127.0.0.1访问
sudo ufw delete to 127.0.0.1     # 删除127.0.0.1访问
sudo ufw delete 22/tcp           # 删除22端口的tcp(udp、sctp、dccp)流量

默认允许所有外部访问

sudo ufw default allow

默认禁止所有外部访问

sudo ufw default deny

默认允许所有出去的流量

sudo ufw default allow outgoing

firewall防火墙常用命令(需要安装firewalld)

安装firewalld

sudo apt-get install firewalld

如下操作参数的命令含义:

--zone              # 作用域,默认public,共block、dmz、drop、external、home、internal、public、trusted、work
--add-port=80/tcp   # 添加端口,格式为:端口/通讯协议
--permanent         # 永久生效,没有此参数重启后失效
配置文件路径:/etc/firewalld/zones/public.xml

firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone),然后根据数据包的源地址或传入的网络接口等条件将流量传入相应区域,每个区域都定义了自己打开或者关闭的端口和服务列表。firewalld防火墙预定义了9个区域:

(1)trustedi信任区域):允许所有的传入流量。
(2)public(公共区域):允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
(3)external (外部区域):允许与ssh预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
(4)home(家庭区域):允许与ssh允许与ssh、ipp-client、 mdns、samba-client或dhcpvi-client预定义服务匹配的传入流量,其余均拒绝。
(5)internal(内部区域):默认值时与home区域相同。
(6)work (工作区域):允许与 ssh、ipp-client、dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
(7)dmz(隔离区域也称为非军事区域):允许与 ssh预定义服务匹配的传入流量,其余均拒绝。
(8)block(限制区域):拒绝所有传入流量。
(9)drop(丢弃区域):丢弃所有传入流量,并且不产生包含ICMP的错误响应。

查看设置

firewall-cmd --version                                  # 查看版本
firewall-cmd --help                                     # 查看帮助
firewall-cmd --state                                    # 显示状态
whereis firewalld                                       # 查看firewalld二进制文件和库文件的安装位置
whereis firewall-cmd                                    # 查看firewall-cmd二进制文件和库文件的安装位置
which firewalld                                         # 查看firewalld的安装位置
which firewall-cmd                                      # 查看firewall-cmd的安装位置
firewall-cmd --get-active-zones                         # 查看区域信息
firewall-cmd --get-zone-of-interface=eth0               # 查看指定接口所属区域
firewall-cmd --query-panic                              # 查看是否拒绝所有包
firewall-cmd --panic-on                                 # 拒绝所有包
firewall-cmd --panic-off                                # 取消拒绝所有包
firewall-cmd --reload                                   # 更新防火墙规则,不重启服务
firewall-cmd --complete-reload                          # 更新防火墙规则,重启服务

firewall-cmd --list-all                                 # 查看所有配置,默认区域public
firewall-cmd --get-zones                                # 查看所有支持的区域
firewall-cmd --get-services                             # 查看所有支持的服务
firewall-cmd --get-policies                             # 查看所有支持的默认策略
firewall-cmd --get-icmptypes                            # 查看所有支持的ICMP类型
firewall-cmd --get-ipsets                               # 查看所有支持的IP集合
firewall-cmd --get-helpers                              # 查看所有支持的辅助工具
firewall-cmd --info-zone=public                         # 查看指定区域信息
firewall-cmd --info-service=ssh                         # 查看指定服务信息
firewall-cmd --info-policy=allow-host-ipv6              # 查看指定策略信息
firewall-cmd --info-icmptype=address-unreachable        # 查看指定ICMP类型信息
firewall-cmd --info-ipset=127.0.0.1                     # 查看指定IP集合信息
firewall-cmd --info-helper=ftp                          # 查看指定辅助工具信息
firewall-cmd --info-service=ssh                         # 查看指定服务信息
firewall-cmd --get-active-zones                         # 查看当前正在使用的区域及其对应的网卡接口
firewall-cmd --zone=public --list-ports                 # 查看指定区域所有开放的端口
firewall-cmd --zone=public --list-services              # 查看指定区域所有开放的服务
firewall-cmd --zone=public --list-interfaces            # 查看指定区域所有开放的接口

操作设置

永久生效需要再加上 --permanent,然后通过firewall-cmd --reload更新防火墙规则
firewall-cmd --set-default-zone=public                  # 设置默认接口区域,立即生效无需重启
firewall-cmd --get-default-zone                         # 查看默认接口区域
firewall-cmd --zone=public --add-port=8080/tcp          # 加入一个端口到指定区域
firewall-cmd --zone=public --add-port=1000-2000/tcp     # 加入一个端口范围到指定区域
firewall-cmd --zone=public --remove-port=8080/tcp       # 从指定区域删除一个端口
firewall-cmd --zone=public --remove-port=1000-2000/tcp  # 从指定区域删除一个端口范围
firewall-cmd --zone=public --query-port=8080/tcp        # 查询端口是否在指定区域中
firewall-cmd --zone=public --add-service=http           # 加入一个服务到指定区域
firewall-cmd --zone=public --remove-service=http        # 从指定区域删除一个服务
firewall-cmd --zone=public --query-service=http         # 查询服务是否在指定区域中
firewall-cmd --zone=public --add-interface=eth0         # 将接口添加到指定区域
firewall-cmd --zone=public --remove-interface=eth0      # 从指定区域删除一个接口
firewall-cmd --zone=public --query-interface=eth0       # 查询接口是否在指定区域中
firewall-cmd --zone=public --change-interface=eth0      # 修改接口到指定区域
firewall-cmd --add-masquerade                           # 允许防火墙伪装IP
firewall-cmd --remove-masquerade                        # 禁止防火墙伪装IP
firewall-cmd --query-masquerade                         # 检查是否允许伪装IP
firewall-cmd --enable service=ssh                       # 允许SSH服务通过,加入--timeout=600设置临时超时时间为600秒
firewall-cmd --disable service=ssh                      # 禁止SSH服务通过
firewall-cmd --enable ports=8080/tcp                    # 允许TCP的8080端口
firewall-cmd --disable ports=8080/tcp                   # 禁止TCP的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=127.0.0.1 # 将80端口的流量转发至127.0.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=127.0.0.1:toport=8080 # 将80端口的流量转发至127.0.0.1的8080端口

systemctl常用命令(需要安装systemd)

经常和sudo(干超级用户才能干的事)搭配使用,例:sudo systemctl start 服务名
sudo全称“super user do”,意思为“干超级用户才能干的事”,是一个系统权限管理命令,可以让非root的用户运行只有root才有权限执行的命令。
安装systemd

sudo apt-get install systemd

查看设置

systemd-cgls                                        # 查看控制组信息,显示为树状结构
systemd-cgtop                                       # 查看控制组信息,显示CPU、内存、输入和输出
ps -eaf | grep [s]ystemd                            # 检查systemd是否运行
systemd-analyze                                     # 分析启动耗时
systemd-analyze blame                               # 分析所有服务耗时
systemd-analyze critical-chain                      # 分析启动关键链耗时
systemd-analyze critical-chain docker.service       # 分析指定服务的关键链耗时

systemctl --version                                 # 查看版本
systemctl status                                    # 查看状态
systemctl status 服务名                              # 查看服务状态
systemctl start 服务名                               # 启动服务
systemctl stop 服务名                                # 停止服务
systemctl restart 服务名                             # 重启服务
systemctl try-restart 服务名                         # 尝试重启服务
systemctl mask 服务名                                # 注销服务
systemctl unmask 服务名                              # 取消注销服务
systemctl enable 服务名                              # 设置开机启动
systemctl disable 服务名                             # 禁止开机启动
systemctl is-enabled 服务名                          # 查看服务是否开机启动
systemctl is-active 服务名                           # 查看服务是否正在运行
systemctl is-failed 服务名                           # 查看服务是否启动失败
systemctl kill 服务名                                # 杀死进程
systemctl reload 服务名                              # 重新加载服务配置文件
systemctl daemon-reload                             # 重新加载systemd配置文件
systemctl show 服务名                                # 查看服务配置文件

whereis systemd                                     # 查看systemd二进制文件和库文件的安装位置
whereis systemctl                                   # 查看systemctl二进制文件和库文件的安装位置
which systemd                                       # 查看systemd的安装位置
which systemctl                                     # 查看systemctl的安装位置
systemctl list-machines                             # 查看所有机器信息
systemctl show-environment                          # 查看系统环境变量
systemctl show -p CPUShares docker.service          # 查看指定服务的CPU分配额
systemctl set-property docker.service CPUShares=500 # 设置指定服务的CPU分配额,默认CPU分配额=1024
systemctl list-dependencies httpd.service           # 列出指定服务的所有依赖,显示为树状结构
systemctl list-unit-files                           # 查看所有系统服务
systemctl list-unit-files | grep enabled            # 查看已启动的服务,grep后可改为服务名
systemctl list-unit-files | grep disabled           # 查看未启动的服务,grep后可改为服务名
systemctl list-unit-files --type=<service>          # 查看指定类型系统服务

<service> :service,target,socket,device,mount,automount,timer,path,slice,scope,snapshot,security,swap,bus,container

启动模式

systemctl reboot                                    #  重启系统
systemctl poweroff                                  #  关闭系统
systemctl suspend                                   #  挂起系统
systemctl hibernate                                 #  休眠系统
systemctl hybrid-sleep                              #  混合睡眠(即休眠和挂起)
systemctl rescue                                    #  进入救援模式
systemctl emergency                                 #  进入紧急模式
systemctl isolate <target>                          #  进入指定启动模式
systemctl get-default                               # 查看系统默认启动模式
systemctl set-default <target>                      # 设置系统默认启动模式

<target>:multi-user.target(多用户模式)、graphical.target(图形化模式)、rescue.target(救援模式)、emergency.target(紧急模式)

挂起:是一种省电模式,系统将机器的硬盘、显示器等外部设备停止工作,而CPU、内存仍然工作,等待用户随时唤醒,再次唤醒需要按键盘上的Fn键数次。
休眠:是一种更加省电的模式,它将内存中的数据保存于硬盘中,使CPU也停止工作,当再次使用时需按开关机键,机器将会恢复到您的执行休眠时的状态,而不用再次执行启动系统这个复杂的过程。
待机:是将当前处于运行状态的数据保存在内存中,机器只对内存供电,而硬盘、屏幕和CPU等部件则停止供电。由于数据存储在速度快的内存中,因此进入等待状态和唤醒的速度比较快,不过这些数据是保存在内存中。
混合睡眠:指睡眠(sleep)和休眠(hibernate)同时进行,也就是说,先把信息写到硬盘的hiberfil.sys文件中,再进行睡眠。如果没有终止外部供电,则睡眠,如终止外部供电,则再次开机时读取hiberfil.sys进行恢复,可以说整合了两者的优势:比起睡眠有防掉电的功能,且比起休眠在不终止外部供电的情况下启动速度更快。

journalctl常用命令

journalctl                                                                # 查看所有日志
journalctl -k                                                             # 查看内核日志
journalctl -b                                                             # 查看系统本次启动的日志
journalctl -u 服务名                                                       # 查看指定服务日志
journalctl -f                                                             # 实时查看新添加的日志
journalctl -r                                                             # 按时间倒序查看所有日志
journalctl -n 20                                                          # 查看最后20行日志
journalctl --no-pager                                                     # 查看不分页日志
journalctl --disk-usage                                                   # 查看日志占用磁盘的空间的总大小
journalctl -p err                                                         # 查看级别以上的日志,err、warning、info、debug
journalctl --since="2023-12-30 18:17:16" --until="2024-12-30 18:18:16"    # 查看指定时间段的日志

linux查询进程信息

使用ps命令查看当前正在运行的所有进程及其相关信息,该命令会列出所有进程的PID(Process ID)、PPID(Parent Process ID)、CPU利用率、内存占用情况等信息:

ps -ef

如果只想查看特定进程的信息,可以结合grep过滤器来指定进程名称或者PID:

ps -ef | grep <process_name>   # 根据进程名称过滤
ps -p <pid>                    # 根据进程ID过滤

以用户为主的格式输出当前终端下的所有进程信息,包括其他用户的进程:

ps aux

若要动态地查看系统上正在运行的进程并按照CPU或内存使用量排序,则可以使用top命令:

top

默认情况下,top命令将显示最活跃的进程,包括它们的PID、USER(进程属主)、PR(优先级)、NI(nice值)、VIRT(虚拟内存大小)、RES(物理内存大小)、SHR(共享内存大小)、S(状态)、%CPU(CPU使用率)、%MEM(内存使用率)等信息 ,可以使用top命令的快捷键来动态地更新进程信息,例如按下p键可以按照CPU使用率排序,按下m键可以按照内存使用率排序,按下q键可以退出top命令
使用top命令时,还可以结合一些其他工具来更方便地查看进程信息,例如可以使用htop工具来查看进程的详细信息

htop

杀死进程

kill -9 pid

其中,-9表示强制终止进程,pid为要终止的进程ID号

ps命令中各字段解释:

USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
PPID:该进程的父进程ID号,在当前系统中是唯一的
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
TTY:该进程在哪个终端上运行,“?”表未知或不需要终端
STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程),对处于僵死状态的进程应予以手动终止。
START:启动该进程的时间
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令的名称

top命令中各字段解释:
(1)Tasks(系统任务)信息:

total:总进程数
running:正在运行的进程数
sleeping:休眠的进程数
stopped:中止的进程数
zombie:僵死无响应的进程数

(2)%CPU(s)信息(了解空闲的CPU百分比,主要看%id部分):

us:用户占用
sy:内核占用
ni:优先级调度占用
id:空闲CPU
wa:I/O等待占用
hi:硬件中断占用
si:软件中断占用
st:虚拟化占用

(3)MiB Mem(内存)信息:

total:总内存
free:空闲内存
used:已用内存
buff/cache:缓存内存

(4)MiB Swap(交换空间)信息:

total,总交换空间
free,空闲交换空间
used,已用交换空间
avail Mem,可用交换空间

linux查看端口占用的方法

查看特定端口的占用情况

lsof -i:端口号

用于查看指定的端口号的进程情况

netstat -anp | grep 端口号
netstat -tulnp | grep 端口号

-a  显示所有
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

查看端口被哪个进程占用

ps -ef | grep 端口号

查看端口被哪个进程占用

ss -tlnp | grep 端口号

查看端口被哪个PID占用

fuser 端口号/tcp

linux上的echo命令

在显示器上显示一段文字,一般起到一个提示的作用。此外,也可以直接在文件中写入要写的内容。也可以用于脚本编程时显示某一个变量的值,或者直接输出指定的字符串。
echo命令的语法格式

echo [选项] [输出内容]

-n:输出内容后不换行
-e:开启转义
-E:关闭转义

1.显示普通字符串

echo "Hello World"
echo "'Hello World'"
echo '"Hello World"'

2.输出之后不换行,直接显示新行的提示符

echo -n "Hello World" 123456

3.反斜线控制的转义字符,但是需要要有单引号或者双引号包含

echo -e '\a123456'                  # 电脑发出滴的警鸣声
echo -e '123\b456'                  # 删除\b前面一个字符
echo -e '123\c456'                  # \c后面的字符将不再输出,并且同echo -n命令输出形式相同不换行
echo -e '123\f456'                  # 换页符,光标停在原来的位置
echo -e '123\n456'                  # 换行符,光标移至行首
echo -e '123\r456'                  # 回车符,\r后面的字符覆盖\r前面同等长度的字符,当\r后面不存在任何字符时,\r前面的字符不会被覆盖,不换行
echo -e '123\t456'                  # 水平制表符,就是tab键
echo -e '123\v456'                  # 垂直制表符
echo -e '123\456'                   # 插入\字符
echo -e '123\e456'                  # Esc键,减少\e后面一个字符
echo -e '\0041'                     # 8进制ASCII码表,输出一个!,8进制为41,10进制是33,转义为\0041
echo -e '\x21'                      # 16进制ASCII码表,输出一个!,8进制为41,10进制是33,16进制为 21,转义为\x21
echo -e '123\033[31m456'            # 设置字符颜色
echo -e '123\033[41m456'            # 设置字符背景颜色
echo -e '123\033[31;41m456'         # 设置字符颜色和背景颜色
echo -e '123\033[31;41;5m456'       # 设置字符颜色、背景颜色和闪烁
echo -e '123\033[31;41;5;1m456'     # 设置字符颜色、背景颜色、闪烁和加粗
echo -e '123\033[31;41;5;1;7m456'   # 设置字符颜色、背景颜色、闪烁、加粗和隐藏

转义字符

转义字符                 含义
\a                          发出警告声
\b                          删除前一个字符
\c                          \c后面的字符将不再输出,同时输出完毕后内容也不换行
\f                          换页符,光标停在原来的位置
\n                          换行且光标移至行首
\r                          回车符
\t                          水平制表符,就是Tab键
\v                          垂直制表符
\                           插入\字符
\e                          Esc键
\0nnn                       按照八进制 ASCII 码表输出字符。其中 0 为数字 0,nnn 是三位八进制数
\xhh                        按照十六进制 ASCH 码表输出字符。其中 hh 是两位十六进制数
\e[1;31;41m内容\e[0m         PS1控制码格式: \e[格式控制;字体颜色;背景色m内容关闭颜色输出
\033[1;31;41m内容\033[0m     ANSI控制码格式:\033[格式控制;字体颜色;背景色m内容关闭颜色输出

\e或\033操作

echo -e '\e[A;B;Cm内容\e[0m'
echo -e '\033[A;B;Cm内容\033[0m'

A                 为格式控制,编号0~9
B                 为字体颜色,编号30~37
C                 为背景色,编号40~47
m                 格式后,内容前的标识
内容               要显示的内容
\e[0m或\033[0m     关闭颜色输出

格式控制

代码十进制    作用
0           清除所有格式(常用在格式控制末尾,以免对后序字符串造成影响)
1           加粗,与格式2冲突
2           字体变暗,与格式1冲突
3           斜体
4           下划线
5           呼吸闪烁(但有的机器上没效果))
6           同上
7           反显(背景色当前景色,前景色当背景色)
8           隐形(字符仍然存在,可以选中,只是看不到)
9           删除线

字体颜色和背景色

前景色代码    颜色                     背景色代码
30          黑色                      40
31          红色                      41
32          绿色                      42
33          黄色                      43
34          蓝色                      44
35          紫色                      45
36          青色                      46
37          白色,实际上是亮灰色         47

光标操作(\e<光标代码>或\033<光标代码>)

echo -e '\e[?25l'
echo -e '\033[?25l'

指令字符串   作用
c           清除屏幕,不可恢复(相当于clear命令)
[y;xH]      将光标移至第x列第y行处
[nA         将光标上移n行
[nB         将光标下移n行
[nC         将光标右移n行
[nD         将光标左移n行
[K          清除从光标(包括)到行末的内容
[s          记录光标的位置(只能记一次)
[u          恢复光标的位置
[?25l       隐藏光标
[?25h       显示光标

4.操作文本内容

echo '123456' > text.txt    #将内容覆盖到文件里去,文件不存在时,会先创建新文件再覆盖
echo '123456' >> text.txt   #将内容追加到文件最后一行下一行,文件不存在时,会先创建新文件再追加

5.输出命令
(1)输出日期

当前时间:2024-01-09 15:15:15
echo $(date)                                # 输出当前时间 Tue Jan 9 15:15:15 CST 2024
echo `date`                                 # 输出当前时间 Tue Jan 9 15:15:15 CST 2024
echo $(date +%F)                            # 输出当前年月日 2024-01-09
echo `date +%F`                             # 输出当前年月日 2024-01-09
echo $(date +%Y-%m-%d)                      # 输出当前年月日 2024-01-09
echo $(date +%x)                            # 输出当前年月日 01/09/24
echo $(date +%X)                            # 输出当前时分秒 15:15:15(00-23,24小时制)
echo $(date +%r)                            # 输出当前时分秒 上下午 03:15:15 PM(01-12,12小时制)
echo $(date +%R)                            # 输出当前时分 15:15(00-23,24小时制)
echo $(date +%T)                            # 输出当前时分秒 15:15:15(00-23,24小时制)
echo $(date +%Y-%m-%d\ %H:%M:%S)            # 输出当前年月日时分秒 2024-01-09 15:15:15
echo $(date +%Y-%m-%d%n%H:%M:%S)            # 输出当前年月日时分秒 2024-01-09 15:15:15
echo $(date +%c)                            # 输出当前时间 Tue Jan 9 15:15:15 2024
echo $(date +%C)                            # 输出当前世纪 20
echo $(date +%y)                            # 输出当前年份 24
echo $(date +%Y)                            # 输出当前年份 2024
echo $(date +%m)                            # 输出当前月份 01
echo $(date +%h)                            # 输出当前月份 Jan
echo $(date +%b)                            # 输出当前月份 Jan
echo $(date +%B)                            # 输出当前月份 January
echo $(date +%e)                            # 输出当前日期 9
echo $(date +%d)                            # 输出当前日期 09
echo $(date +%D)                            # 输出当前日期 01/09/24
echo $(date +%l)                            # 输出当前小时 3(1-12,12小时制)
echo $(date +%I)                            # 输出当前小时 03(01-12,12小时制)
echo $(date +%H)                            # 输出当前小时 15(00-23,24小时制)
echo $(date +%k)                            # 输出当前小时 15(0-23,24小时制)
echo $(date +%M)                            # 输出当前分钟 15
echo $(date +%S)                            # 输出当前秒 15
echo $(date +%N)                            # 输出当前纳秒 778122680
echo $(date +%s)                            # 输出当前时间戳 1704784515
echo $(date +%p)                            # 输出当前上下午 PM(0-11:AM、12-23:PM)
echo $(date +%P)                            # 输出当前上下午 pm(0-11:am、12-23:pm)
echo $(date +%a)                            # 输出当前星期几 Tue
echo $(date +%A)                            # 输出当前星期几 Tuesday
echo $(date +%w)                            # 输出当前星期几 2(0-6,0代表星期天)
echo $(date +%u)                            # 输出当前星期几 2(1-7,7代表星期天)
echo $(date +%U)                            # 输出当年第几周 01(从周日开始算第1周)
echo $(date +%V)                            # 输出当年第几周 02(从周一开始算第1周)
echo $(date +%W)                            # 输出当年第几周 02(从周一开始算第1周)
echo $(date +%j)                            # 输出当年第几天 009
echo $(date +%z)                            # 输出当前时区 +0800(北京时间,China Standard Time,中国标准时间),属东八区,即UTC+8
echo $(date +%Z)                            # 输出当前时区 CST(北京时间,China Standard Time,中国标准时间),属东八区,即UTC+8
echo $(date -d "2024-01-09" +%s)            # 输出指定日期的时间戳
echo $(date -d "2024-01-09 14:51:45" +%s)   # 输出指定日期时间的时间戳

(2)输出文件和变量

echo *                              # 输出当前目录下所有文件和文件夹(同ls命令)
echo sh*                            # 输出当前目录下所有以sh开头的文件和文件夹
echo *.sh                           # 输出当前目录下所有以.sh结尾的文件和文件夹
echo *sh*                           # 输出当前目录下所有包含sh的文件和文件夹
echo *[0-9]*                        # 输出当前目录下所有包含数字的文件和文件夹
echo *[!0-9]*                       # 输出当前目录下所有不包含数字的文件和文件夹
echo *[0-9][0-9]*                   # 输出当前目录下所有包含两位数字的文件和文件夹
echo $a                             # 输出变量a的值(也可直接输出环境变量的值,如$HOME)
echo '$a'                           # 输出引号内的内容
echo "$a"                           # 输出变量a的值
echo ${#a}                          # 输出变量a的长度
echo ${a%%/*}                       # 输出变量a第一个斜杠前的内容
echo ${a%/*}                        # 输出变量a最后一个斜杠前的内容
echo ${a#*/}                        # 输出变量a第一个斜杠后的内容
echo ${a##*/}                       # 输出变量a最后一个斜杠后的内容
echo ${变量名称:索引下标:字符长度}    # 变量名称、索引下标、字符长度
echo ${a:2}                         # 输出变量a的第3个字符到末尾
echo ${a:0:2}                       # 输出变量a的前2个字符到末尾2个长度的字符(开头索引从0开始)
echo ${a:0-2}                       # 输出变量a的倒数第2个字符到末尾(末尾索引从0-1开始)
echo ${a:0-2:1}                     # 输出变量a的倒数第2个字符到末尾1个长度的字符

6.命令执行结果

$0  # 脚本自身的名称  
$1  # 传入脚本的第一个参数
$2  # 传入脚本的第二个参数
$3  # 传入脚本的第三个参数
$#  # 传入脚本的参数个数
$@  # 传入脚本的所有参数
$*  # 传入脚本的所有参数
$$  # 脚本执行的进程id
$!  # 后台运行的最后一个进程的id
$_  # 上一个命令的最后一个参数
$?  # 上一条命令执行后的状态

$?返回的状态值

0       # 命令成功执行,没有错误
1       # 一般错误,没有具体的错误代码
2       # 语法错误或命令执行失败
126     # 命令无法执行,可能缺少执行权限
127     # 命令不存在或无法找到
128     # 无效的退出参数
130     # 命令被中断,通常由用户按下Ctrl+C导致
255     # 命令执行失败,通常由于出现无效的返回值

其中$@与$*区别:正常情况都是单个字符串的所有参数,当"$*"时,所有参数当做一个整体字符串对待

touch创建test.sh脚本文件,vim编辑粘贴如下脚本示例

#!/bin/bash
echo "脚本名称: $0"
echo "传入的第一个参数: $1"
echo "传入的第二个参数: $2"
echo "传入的第三个参数: $3"
echo "传入的参数个数: $#"
echo "传入的参数:$*"
for key in "$*"
do
echo $key
done
echo "传入的参数:$@"
for key in "$@"
do
echo $key;
done
echo "进程id: $$"
echo "最后一个进程id: $!"
echo "最后一个参数: $_"
echo "执行状态: $?"

Esc后:wq保存脚本,输入如下命令执行脚本

sh test.sh 1 2 3

linux上的tar命令

1.压缩一个目录

tar -cvzf test.tar.gz tar #压缩当前目录下的tar目录,压缩包的名字叫test.tar.gz

2.压缩其中某一类型的文件

tar -cvzf test.tar.gz ./*.c #压缩当前目录下的.c为后缀的文件。但是不能压缩以.开头的文件

3.查看一个压缩文件的内容

tar -tvf test.tar.gz #查看当前目录下test.tar.gz压缩文件中的文件

4.解压一个文件

tar -xvzf test.tar.gz #解压test.tar.gz到当前目录下面

5.文件夹做一个归档文件、备份一个目录

tar -cvf test.tar tar #将tar文件夹下的文件生成一个test.tar归档文件

6.将某一类型的文件做成归档文件、备份某一类型的文件

tar -cvf test.tar ./tar/*.c # 将tar文件夹下所有以.c结尾的文件放到test.tar 文件中,但是以.开头的文件不行

7.向归档文件中添加一个文件夹

tar -rf test.tar ./test1 #将test1文件夹中的所有文件,添加到test.tar 归档文件中

8.删除归档文件中的文件

tar -f test.tar --delete a.c #删除test.tar文件中的 a.c文件

9.删除归档文件中的某一类的文件

tar -f test.tar --delete *.c #删除test.tar文件中的 以.c结尾的文件

10.释放归档文件

tar -xvf test.tar #释放test.tar归档文件中的内容到 当前目录下

11.查看归档文件中的内容

tar -tvf test.tar
tar cvf etcbak.tar etc/         # 打包一个tar
tar xvf etcbak.tar              # 解开一个tar
tar cvzf etcbak.tar.gz etc/     # 打包压缩一个 tar
tar zxvf etcbak.tar.gz          # 解压一个tar
tar jcvf etcbak.tar.bz2 etc/    # 打包压缩一个 tar

*.tar                 # 用 tar –xvf 解压  
*.gz                  # 用 gzip -d或者gunzip 解压  
*.tar.gz和*.tgz        # 用 tar –xzf 解压  
*.bz2                 # 用 bzip2 -d或者用bunzip2 解压  
*.tar.bz2             # 用tar –xjf 解压  
*.Z                   # 用 uncompress 解压  
*.tar.Z               # 用tar –xZf 解压  
*.rar                 # 用 unrar e解压  
*.zip                 # 用 unzip 解压

linux上的zip、unzip命令

安装

sudo apt-get install zip unzip

1.基本命令:

zip 参数 压缩后的压缩包(可不带扩展名) 需要压缩的文件或目录

-d  # 从压缩文件内删除指定的文件
-D  # 压缩文件内不建立目录名称
-g  # 将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件
-m  # 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中
-q  # 不显示指令执行过程
-r  # 递归处理,将指定目录下的所有文件和子目录一并处理
-S  # 包含系统和隐藏文件
-t  # 把压缩文件的日期设成指定的日期
-v  # 显示指令执行过程或显示版本信息
-z  # 替压缩文件加上注释
-   # 压缩效率是一个介于1~9的数值

unzip 参数 需要解压的压缩包

-l  # 显示压缩文件内所包含的文件
-t  # 检查压缩文件是否正确
-v  # 执行时显示详细的信息
-z  # 仅显示压缩文件的备注文字
-n  # 解压缩时不要覆盖原有的文件
-o  # 不必先询问用户,unzip执行后覆盖原有的文件
-d  # 指定文件解压缩后所要存储的目录
-Z  # unzip-Z等于执行zipinfo指令

2.压缩文件命令:

zip file1.zip file1         # 将文件file1压缩成file1.zip文件
zip -r file2.zip file2      # 将文件file2及其子目录下的所有文件压缩成file2.zip文件
zip -r file3.zip ./dir      # 将目录dir及其子目录下的所有文件压缩成file3.zip文件

3.解压缩文件命令:

unzip file1.zip                     # 解压缩file1.zip文件
unzip -d dir1 file1.zip             # 将file1.zip文件解压缩到dir1目录下
unzip -t file1.zip                  # 检查file1.zip文件是否正确
unzip -l file1.zip                  # 显示file1.zip的文件列表,但不解压缩
unzip -v file1.zip                  # 显示file1.zip的文件列表,并显示压缩比率,但不解压缩
unzip -z file1.zip                  # 显示压缩文件的备注文字,但不解压缩
unzip -Z file1.zip                  # 显示压缩文件基本信息,并显示压缩比率,但不解压缩
unzip -c file1.zip                  # 解压缩file1.zip文件,并将结果显示到标准输出
unzip -f file1.zip                  # 强制解压缩file1.zip
unzip -o file1.zip                  # 将file1.zip文件中的所有文件解压缩到当前目录下,覆盖原有的文件
unzip -j file1.zip                  # 解压缩file1.zip文件中所有以.jpg或.gif结尾的文件
unzip -x file1.zip                  # 解压缩除file1.zip文件中所有以.jpg或.gif结尾的文件以外的所有文件

linux上的vim命令

安装

sudo apt-get install vim

1.基本命令:

i:在当前光标位置插入文本。
x:删除当前光标所在位置的字符。
:w:保存文件。
:q:退出Vim编辑器。
:q!:强制退出Vim编辑器,不保存文件。
:wq:保存文件并退出Vim编辑器。

2.光标移动命令:

h:将光标向左移动一个字符。
j:将光标向下移动一行。
k:将光标向上移动一行。
l:将光标向右移动一个字符。
w:将光标移动到下一个单词的开头。
e:将光标移动到当前单词的末尾。
b:将光标移动到上一个单词的开头。
0:将光标移动到当前行的开头。
$:将光标移动到当前行的末尾。
G:将光标移动到文件的末尾。
gg:将光标移动到文件的开头。
/<pattern>:向下搜索<pattern>。

2.文本编辑命令:

dd:删除当前行。
yy:复制当前行。
p:粘贴已复制或删除的文本。
u:撤销上一次操作。
Ctrl-r:重做上一次操作。
r:替换当前光标所在位置的字符。
c:删除从当前光标位置到指定位置的文本并进入插入模式。
v:进入可视模式,选择文本。
:s/<old>/<new>/g:将当前行中的<old>替换为<new>。
:%s/<old>/<new>/g:将整个文件中的<old>替换为<new>。

3.插入模式命令:

Esc:退出插入模式。
Ctrl-h:删除光标左侧的字符。
Ctrl-w:删除光标左侧的单词。
Ctrl-u:删除当前行的所有文本。
Ctrl-a:插入文本到行首。
Ctrl-e:插入文本到行尾。
Ctrl-t:插入一个制表符。

4.宏命令(宏是一种将多个操作序列记录并重复执行的方法):

qa:开始录制宏并将其存储在寄存器a中。
q:停止录制宏。
@a:执行存储在寄存器a中的宏。
@@:重复上一次执行的宏。

5.分屏命令:

:sp:水平分屏当前窗口。
:vsp:垂直分屏当前窗口。
Ctrl-w h:将光标移到左侧窗口。
Ctrl-w j:将光标移到下方窗口。
Ctrl-w k:将光标移到上方窗口。
Ctrl-w l:将光标移到右侧窗口。
Ctrl-w +:增加当前窗口的高度。
Ctrl-w -:减小当前窗口的高度。

6.多文件编辑命令:

:e <filename>:打开指定的文件。
:tabnew <filename>:在新选项卡中打开指定的文件。
:tabnext:切换到下一个选项卡。
:tabprev:切换到上一个选项卡。
:tabclose:关闭当前选项卡。

7.其他命令:

:set number:显示行号。
:set nonumber:隐藏行号。
:set expandtab:使用空格代替制表符。
:set tabstop=4:设置制表符宽度为4个字符。
:set hlsearch:高亮显示搜索结果。
:set nohlsearch:取消高亮显示搜索结果。
:set background=dark:将背景设置为暗色。
:set background=light:将背景设置为亮色。
  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏柘析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值