Linux常用命令:
一、 vi和vim
- 正常模式:使用vi xxx(文件名)或者vim xxx(文件名)
- 插入模式:使用i或者a
- 命令模式:按esc键,输入冒号后输入wq(保存退出),q(退出),q!(强制退出,不保存)
- 正常模式下常用命令
拷贝当前行:yy,拷贝当前行向下5行:5yy
删除当前行:dd,删除当前行向下5行:5dd
在文件中查找某个关键字[命令模式下"/关键字"],回车查找,输入n查找下一个关键字
设置文件行号:set nu,取消文件行号:set nonu
正常模式下输入G,回到最后一行,输入gg,回到首行
返回一般模式按esc键
写入撤销,在一般模式下,按u进行撤销
一般模式下,定位光标:输入行号,再输入shift + g
二、 关机&重启
- 常用命令
立刻关机:shutdown -h now
1分钟后关机:shutdown -h 1
立刻重启计算机:shutdown -r now
把内存数据同步到磁盘:sync
三、 用户注销&切换
- 常用命令
切换用户:su - root(用户名)
返回上一个用户:logout
四、 用户管理
- 常用命令
1.1 用户创建:
添加用户:useradd 用户名
添加用户并创建默认家目录:useradd -d 目录位置 用户名
指定/修改密码:passwd 用户名
删除用户并保留用户家目录:userdel 用户名
删除用户并删除用户家目录:userdel -r 用户名
1.2 查看当前用户信息:
查看当前用户信息:whoami/ who am i(查看当前用户登录信息详情)
1.3 用户组:
新增组:groupadd 组名
删除组:groupdel 组名
增加用户时直接加上组:useradd -g 用户组 用户名
查看当前用户下的组信息:id 用户名
修改用户的组:usermod -g 用户组 用户名
1.4 用户和组相关文件:
/etc/password 文件:用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
/etc/shadow 文件:口令配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小间隔时间:最大间隔时间:不活动时间:失效时间:标志
/etc/group文件:组(group)的配置文件,记录linux中包含的组的信息
每行的含义:组名:口令:组标识号:组内用户列表
四、 linux运行级别
- 常用命令
关机:init 0
多用户有网络服务:init 3
重启:init 6
图形界面: int 5
设置linux启动默认运行级别:在/etc/initab 目录下 multi-user.target:analogous to runlevel 3(级别)
五、 linux帮助指令
- 常用命令
1. 获取命令帮助信息:man ls(命令名字)
2. 获取命令帮助信息:help ls(命令名字)
3. 在linux下,隐藏文件是以点开头的,可以使用组合命令进行查看:ls -la 文件夹路径.
六、 linux文件目录
- 常用命令
pwd:查看当前位置绝对路径
ls:查看目录或者文件
常用选项:-a 显示当前目录或者文件,包含隐藏文件或目录
-l 以列表的形式进行显示信息
cd:切换目录
基本语法:cd [参数]:切换到指定目录(可以是绝对路径或者是相对路径)
cd~:切换到自己的家目录
cd .. : 切换到当前目录的上一级目录
mkdir:创建目录
基本语法:mkdir [选项] 要创建的目录
常用选项:-p:创建多级目录
rmdir:删除空目录
基本语法:rmdir [选项] 要删除的空目录
使用细节:rmdir 删除的是空目录,如果目录下有内容的话,则无法删除,应该使用rm -rf 要删除的目录
touch:创建空文件
基本语法:touch 文件名称
cp:拷贝文件到指定目录
基本语法:cp [选项] source(源文件) desc(目标文件)
常用选项:-r :递归复制整个文件夹
强制覆盖:\cp -r source(源文件) desc(目标文件)
rm:移除文件或目录
基本语法:rm [选项] 要删除的文件或目录
常用选项:-r:递归删除整个文件夹
-f:强制删除不提示
mv:移动文件或目录或重命名
基本语法:mv oldNameFile newNamefile(重命名)
mv /temp/xxx /home/xxx(移动文件)
cat:查看文件内容
基本语法:cat [选项] 要查看的文件
常用选项:-n:显示行号
more:文本过滤器
基本语法:more 文件名
操作说明:Ctrl+F:向下滚动一屏
Ctrl+B:向上滚动一屏
less:分屏查看文件内容
基本语法:less 要查看的文件
操作说明:/字符串 启动搜索功能
[pagedown]:向下翻动一页
echo:输出内容到控制台
基本语法:echo [选项] [输出内容]
head:用于显示文件的开头部分内容,默认显示文件前10行内容
head -n 5 文件名
tail:用户显示文件尾部内容,默认情况显示末尾10行内容
基本语法:tail 文件
tail -n 5 文件
tail -f 文件(实时输出文件内容)
tailf -行数 文件名
>: 输出重定向
基本语法:ls -l > 文件 (功能描述:列表内容写入文件中,这里的写入是覆盖的写入,将原来的文件内容删除,写入新的文件内容)
ls -al >> 文件(功能描述:列表内容写入文件末尾,这里的写入是追加写入)
cat 文件1 > 文件2(将文件1内容覆盖到文件2)
echo "内容" >> 文件(追加)
ln:软连接,类似于windows中快捷方式
基本语法:ln -s [原文件或目录] [软连接名](功能描述:给原文件创建一个软连接)
删除软连接:rm 软连接位置(/home/myroot)
history:查看历史命令
基本语法:history 10 (查看历史10条指令)
grep:
-a 搜索所有文件(包含二进制文件):
-r 递归搜索
-i 忽略大小写
-w 全字匹配
-v 显示不包含特定文本的行
-l 显示包含特定文本的文件名
-c 计算搜索到的行数
-E 正则搜索
-n 搜索结果显示所在行数
and
grep -E 'pattern1.*pattern2' [files]
or
grep -E 'pattern1|pattern2' [files]
not
grep -v pattern [files]
例如:搜索test及其子目录下所有包含字符串“hello” 或 “world”的文件,只显示文件名
grep -l -r -E 'hello|world' test
搜索test及其子目录中的所有包含“hello”的文件,显示每个文件符合的行数
grep -r -c hello test
find:
常用选项
-name 查找指定名称
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被访问过的文件
-amin n:在过去n分支内被访问过的文件
-ctime n : 在过去n天内状态改变过的文件,如写入内容,读写执行权限改变等
-cmin n : 在过去 n 分钟内状态被修改过的文件
-cnewer file :比文件 file 更新的文件
-mtime n:在过去n天内被修改过内容的文件
-mmin n:在过去n分钟内被修改过内容的文件
-size n : 文件大小 是 n 单位:
b:block(512字节块)
c:字节数
w: 字数(双字节)
k:Kilobytes
M:Megabytes
G:Gigabytes
例如:
查找当前目录及子目录下的名字以log结尾的所有子目录:find . -type d -name *log
查找test及子目录下在5分钟内修改过的所有大于1k的子文件:find test -type f -cmin -5 -size +1k
查找test及子目录下大于1M并且后缀不是.bin的文件:find test -type f -size +1M -and ! -name *.bin
七、 linux时间日期类
- 常用命令
基本语法:
date:显示当前时间
date +%Y:显示当前年份
date +%m:显示当前月份
date +%d:显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒
八、 linux文件查找
- 常用命令
find:从指定目录向下递归查找各个子目录,以满足条件的文件显示在终端
基本语法:find [搜索范围] [选项]
选项:-name <查询方式>
-user <用户名>
-size <文件大小>
which:查看某个指令在哪个目录下
基本语法:which ls
grep:过滤查找,配合管道符进行操作
基本语法:cat xxx | grep [选项] 查找条件
选项:-n 显示行号
-i 忽略大小写
-C 显示查找条件前后行
-A 显示条件后面多少行
-B 显示条件前面多少行
九、 linux文件压缩与解压
- 常用命令
gzip:用于文件压缩
基本语法:gzip /home/test/test.txt
gunzip:用于文件解压
基本语法:gunzip /home/test/test.txt.gz
zip:用于文件或文件夹压缩
基本语法:zip [选项] xxx.zip 将要压缩的内容(压缩文件或者目录的命令)
选项:-r:递归压缩,即压缩目录
unzip:用于文件或文件夹解压
基本语法:unzip [选项] 解压到的目录位置 压缩包位置
选项:-d:指定压缩后文件的存放目录
tar:用于文件压缩与解压
基本语法:tar [选项] XXX.tar.gz 打包的内容(功能描述:打包目录的,压缩后的文件格式为.tar.gz)
指定解压缩文件位置:tar -zxvf xxx.tar.gz -C 指定解压缩位置
选项:-c:产生.tar打包文件
-v:显示详情信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包.tar文件
十、 服务器基本信息
- 查看系统主机名称:hostname
- 查看系统内核版本:uname -r
- 查看Centos版本:cat /etc/centos-release
- 查看cpu信息:lscpu
- 列出所有可用设备:lsblk
- 查看磁盘空间大小:df -h
- 查看内存占用:free -h
- 查看文件/目录空间占用:du -hd1 目录位置 | sort -hr
du,是 disk usage 的缩写,它与上面的 df 命令并不相同。-h 选项表示以适合人类阅读的格式展示结果,-d 选项表示最多再往下查找几层子目录,后面跟个 1 就表示查找当前目录以及当前目录的子目录这两级目录,最后跟上要查看的目标目录或文件,然后将结果按适合人类阅读的格式倒序展示。上面的命令意思就是查看根目录 / 本身及其一级子目录、文件的空间占用情况。
十一、 服务器网络
- 查看服务器内网ip:
ip -a
ifconfig
- 查看服务器公网出口ip
curl cip.cc
curl myip.ipip.net
curl,是 command url 的缩写,通过命令行访问 url 的意思。有些服务器的公网出口 IP 可能是动态的并不固定,所以最好是用这两个命令都查一下,以便比对结果是否一致。另外要注意,服务器的公网出口 IP 和公网入口 IP 并不总是一致的,比如我们公司的公网出口 IP 是 183.129.254.162,公网入口 IP 则是 183.129.254.168。
- 查看服务器防火墙状态:systemctl status firewalld
- firewalld防火墙添加规则/重置规则/查看开放端口
firewalld防火墙添加规则:sudo firewall -cmd --add-port=端口号
firewalld防火墙重置规则(重载之后,添加、删除等操作,才能真正生效):sudo firewall -cmd --reload
查看开放端口:sudo firewall -cmd --list-ports
- 查看DNS与hosts:cat /etc/resolv.conf
查看DNS: cat /etc/resolv.conf
/etc/resolv.conf 是服务器的 DNS 配置文件
查看hosts: cat /etc/hosts
/etc/hosts 是服务器的 hosts 配置文件
- ping 与 telnet
ping 是基于 ICMP 协议(Internet Control Message Protocol,互联网控制消息协议)的,属于 OSI 7 层模型中的网络层,它既可以 ping 域名(ping 域名可以用来测试这个域名解析的 IP 地址是多少),也可以 ping IP,但是跟端口没任何关系,请不要在 ping 域名或 ping IP 后面加任何端口!ping 通常用来测试网络连通性
telnet 属于应用层,是 TCP/IP 协议族的其中之一,既然是应用层就跟端口有关系了,所以 telnet 域名或 telnet IP 后面要跟上端口(用空格分隔开来,注意不是用英文的冒号来分隔)
ping www.baodu.com
ping 127.0.0.1
telnet www.baidu.com:8848
telnet 127.0.0.1 8848
十二、 服务进程与网络连接
- 查看进程信息:ps -ef | grep xxx
- 查看端口是否被使用:
lsof -i:443
就表示查看本机上是否有进程在使用/连接 443 端口。如果在结果里能看到 (LISTEN) ,就表示本机有进程正在占用 443 端口。如果还能看到 (ESTABLISHED) 或 (CLOSE_WAIT) 这样的,就表示有其他目标主机有到本机 443 端口的网络连接。
十三、 Docker
- 仓库
$ sudo docker search $KEY_WORD # 按关键字在 Docker Hub 中查找镜像
$ sudo docker pull $REGISTRY:$TAG # 从 Docker 仓库中拉取镜像
$ sudo docker push $IMAGE_NAME:$IMAGE_TAG # 推送镜像到 Docker 仓库,需要先登录
$ sudo docker login $REGISTRY_URL --username=$username --password=$password # 登录仓库,password 参数不建议直接写出来
$ sudo docker logout $REGISTRY_URL # 登出仓库
$ sudo docker info # 显示 Docker 的详细信息
$ sudo docker version # 显示 Docker 的版本信息
$ sudo docker --help # 显示 Docker 的帮助信息
- 镜像
$ sudo docker images # 查看本地镜像
$ sudo docker images --digests | grep $IMAGE_ID # 查看本地镜像的 SHA256 摘要信息,方便和 Harbor 仓库里的镜像 SHA256 摘要信息进行比对,以确保服务器上的镜像文件和仓库里的镜像文件到底是不是同一个
$ sudo docker rmi $IMAGE_ID # 删除本地镜像
$ sudo docker inspect $IMAGE_ID # 查看镜像详情
$ sudo docker save $IMAGE_ID > 文件路径 # 保存镜像为本地离线文件
$ sudo docker save -o 文件路径 $IMAGE_ID # 保存镜像为本地离线文件
$ sudo docker load < 文件路径 # 加载本地离线文件为 docker 镜像
$ sudo docker load -i 文件路径 # 加载本地离线文件为 docker 镜像
$ sudo docker tag $IMAGE_ID $NEW_IMAGE_NAME:$NEW_IMAGE_TAG # 修改本地镜像的 TAG
$ sudo docker run 参数 $IMAGE_ID $CMD # 运行一个镜像
$ sudo docker history $IMAGE_ID # 显示镜像每层的变更内容(很实用,可以进行构建优化)
- 容器
$ sudo docker exec $CONTAINER_ID # 在运行的容器中执行命令
$ sudo docker attach $CONTAINER_ID # 启动一个已存在的 Docker 容器
$ sudo docker stop $CONTAINER_ID # 停止 Docker 容器
$ sudo docker start $CONTAINER_ID # 启动 Docker 容器
$ sudo docker restart $CONTAINER_ID # 重启 Docker 容器
$ sudo docker kill $CONTAINER_ID # 强制关闭 Docker 容器
$ sudo docker pause $CONTAINER_ID # 暂停 Docker 容器
$ sudo docker unpause $CONTAINER_ID # 恢复暂停的 Docker 容器
$ sudo docker rename $CONTAINER_ID # 重命名 Docker 容器
$ sudo docker rm $CONTAINER_ID # 删除 Docker 容器
$ sudo docker logs $CONTAINER_ID # 查看 Docker 容器的运行日志,确保正常运行
$ sudo docker inspect $CONTAINER_ID # 查看 Docker 容器的属性,比如 IP、网络模式、目录挂载等信息(很实用)
$ sudo docker port $CONTAINER_ID # 查看 Docker 容器的端口映射
$ sudo docker top $CONTAINER_ID # 查看 Docker 容器中正在运行的进程(很实用)
$ sudo docker commit $CONTAINER_ID $NEW_IMAGE_NAME:$NEW_IMAGE_TAG # 将 Docker 容器保存为镜像
$ sudo docker ps -a # 查看所有 Docker 容器
$ sudo docker stats # 查看 Docker 容器的资源使用情况,包括 CPU、内存、网络 I/O 等
$ sudo docker cp $SOURCE $TARGET # 在宿主机和 Docker 容器之间复制文件,可双向复制
- docker run 命令
# -d,后台运行容器,并返回容器 ID;不指定时,启动后开始打印日志,Ctrl+C 退出就会关闭容器
# -i,以交互模式运行容器,通常与 -t 同时使用
# -t,为容器重新分配一个伪输入终端,通常与 -i 同时使用
# --name container_name,设置容器名称,不指定时随机生成
# -h container_hostname,设置容器的主机名,默认随机生成
# --dns 8.8.8.8,指定容器使用的 DNS 服务器,默认和宿主机一致
# -e docker_host=172.17.0.1,设置环境变量,容器内部可使用
# --cpuset="0-2" or --cpuset="0,1,2",绑定容器到指定 CPU 运行
# -m 100M,设置容器使用内存最大值,否则默认无上限
# --net bridge,指定容器的网络连接类型,支持 bridge/host/none/container 四种类型
# --ip 172.18.0.13,为容器指定固定 IP(需要使用自定义网络)
# --expose 8081 --expose 8082,开放一个端口或一组端口,会覆盖镜像设置中开放的端口
# -p [宿主机端口]:[容器内端口],宿主机到容器的端口映射,可指定宿主机的要监听的 IP,默认为 0.0.0.0
# -P,注意是大写的,宿主机随机指定一组可用的端口映射容器 expose 的所有端口
# -v [宿主机目录路径]:[容器内目录路径],挂载宿主机上的指定目录(或文件)到容器内的指定目录(或文件)
# --add-host [主机名]:[IP],为容器 hosts 文件追加 host,默认会在 hosts 文件最后追加[主机名]:[容器IP]
# --volumes-from [其他容器名],将其他容器的数据卷添加到此容器
# --link [其他容器名]:[在该容器中的别名],添加链接到另一个容器,在本容器 hosts 文件中加入关联容器的记录,效果类似于 --add-host
- 远程文件上传
前提是两台机器网络要互通
# 复制目录
scp -r local_folder remote_username@remote_ip:remote_folder
# 或者
scp -r local_folder remote_ip:remote_folder
-r 是递归复制的意思。如果远程地址在前,本地地址在后,那就是从远程复制到本地。