基础命令
title: linux-command date: 2022-01-18 10:00:00 permalink: /technology/linux/command categories:
- Linux
- command tags:
- command
谦虚、严谨、勤思、善问、实践
https://www.runoob.com/linux/linux-command-manual.html
# 1 shell
# 查看当前系统下有哪些shell
cat /etc/shells
# 查看当前正在使用的shell
cat $SHELL
# 历史记录
history
# 主键盘快捷键
ctrl+p previous
ctrl+n next
ctrl+b backward
ctrl+f forword
ctrl+d delete光标后面的
ctrl+a the first letter
ctrl+e end
Backspace delete光标前面的
ctrl+u delete光标前面的所有
vi /etc/profile
source /etc/profile
# 2 目录和文件
ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面
/ 根目录
bin //系统可执行程序,如命令
boot //内核和启动程序,所有和启动相关的文件都保存在这里
grub //引导器相关文件
dev //设备文件
etc //系统软件的启动和配置文件,系统在启动过程中需要读取的文件都在这个目录。如LILO参数、用
户账户和密码。
home //用户的主目录。下面是自己定义的用户名的文件夹
lib //系统程序库文件,这个目录里存放着系统最基本的动态链接共享库,类似于Windows下的system32
目录,几乎所有的应用程序都需要用到这些共享库。
media //挂载媒体设备,如光驱、U盘等
mnt //目录是让用户临时挂载别的文件系统,如挂载Windows下的某个分区,ubuntu默认还是挂载在/media
目录。
opt //可选的应用软件包(很少使用)
proc //这个目录是系统内存的映射,我们可以直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里。
sbin //管理员系统程序
selinux
srv
sys //udev用到的设备目录树,/sys反映你机器当前所接的设备
tmp //临时文件夹
usr //这是个最庞大的目录,我们要用到的很多应用程序和文件几乎都存放在这个目录下。
bin // 应用程序
game //游戏程序
include
lib //应用程序的库文件
lib64
local //包含用户程序等
sbin //管理员应用程序
# ls
ls [option] [file]
-a 列出隐藏文件,文件中以“.”开头的均为隐藏文件,如:~/.bashrc
-l 列出文件的详细信息
-R 连同子目录中的内容一起列出
# 文件类型说明 ls -l 显示信息的第一个字符
- 普通文件
d 目录
l 符号链接
b 块设备文件
c 字符设备文件
s socket文件,网络套接字
p 管道
# which
查看指定命令所在路径 which ls
# mkdir & rmdir
# -p 确保目录名称存在,不存在的就建一个
mkdir [-p] dirName
# -p 连同父目录一起删除
rmdir [-p] dirName
# rm
# 删除文件 -i 提示
rm file
# 删除目录
rm dir -rf
# more
more [-dlfpcsu] [-num] [+/pattern] [+linenum] FILE…
# 查看文本文件的内容,屏幕显示完一屏就等待用户按下任意键再滚动到下一屏,如果中途不想继续看下去了,可以按Ctrl+C或q终止显示。
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
# ln
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立 指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果 给ln命令加上-s选项,则建立符号链接。举例如下,注意ls -l列出文件的硬链接数和字节 数: 硬链接不占用空间
硬链接:
touch hello
ln hello word_h
软链接:
ln -s hello word_s
硬链接找磁盘上对应的文件
# df
# df查看磁盘使用情况
df --block-size=GB
df --block-size=MB
# 文件属性和文件用户组
# whoami
查看当前登陆用户
# chmod
目录必须有执行权限 文字设定法 chmod [who] [+|-|=] [mode] 文件名 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它是系统默认值。 操作符号可以是:
- 添加某个权限。
- 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。 设置mode所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。
数字设定法 chmod [mode] 文件名 我们必须首先了解用数字表示的属性的含义: 0表示没有权限, 1表示可执行权限, 2表示可写权限, 4表示可读权限
# chown
比如把一个文件改为itcast用户和nogroup用户组所有 $ sudo chown itcast:nogroup file1
# chgrp
chgrp GROUP FILE
# 查找与检索
# find
根据文件名查找 find . -name 'file*' 根据文件大小查找 find . -size +10k 根据文件类型查找 find . -type d/f/b/c/s/p/l
# grep
按文件内容查找 grep -r "查找的内容" filepath
# 安装卸载软件
# apt-get
更新源服务器列表 https://blog.csdn.net/davidhzq/article/details/102634325 sudo vi /etc/apt/sources.list 更新完服务器列表后需要更新下源 sudo apt-get update 更新软件列表 存储着能够安装的软件和下载地址 sudo apt-get install package 安装包 sudo apt-get remove package 删除包 sudo apt-cache search package 搜索软件包 sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package --reinstall 重新安装包 sudo apt-get -f install 修复安装 sudo apt-get remove package --purge 删除包,包括配置文件等 sudo apt-get build-dep package 安装相关的编译环境 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 sudo apt-cache depends package 了解使用该包依赖那些包 sudo apt-cache rdepends package 查看该包被哪些包依赖 sudo apt-get source package 下载该包的源代码 sudo apt-get clean 清理无用的包/缓存 sudo apt-get check 检查是否有损坏的依赖
# deb包安装
安装deb软件包命令: sudo dpkg -i xxx.deb 删除软件包命令: sudo dpkg -r xxx.deb
# 原码安装
- 解压缩源代码包
- cd dir
- ./configure 检测文件是否缺失,创建Makefile,检测编译环境
- make 编译源码,生成库和可执行程序
- sudo make install 把库和可执行程序,安装到系统路径下
- sudo make distclean 删除和卸载软件
# 磁盘管理
# mount 挂载
系统默认挂载目录:/media 手动挂载目录:/mnt sudo fdisk -l 查看所有磁盘设备,可以获取到设备名称 sudo mount deviceName /mnt
# umount 卸载
sudo umount 挂载点
# 压缩包管理
# gzip -- .gz
gzip gunzip
# bzip2 -- .bz2
bzip2 bunzip2 以上两种压缩方式无法压缩目录,只能压缩文件
# tar
tar zcvf xxx.tar.gz xxx tar zxvf xxx.tar.gz -C 解压到的目录
# rar
打包:把dir压缩成newdir.rar rar a -r newdir dir 解包:把newdir.rar解压缩到当前目录 unrar x newdir.rar [解压缩目录]
# zip
打包: zip -r dir.zip dir 解包: unzip dir.zip -d 解压目录
# 进程管理
# who
查看当前在线用户的情况,登录的用户名、使用的设备终端pts、登录到系统的时间 tty设备 tty1-tty6表示文字界面 tty7 图形界面
# ps
-a:即all,查看当前系统所有用户的所有进程 -u:查看进程所有者及其他一些详细信息 -x:显示没有控制终端的进程 -e 显示所有进程。 -f 全格式。 ps aux | grep xxx
# kill
kill -l查看所有信号,共64个信号 kill -SIGKILL pid kill -9 pid
# env
查看当前进程的环境变量
- vim ∼/.bashrc 配置当前用户环境变量
- vim /etc/profile 配置系统环境变量,配置时需要有root权限 export PATH=$PATH:新路径
# top
查看任务管理器
# 网络管理
# ifconfig
1.查看网卡信息 ifconfig 2.关闭网卡 sudo ifconfig eth0 down 3.开启网卡eth0 sudo ifconfig eth0 up 4.给eth0配置临时IP sudo ifconfig eth0 IP
# ping
ping [选项] 主机名/IP地址 -c 数目 在发送指定数目的包后停止。 -d 设定SO_DEBUG的选项。 -f 大量且快速地送网络封包给一台机器,看它的回应。 -I 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。 -l 次数 在指定次数内,以最快的方式送封包数据到指定机器(只有超级用户可以使用此选项)。 -q 不显示任何传送封包的信息,只显示最后的结果。 -r 不经由网关而直接送封包到一台机器,通常是查看本机的网络接口是否有问题。 -s 字节数 指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
# nslookup
nslookup name 查询一台机器的IP地址和其对应的域名
# netstat
netstat [选项] 显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运 作。命令中各选项的含义如下: -a 显示所有socket,包括正在监听的。 -c 每隔1秒就重新显示一遍,直到用户中断它。 -i 显示所有网络接口的信息,格式同“ifconfig -e”。 -n 以网络IP地址代替名称,显示出网络连接情形。 -r 显示核心路由表,格式同“route -e”。 -t 显示TCP协议的连接情况。 -u 显示UDP协议的连接情况。 -v 显示正在进行的工作。
# lsof
lsof -i:80 查看80端口是否被占用
# 用户管理
sudo useradd name passwd name sudo userdel -r name
# 服务
# ssh
1.安装ssh服务器 sudo apt-get install openssh-server 2.远程登陆 ssh 用户名@IP
# scp
远程拷贝文件,scp -r 的常用方法: 1.使用该命令的前提条件要求目标主机已经成功安装openssh-server 如没有安装使用 sudo apt-get install openssh-server 来安装 2.使用格式: scp -r 目标用户名@目标主机IP地址:/目标文件的绝对路径 /保存到本机的绝对/相对路径
# 其他命令
# man
1 可执行程序或shell命令 2 系统调用(内核提供的函数) 3 库文件(程序库中的函数) 查函数 man man man read 查看read命令的man page man 2 read 查看read系统函数的man page(在第二个section中,表示为read(2)) man -k read 以read为关键字查找相关的man page
# data -d@timestamp
# vim
# 命令模式:
h - 左; j - 下; k - 上; l - 右; 0 - 行首; $ - 行尾 gg - 文件首行; G - 文件末行; 跳转到第n行 - nG;
删除光标所在的字符 - x; 删除光标前的字符 - X; 删除一个单词 - dw; 删除光标所在行的前面 - d0; 删除光标所在行的后面 - d$ / D; 删除光标所在行 - dd; 删除n行 - ndd;
撤销 - u; 反撤销 - ctrl+r;
复制 - yy; 复制n行 - nyy; p: 在光标所在位置向下新开辟一行,粘贴 P: 在光标所在行粘贴
查找 - /xxx 从光标位置向下查找 下一个 - n 上一个 - N ?xxx 从光标位置向上查找 移到需要查找的单词位置,按#
向右缩进 - >> 向左缩进 - <<
文本中查看函数定义(man文档) K , 3K(跳到第三章)
# 可视模式
比如复制行中一部分内容,需要用可视模式 命令模式 v -> 可视模式 复制 - y; 删除 - d;
# 编辑模式
命令模式 i/a/o/s/I/A/O/S--> 编辑模式 a: 光标后插入字符 A: 插入行未 i: 光标前插入字符 I: 插入行首 o: 向下新开一行,插入行首 O: 向上新开一行,插入行首
# 末行模式
命令模式 :--> 末行模式 跳转到指定行 :n 替换光标所在行的所有oldword 😒/oldword/newword/g 替换文本中所有oldword :%s/oldword/newword/g 替换指定行的所有oldword :27,30s/oldword/neword/g 27到30行 执行命令cmd :!cmd
# vi分屏
上下分屏 :sp [filename] 左右分屏 :vsp [filename] 在多个窗口切换 Ctr+w+w :qall :wqall
vimrc是vim的配置文件,可以修改两个位置
- 系统级配置文件目录 /etc/vim/vimrc
- 用户级配置文件目录 ~/.vimrc ~/.vimrc优先级高
# gcc
-I 指定头文件目录 -D DEBUG 编译时指定宏 -On n=0∼3 编译优化,n越大优化得越多 -Wall 输出警告信息 -g 包含调试信息(gdb调试的时候必须添加此参数)
# 静态库
将生成的.o文件打包 ar rcs libmytest.a test.o 静态库创建成功后,需要链接到应用程序中使用。使用gcc的-l选项来指定静态库,使用-L参数来指定库文件的搜索路径。 gcc main.c lib/libMytest.a -Iinclude -o app gcc main.c -Iinclude -L lib -l Mytest -o app
制作静态库 gcc -c add.c sub.c mul.c dive.c ar rcs libmycal.a add.o sub.o mul.o dive.o
nm libmycal.a 查看静态库有什么内容 nm app 查看可执行文件中的内容
# 共享库
gcc -c -fPIC add.c sub.c mul.c dive.c (-fPIC生成与位置无关的的.o) gcc -shared -o libmycal.so *.o
gcc main.c -I include -L lib -l mycal -o myapp 加载共享库方法: 1.拷贝自己制作的共享库到/lib或者/usr/lib 2.临时设置LD_LIBRARY_PATH, export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 3.永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 设置到∼/.bashrc或者/etc/profile 设置后需要重新打开终端才能生效 4.设置/etc/ld.so.conf, 把库所在路径追加到此配置文件里
修改/etc/ld.so.conf sudo vi /etc/ld.so.conf 添加你的共享库路径 更新查找共享库的路径 sudo ldconfig -v
# gdb调试
加-g 编译 ---> gdb xxx
gdb app
l [file][:n|function]
l 继续列出之后的内容
b 22 断点
b 15 if i==15 条件断点
i 查看断点信息
p *数组名@10 列出数组前10个元素值
p 数组名[n]@m 从下标n开始向后打印m个元素。
| 命令 | 简写 | 作用 | |---------------------+------+------------------------------------------------------| | list | l | 查看代码,可跟行号和函数名 | | break | b | 设置断点,可根据行号和函数名 | | info | i | 查看GDB内部局部变量的数值,info breakpoints | | run | r | 全速运行程序 | | start| | 单步执行,运行程序,停在第一行执行语句 | | next | n | 逐过程执行 | | continue | c | 继续全速运行剩下的代码 | | print | p | 打印变量和地址 | | step | s | 逐语句执行,遇到函数,跳到函数内执行 | | ptype| | 查看变量类型 | | display | | 设置观察变量 | | undisplay | | 取消观察变量 | | | u|跳出当前循环| |finish | |跳出当前函数| | d | | 删除断点 | | set | | 设置变量的值 set var n=100 | | quit | q | 退出gdb | | run | r | 全速运行程序 |
# makefile
- 一个规则 三要素:目标、依赖、命令 目标:依赖 命令
- 第一条规则是用来生成中级目标的规则 如果规则中的依赖不存在,向下寻找其他的规则 更新机制:比较目标时间和依赖文件的时间
- 两个函数
- 查找指定目录下指定类型的文件 src=$(wildcard /aa/*.c)
- 匹配替换函数 obj=$(pasubst %.c %.o, $(src))
- 三个自动变量(只能在命令中使用)
- $@ 规则中的目标
- $< 规则中的第一个依赖
- $^ 规则中的所有依赖
- 模式规则 %.o:%.c gcc -c $^ -o $@
- clean
windows命令