查看Linux内核版本命令
uname
(Unix name)显示系统信息
当没有选项时,默认启用 -s 选项
如果给出多个选项或 -a 选项时,输出信息按以下字段排序:内核名称, 主机名称, 内核release, 内核版本, 机器名称, 处理器, 硬件平台, 操作系统
-a, --all
按顺序打印全部信息,如果 -p 和 -i 的信息是未知,那么省略
-s, --kernel-name
打印内核名称
-n, --nodename
打印网络节点主机名称
-r, --kernel-release
打印内核release
-v, --kernel-version
打印内核版本
-m, --machine
打印机器名称
-p, --processor
打印处理器名称
-i, --hardware-platform
打印硬件平台名称
-o, --operating-system
打印操作系统名称
--help
显示帮助信息并退出
--version
显示版本信息并退出
uname -a
cat /proc/version
查看内核信息
cat /proc/version
查看Linux系统版本的命令
lsb_release
显示发行版本信息
LSB是Linux Standard Base的缩写, lsb_release
命令用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v
参数
-v
显示版本信息
-i
显示发行版的id
-d
显示该发行版的描述信息
-r
显示当前系统是发行版的具体版本号
-c
发行版代号
-a
显示上面的所有信息
-h
显示帮助信息
lsb_release -a /* 列出版本信息 */
cat /etc/issue
适用于所有的Linux发行版
cat /etc/issue /* 列出版本信息 */
help帮助命令
help command /* 详细帮助信息 */
help -d command /* 输出每个主题的简短描述 */
help -m command /* 以伪 man 手册的格式显示使用方法 */
command --help
man command /* 查看相应的手册 */
man -w command /* 查看对应手册位置 */
cd命令(Change Directory)
cd切换目录,home directory(主目录)
~
表示为home directory的意思
.
表示当前所在的目录
..
表示当前所在目录的上一层目录
cd ~
是跳转到当前用户的主目录
如果是root用户,相当于 cd /root
如果是普通用户,相当于cd /home/当前用户名
cd ~ /* 进入用户主目录 */
cd /* 进入用户主目录 */
cd - /* 返回进入此目录之前所在的目录 */
cd / /* 返回根目录 */
ctrl快捷键
ctrl + u /* 从光标位置剪切到行首 */
ctrl + k /* 从光标位置剪切到行尾 */
ctrl + a /* 光标跳到命令行的开头 */
ctrl + e /* 光标跳到命令行的结尾 */
ctrl + l /* 除屏幕并将当前行移到页面顶部 */
ctrl + r /* 在历史命令中查找,输入关键字就联想出以前的命令,输入!命令加上编号(!2)就可以直接执行该历史命令 */
ctrl + c /* 强制中断程序的执行,进程已经终止 */
ctrl + z /* 将任务中止(挂起),任务并没有结束,他仍然在进程中他只是维持挂起的状态 */
ctrl + d /* 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。在shell中,表示退出当前shell,相当于exit */
sudo
以 root 身份运行命令,使用权限:在 /etc/sudoers 中有出现的使用者
sudo date /* 若用户具有可运行sudo的权限,sudo 完之后一般还需要输入用户密码的 */
su(Switch User)
su命令用于在已登录的会话中切换到另外一个用户,需要输入目标用户的密码
su /* 切换到root用户之后仍然保持原始用户的环境 */
su - /* 创建一个新的环境(由root用户~/.bashrc文件所设置的环境)*/
useradd + passwd + userdel
useradd 添加新用户
passwd 修改用户密码
userdel 删除用户,需要root用户权限
useradd lion /* 添加一个lion用户,添加完之后在/home路径下可以查看 */
passwd lion /* 修改lion用户的密码 */
userdel lion /* 只会删除用户名,不会从/home中删除对应文件夹 */
userdel lion -r /* 同时删除/home下的对应文件夹 */
groups + groupadd + groupdel
groups 查看用户所在群组
groupadd 创建群组,用法和useradd类似
groupdel 删除一个已存在的群组
groups lion /*查看lion用户所在的群组 */
groupadd foo /* 添加组 */
groupdel foo /* 删除foo群组 */
chgrp(Change group)
用于修改文件的群组
chgrp groupA file.txt /* file.txt文件的群组修改为groupA */
chown(Change owner)
改变文件的所有者,需要root身份才能运行
chown user file.txt /* 把其它用户创建的file.txt转让给lion用户 */
chown user:groupA file.txt /* 把file.txt的用户改为user,群组改为groupA
chmod(Change mode)
控制用户对文件的权限的命令,Linux 操作系统为文件定义了读、写、执行三种权限,系统采用 r
、w
、x
来分别表示文件的读、写、执行权限
-r
递归授权
chmod 的参数可以分为两种,分别是权限模式和数字模式
权限模式使用u
、g
、o
分别代表拥有者、同组用户、其他组用户,使用+
和-
代表赋予和收回权限
chmod u+x, g+w file1 /* 将文件file1的执行权限给当前用户,写权限赋给用户所在的用户组和其他用户,-r递归授权 */
mkdir dir
chmod g+wx dir
chmod +t dir /* +t粘滞位替换x,表明这个目录中的文件只能被文件拥有者、目录的拥有者和超级用户root删除 */
数字模式使用二进制的形式代表r、w、x三种权限,如101(5)=r-x
chmod 770 file1.txt /* rwxrwx--- */
usermod
用于修改用户账户的各项设定
常用选项:
-d
修改用户登录时的目录
-g
修改用户所在的群组
-l
修改用户登录名。需要注意的是/home中的用户家目录的名字不会改变,需要手动修改
-L
锁定用户密码,使密码无效
-U
接触密码锁定
-u
修改用户uid
-a
-G
会让你离开原先的群组,如果你不想这样做的话,就得再添加 -a 参数,意味着 append 追加的意思。
usermod -l 新用户名 旧用户名
usermod -g groupA user /* 修改user用户的群组为groupA */
usermod -d /home /root /* 更改登录目录 */
usermod -G groupA /* 离开其他用户组,仅仅做为groupA组的成员 */
usermod -a -G groupA user /* 将user用户添加到用户组groupA中 */
who(Who Is logged in)
who /* 列出当前登录的用户名 */
find
用于查找文件,会去遍历实际硬盘进行查找,而且允许对每个找到的文件进行后续操作,功能非常强大
使用形式:find 要查找路径 表达式find path -option 表达式 [action]
,如果path是空字串则使用当前路径
find / -name "file.txt" /* 整个硬盘下查找file.txt文件 */
find . -name "[A-Z]*" /* 当前目录及子目录中查找文件名以一个大写字母开头的文件 */
find /var -size +10M /* /var目录下查找文件大小超过10M的文件 */
find /var -size -10M /* /var目录下查找文件大小小于 0M的文件 */
find -name "*.txt" -atime -7 /* 近 7天内访问过的.txt结尾的文件 */
find . -name ".txt" -exec wc -l {} \; /* -exec指定了要针对每个找到的文件运行的命令。花括号{}时文件的占位符,而转移的分号;用于防止shell解释该命令。可以使用加号 + 来实现同样的效果 */
find . -name ".txt" -exec wc -l {} + /* +号将会打印总计行数 */
find . -name ".txt" | xargs rm -rf /* xargs命令作用,就是将标准输入转为命令行参数 */
find * | grep-v '\(1.txt\|2.txt\)' | xargs rm /* 删除全部文件,保留1.txt和2.txt */
find /usr/data | grep-v '\(usr/data/app.hex\|usr/data/app.elf|usr/date$\)' | xargs rm /* 删除data文件下除app.hex和app.elf以外的所有文件 */
tar命令(Tape Archive)
tar磁带归档,将一大堆文件或目录打包成一个总的文件,习惯上以.tar
后缀作辨识,tar本身不具有压缩功能,根据选项压缩
常用选项:
-c
创建新的打包文件
-x
从打包文件中还原文件
-v
显示指令执行过程
-f
指定文件名字,这个参数是必须的
-z
支持gzip指令处理打包的文件
-j
支持bzip2指令处理打包的文件
tar -cvf filename.tar filename /* 将filename文件夹打包为filename.tar */
tar -xvf filename.tar /* 还原文件filename.tar */
tar -cvzf filename.tar.gz filename /* 将打包后的文件进行gzip压缩 */
tar -xvzf filename.tar.gz /* 解压文件到当前目录 */
tar -xvzf filename.tar.gz -C ./dir /* 解压文件到dir目录 */
tar -cvzf workname.tar.gz --exclude=*.repo --exclude=*.git workname /* 压缩为workname文件夹,并排除其中的.git, .repo文件夹 */
zip
兼容Linux和Windows,可以压缩多个文件或目录
使用形式:zip -option 压缩后的文件 需要压缩的文件
常用参数选项:
-r
递归压缩
zip file.zip file1 file2 file3 /* 将文件 file1 file2 file3 压缩成格式zip */
zip -r filename.zip filename /* 将filename文件夹递归压缩为filename.zip,默认压缩格式后缀就是.zip */
unzip
解压缩zip文件,unzip为.zip压缩文件的解压缩程序
使用形式:unzip 压缩文件.zip -d 需要解压缩到哪个目录
unzip filename /* 解压所有文件 */
unzip filename.zip -d filename /* 将filename.zip压缩文件解压到filename文件中 */
zstd
zstd这种新的压缩算法,速度和性能都不错
使用方式 :zstd [args] [FILE(s)] [-o file]
zstd file /* 将 file 压缩成一个后缀为.zst的新文件,如果命令后面没有文件或文件为-的话,则读取标准输入 */
zstd -d file.zst /* 解压zst压缩包 */
tar -I zstd -xvf archive.tar.zst /* 在linux中可以使用tar命令来解压.zst/tar.zst文件 */
which
查看命令的可执行文件所在路径,每一条命令其实都对应一个可执行程序
which ls /* 查看ls命令所在位置 */
free(Free memory)
free -h /* 显示内存状态 */
df(Disk space Free)
df -lh /* 显示磁盘使用情况*/
du(Disk usage)
列举目录或文件大小信息
常用选项:
-h
适合人类阅读的
-a
同时列举出目录下文件的大小信息
-s
只显示总计大小,不显示具体信息
du -sh /* 查看目录占用空间 */
du -h readme.txt /* 显示指定文件所占空间 */
file
显示文件的类型
file [选项] 文件或目录…
file filename
tail
将每个FILE的最后10行打印到标准输出
常用选项:
-f
随着文件末尾的内容增长,会持续显示被新添加到文件中的内容
-C
选项来显示检索结果的前后几行
tail -f log_file
tail -f log_file | grep -C 3 error
tail -f log_file | grep -C 3 -i - E 'error|debug' /* 不区分大小写,同时搜索多个关键字 */
grep
在文件中查找符合条件的字符串
使用形式:grep [选项] [范本样式] [文件或目录…]
-i
忽略大小写, grep -i path /etc/profile
-n
显示行号,grep -n path /etc/profile
-r
递归查找,grep -r hello /etc
,Linux中还有一个rgrep
命令,作用相当于grep -r
-v
只显示搜索文本不在的那些行,grep -v path /etc/profile
-l
代表“显示文件名,而不是结果本身
-c
只打印匹配的行数,不显示匹配的内容
grep text file /* text代表要搜索的文本,file代表供搜索的文件 */
grep stretch /etc /* 搜索/etc/目录下所有包含stretch字符串的文件,但不去搜索其中的子目录 */
grep -r stretch /etc /* 在/etc/及其子目录中搜索包含 stretch 字符串的文件 */
grep -E ^path /etc/profile /* 可以配合正则表达式使用,匹配path开头的字符串 */
Core文件
在 Linux 系统中,常将“主内存”称为核心(core),而核心映像(core image) 就是 “进程”(process)执行当时的内存内容。当进程发生错误或收到“信号”(signal) 而终止执行时,系统会将核心映像写入一个文件,以作为调试之用,这就是所谓的核心转储(core dump)。当在一个程序崩溃时,系统会在指定目录下生成一个core文件,我们就可以通过 core文件来对造成程序崩贵的原因进行调试定位。
ulimit -a
ulimit -c unlimited /* 不限制产生 core 的大小,当前终端有效,退出终端或者打开一个新的终端时是无效的,配置加入到 /etc/profile 中确保推出终端后有效 */
ulimit -c 0 /* 核心转储功能关闭,只需要将限制大小设为0 */
重定向
把本来要显示在终端的命令结果,输送到别的地方(到文件中或者作为其他命令的输入)
>
表示重定向到新的文件,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖
>>
表示重定向到文件末尾,它是追加到文件的末尾
管道
把两个命令连起来使用,一个命令的输出作为另外一个命令的输入,英文是pipeline,可以想象一个个水管连接起来,管道算是重定向流的一种
ps -ef|grep nginx /* 在所有进程中查看nginx进程 */
流
流并非一个命令,在计算机科学中,流stream的含义是比较难理解的,记住一点即可:流就是读一点数据, 处理一点点数据。其中数据一般就是二进制格式。上面提及的重定向或管道,就是把数据当做流去运转的
Vim
查找
处于交互模式下,按下/
键,那么就进入查找模式,输入你要查找的字符串,然后按下回车从当前光标处开始向文件尾搜索
向文件头搜索则使用?
,当然也可以先按下gg
跳转到第一行在进行全文搜索
n
跳转到下一个匹配项
N
跳转到上一个匹配项
查找并替换
:[range]substitute/from/to/[flags]
这个命令把[range]
指定范围中的字符串from
修改为字符串to
,:substitute
可以缩写为:s
。如果没有指定range
,:s
命令只作⽤在当前⾏,默认情况下只对某⼀⾏中的第⼀个匹配点起作⽤,要对⾏中所有匹配点起作⽤,需要加⼀个 g (global,全局) 标记。
:1,10s/from/to/ /* 表示在第1到第10行(包含第1,第10行)之间搜索替换 */
:%s/Professor/Teacher/g /* %表示命令作⽤于全部⾏,g表示匹配行中所有匹配点 */
:g/^s*$/d /* 匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行 */
:%s/ *$// /* 删除行尾空格 */
:%s/\n//g /* 删除换行 */
:set list /* 显示换行,可以看到以“$”表示的换行符和以“^I”表示的制表符 */
:set fileformat? /* 查询文件格式 */
:set fileformat=unix /* 行尾换行符 */
:set fileformats=dos /* 行尾回车换行 */
flags
有如下四个选项
c
confirm,每次替换前询问
e
error, 不显示错误
g
globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串
i
ignore,忽略大小写
n
防止任何替换
补全
Ctrl +n /* 关键字补全 */
统计字符串个数
:%s/string//gn /* n标志以避免替换, 报告的替换数是项目数 */
string
为要统计的字符串
合并文件
可以用冒号 +r ( :r ) 实现在光标处插入一个文件的内容
:r filename /* 可以用Tab键来自动补全另外一个文件的路径 */
运行外部命令 :!
:!ls /* 在Vim中打开的文件所在的目录运行ls命令 */
hex模式
Vim 有一个名为 xxd 的内置命令,外部 shell 命令,可以从 Vim 命令行模式使用它来直接在 Vim 中转换二进制文件,打开二进制文件(或任何其他代码文件)后,使用以下命令将二进制文件转换为十六进制表示形式(请记住备份文件以避免数据丢失)
:%!xxd /* 将文件换为十六进制表示形式 */
:%!xxd -r /* 十六进制转储转换(或者打补丁)成二进制形式 */
:%!xxd -r -ps /* 将纯十六进制转储的反向输出打印为了ASCII格式 */
:vim -b test.txt /* 打开二进制文件 */
分屏
Vim有一个特别便捷的功能那就是分屏,可以同时打开好几个文件,分屏之后,屏幕每一块被称为一个 viewport ,表示“视口”
横向分屏 :sp 文件名
垂直分屏 :vsp 文件名
分屏模式下的快捷键
Ctrl + w 再加 Ctrl + w ,表示从一个 viewport 移动光标到另外一个 viewport ;
Ctrl + w 再加 “方向键”,就可以移动到这个方向所处的下一个视口了;
Ctrl + w 再加 + 号,表示扩大当前视口;
Ctrl + w 再加 - 号,表示缩小当前视口;
Ctrl + w 再加 = 号,表示平均当前视口;
Ctrl + w 再加 r 键,会反向调换视口位置;
Ctrl + w 再加 q 键,会关闭当前视口;
Ctrl + w 再加 o 键,会关闭除当前视口以外的所有视口
可视模式
v
字符可视模式,进入后配合方向键选中字符后,然后再按 d 键可以删除选中。
V
行可视模式,进入后光标所在行默认被选中,然后再按 d 键可以删除所在行。
Ctrl + v
块可视模式,它是可视模式最有用的功能了,配合d
和I
键可以实现删除选中的内容和插入内容
删除列
1. 光标定位到要操作的地方。
2. CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3. d 删除。
插入列
插入操作的话知识稍有区别。例如我们在每一行前都插入"() ":
1. 光标定位到要操作的地方。
2. CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3. SHIFT+i(I) 输入要插入的内容。
4. ESC 按两次,会在每行的选定的区域出现插入的内容。
Vim配置
在Vim被启动后,可以运行一些指令来激活一些选项参数,但是这些选项参数的配置在退出Vim时会被忘记,例如前面讲解的激活行号。如果希望所在的配置是永久性的,那么需要在家目录cd ~
创建一个Vim 的配置文件.vimrc
.vimrc
set number /* 显示行号 */
syntax on /* 激活语法高亮 */
set showcmd /* 实时看到输入的命令 */
set ignorecase /* 搜索时不区分大小写 */
set mouse=a /* 激活鼠标,用鼠标选中时相当于进入可视模式 */
Vim配置非常丰富,可以通过个性化配置把Vim打造成属于自己的IDE等,在github上也可以搜索到一些强大的Vim配置文件
Linux命令大全