Linux常用基础命令
Linux命令格式
1.一般情况下,【参数】是可选的,一些情况下【文件或路径】也是可选的
2.参数 > 同一个命令,跟上不同的参数执行不同的功能,linux命令,参数之间,普遍应该用一个或多个空格分割
如果不用xshell或者finalshell 也可以用命令行登录
ssh 用户名@服务器地址
ssh root@服务器地址
命令提示符
20181117026@VM-0-3-ubuntu:~$ 普通用户,登陆后
root@VM-0-3-ubuntu:~# 超级用户root,登录后
root代表当前登录的用户
@ 分隔符
@后面是 主机名
~ 当前的登录的位置,此时是家目录
# 超级用户身份提示符
$ 普通用户身份提示符
在Ubuntu里面切换超级用户root的命令为 sudo su
普通用户切换 su 用户名 切换用户
exit 退出到上一个用户
whoami 查看当前用户
hostname 查看主机名
pwd 显示当前工作目录的绝对路径
logout 退出当前系统用户
sudo 使用root用户的权限执行命令
windows里面每个盘就像是一个树,而Linux里面不分盘,就是一整个树,根是/
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:这个目录是用来存放一些临时文件的。
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
Linux 常见用户管理命令
命令 | 命令含义 |
---|---|
useradd | 添加用户账号 -m创建家目录,-s指定shell |
usermod | 设置用户账号属性 |
userdel | 删除用户对应账号 -r会删除用户家目录 |
passwd | 设置指定用户的密码,没有指定用户,是修改当前用户的密码 |
groupadd | 新建用户组 |
groupdel | 删除用户组 |
gpasswd | 向指定组添加/删除指定的用户,如:gpasswd -a/-d user group |
groups | 查看指定用户的组信息 |
id | 显示用户ID 组ID和用户所属列表 |
who | 显示登录到系统的所有用户 |
whoami | 显示当前系统的是那个用户 |
sudo | 用root身份执行命令 |
visudo | 编辑sudoers配置文件 |
su | 切换用户 |
配置了/etc/sudoers文件后,可以对用户命令提权,sudo 命令
创建新用户
创建用户必须是在root超级用户下
useradd dyk -m
# -m的作用是不仅建立用户还在对应的目录下创建文件目录
useradd dyk -m -s
#指定用户登录时的shell解析脚本,一般指定
passwd dyk
Enter new UNIX password:
Retype new UNIX password:
su dyk //切换普通用户
userdel -r dyk 删除用户的同时删除家目录
Linux文件及目录管理命令
命令 | 对应英文 | 作用 |
---|---|---|
ls | list | 查看文件内容 |
pwd | print work directory | 查看当前所在目录 |
cd 目录名 | change directory | 切换文件夹 |
touch 文件名 | touch | 如果文件不存在,则创建 |
mkdir 目录名 | make directory | 创建目录 |
rm 文件名 | remove | 删除指定文件 |
绝对路径和相对路径
路径分为相对路径和绝对路径。
相对路径:相对于当前文件夹的路径。不以 / 开始就是相对路径
cd xxx # 进入到当前文件夹里的 xxx 文件夹
cd ./xxx # 等价于 cd xxx
cd ../xxx # 进入到上一级文件夹,再在这个文件夹里进入到 xxx
绝对路径: 以 / 开始的就是绝对路径
cd /home/xxx # 从根目录开始查找 home,进入到home里的 xxx
cd命令
符号 | 说明 |
---|---|
. | 当前目录 |
… | 上一层目录 |
- | 表示上次切换之前的目录 |
~ | 当前【用户】所在的家目录 |
/ | 顶级根目录 |
1. ~ : 表示的是当前用户的家目录
当前用户的家目录: 普通用户是在 /home/用户名/
root用户是在 /root/
2. - : 表示跳转到上一次的目录
3. ../ : 表示跳转到上一级目录
4. 空: 等价于 ~,表示跳转到当前用户的家目录
ls命令
选项 | 说明 |
---|---|
-a | 显示出所有文件类容,以及隐藏的 |
-l | 详细的输出文件夹中内容 |
-h | 输出文件大小(例如 1K 234M 2G) |
-t | 按最后修改时间列出文件 |
-S | 根据文件大小排序,从大到小排序 |
-r | 逆序排列 |
-d | 显示目录本身的信息 而不是显示目录的内容 |
-l选项显示的结果:类型及权限 | 连接数 | 用户 | 用户组 | 大小 | 月 | 日| 年/时间 | 名称
连接数:如果是文件,表示这个文件有多少个名字(硬链接);如果是目录,表示这个目录里有多少个子目录
语法 ls 可选参数 可选文件的对象
ls -a 显示出所有文件类容,以及隐藏的
ls -l 详细的输出文件夹中内容
ls -h 输出文件大小 (例如 1K 234M 2G)
ls -t 按最后修改时间列出文件
ls --full-time 以完整的时间格式输出((也就是按照中国的时间日
期显示))
ls -F 在条目后加上文件类型的指示符号(* , /, = , @ , | ,其中的一个)
注:可以标识文件类型
加上 * 代表可执行的普通文件
加上 = 表示套接字
加上 | 表示FIFOS(队列系统)
加上 @表示符号链接
加上 / 表示文件夹
ls -d 显示目录本身的信息 而不是显示目录的内容
ls -S 根据文件大小排序,从大到小排序
ls -r 逆序排列
ls -i 显示索引节点信息(索引节点相当于身份证号)
案例
ls -lt 按照时间进行排序
ls -lrt 找出最新的文件
ls -d */ 列出当前所有目录
ls -hS ./* 显示出当前目录下所有内容详细,且以kb,mb,gb单位从大到小排序
pwd命令
pwd #会输出当前所处在位置的绝对路径
mkdir命令
若指定目录不存在则创建目录。
mkdir -p 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理,可以多层创建文件夹,递归创建文件夹
mkdir -m 设置权限模式,而不是减umask的
mkdir {1..3}加花括号创建连续的目录,用..隔开 花括号内可以是连续的数字、连续的字母mkdir {a..e}
案例
mkdir {dyk1,dyk2,dyk3} 创建三个文件夹,逗号隔开
mkdir dyk{1..5} 创建连续的目录
mkdir dyk1 dyk2 创建少量连续目录
mkdir -p dyk/work 创建dyk文件夹同时在dyk目录下再创建work文件夹,递归创建文件夹
touch命令
创建文件或修改文件时间戳
touch dyk{连续数字或字母} 创建多个文件序列
touch dyk{1..10}
touch dyk{a..z}
touch dyk -c 不创建任何文件
touch -t 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间替代当前时间
touch -r 使用指定文件的时间属性替代当前文件时间
案例
修改文件时间
touch -t 06010808 d1 #修改d1文件的时间是 6月1号8点8分
touch -r d1 d2 #把d2的时间改成d1一样
文件属性
首先Linux中文件的拥有者可以把文件的访问属性设成3种不同的访问权限:可读®,可写(w) 和可执行(x)文件又有3个不同的用户等级:文件拥有者(u),所属的用户组(g)和系统里的其他用户(o)
选项 | 说明 |
---|---|
- | 代表着普通文件 |
d | 代表着目录文件夹 |
l | 表示链接文件 |
c | 表示字符设备 |
b | 表示块设备 |
p | 表示命名管道,比如FIFO文件(first in first out 先进新出) |
f | 表示堆栈文件 比如LISOW文件(last in first out 后进先出) |
s | 表示套接口 |
第一个字符显示的文件的类型
- 代表着普通文件
d 代表着目录文件
l 表示链接文件
c 表示字符设备
b 表示块设备
p 表示命名管道,比如FIFO文件(first in first out 先进新出)
f 表示堆栈文件 比如LISOW文件(last in first out 后进先出)
s 表示套接口
第一个字符之后的三个三位字符数组
第一个三位字符组表示文件的拥有者(u)对文件的权限
第二个三位字符组表示文件用户组(g)对文件的权限
第三个三位字符组表示系统的其他用户(o)对文件的权限
若该用户组对此没有权限,一般显示 - 字符
案例
drwxr-xr-x
首先第一个字符表示为目录文件夹
第一个三位字符组表示文件的拥有者(u)对文件可以读,写,和执行
第二个三位字符组表示文件用户组(g)对文件可以可以读,不可以写,可以执行
第三个三位字符组表示系统的其他用户(o)对文件的权限 可以读,不可以写,可以执行
rwx权限表示
r read 读取 4
w write 写 2
x execute 执行 1
- 无权限 0
-
444 r--r--r--
600 rw-------
644 rw-r--r--
666 rw-rw-rw-
700 rwx------
744 rwxr--r--
755 rwxr-xr-x
777 rwxrwxrwx
chmod命令
用来更变文件或目录的权限
设置文件权限所有人可读
chmod ugo+r dyk.txt
等价于
chmod a+r dyk.txt
设置文件同一个用户和同一个组的可写,其他人不可写
chmod ug+w,o-w dyk.txt
也可以直接写入八进制
chmod 765 dyk.txt
设置用户可读可写可执行,组可读,可写,其他人可读,可执行
拥有可执行权限的文件,在linux终端下通常呈现为绿色,如果在运行程序 permission dennied 这样的错误提示,可在终端输入 chmod +x file,为将要运行的程序增加可执行权限。
chown 和chgrp命令
chown:修改文件的所有者和组别
chown [选项] 文件所有者 文件名
chgrp:改变文件的组所有权
chgrp: chgrp 文件所有组 文件
选项 | 参数含义 |
---|---|
-c | 详尽地描述每个file实际改变了那些所有权 |
-f | 不打印文件所有权就不能修改的报错信息 |
umask命令
umask 命令用来限制新文件权限的掩码,也称之为遮罩码,防止文件、文件夹创建的时候,权限过大,当新文件被创建时,其最初的权限由文件创建掩码决定。
用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。
作用:用来限定新建文件的默认权限,权限与该值相反。
命令:umask [value],查看或设置掩码
umask值就是指“Linux文件的默认属性需要减掉的权限”。
比如Linux普通文件的最大默认属性是666,目录文件的最大属性是777。
但是我们不想要用户在新建立文件时,文件的属性是666或777,那么我们就要设置
umask值。
Linux系统预置的umask值是022,那么用户在新建立普通文件时,普通文件的属性就是666-022=644,新建立目录文件时,目录文件的属性就是777-022=755。
默认的文件、文件夹权限,减去umaks的值等于最终的权限值
默认umask值root和普通用户不一样
#root用户umask 0022
#普通用户umask 0002
语法参数
-S:以字符的形势显示当前的掩码。
-p:带umask开头以数字的形势显示当前掩码
文件权限
操作系统创建文件,默认最大权限是666(-rw-rw-rw-)
#文件默认起始权限666,减去umask默认值022,等于创建文件的权限
666
022
-----
644 #系统创建文件权限默认是644 - rw- r-- r--
umask值不得大于6
umask计算出的文件权限不得拥有执行权限x,如果计算结果中有执行权限,则需要将其加一
文件夹权限
系统创建目录默认权限最大777
#目录最大权限777,减去umask值,得到目录创建后的权限
777
022
------
755
linux默认权限
文件644 rw- r-- r--
目录655 rwx r-x r-x
file命令
file 文件名
查看文件的类型
file命令能读取文件头并识别文件类型
cp命令
选项 | 说明 |
---|---|
-r | 递归式复制目录,即复制目录下的所有层级的子目录级文件 |
-p | 复制的时候 保持属性不变 |
-d | 复制的时候保持软连接(快捷方式) |
-a | 等于 -pdr |
-i | 覆盖前询问提示 |
-f | 强制覆盖程度 |
cp 要复制的文件 目标文件
cp 要复制的文件 目录
cp 要复制的文件 目录+源文件
将源文件复制至目标文件,将多个源文件复制到目标
cp -r 递归式复制目录,即复制目录下的所有层级的子目录级文件
cp -p 复制的时候 保持属性不变
cp -d 复制的时候保持软连接(快捷方式)
cp -a 等于 -pdr
cp -i 覆盖前询问提示
cp -f 强制覆盖程度
备注:
默认系统做了 alias别名功能,让我们输入cp的时候,其实是cp -i参数
案例
#递归复制test文件夹,为test2
cp -r test test2
cp是个好命令,操作文件前,先备份
cp main.py main.py.bak
移动多个文件,放入文件夹c中
cp -r 文件1 文件2 文件夹a 文件夹c
alias命令
给命令起别名
alias md=mkdir
相当于给mkdir命令起了一个别名,以后使用md即可创建一个文件夹。
alias # 不添加任何参数,表示列出所有的别名
unalias md # 删除别名
mv命令
mv命令的作用是移动或是重命名文件
选项 | 说明 |
---|---|
-f | 覆盖前不询问 |
-i | 覆盖前询问 |
mv [选项] 源文件 目标文件 重命名的用法
mv [选项] 源文件 目标目录 将源文件移入目标目录
mv -f 覆盖前不询问
mv -i 覆盖前询问
mv -n 不覆盖已经存在文件如果指定了 -i,-f,-n 仅最后一个生效
mv -t 将所有参数指定的源文件或目录移动至 指定目录
mv -u 只在源文件文件比目标文件新,或目标文件不存在时才进行移动
案例
1.移动文件到另一个文件夹
mv ./1.txt ddd1 #把当前1.txt文件移动到ddd1目录下
2.移动多个文件到另一个文件夹中
mv dyk1 dyk2 ddd1 #将dyk1,2文件移动到ddd1目录下
mv ./dyk* ddd1 #把所有开头为dyk的文件移动到ddd1目录下
3.重命名的用法
mv 1.txt 11.txt #把1.txt重命名为11.txt
rm命令
rm命令就是删除一个或者多个文件
选项 | 说明 |
---|---|
-r | 递归删除目录及其内容 |
-f | 强制删除,忽略不存在的文件,不提示确认 |
-i | 在删除前需要确认 |
-I | 在删除超过三个文件或者递归删除前要求确认 |
-d | 删除空目录 |
-v | 详细显示进行的步骤 |
rm -r 递归删除目录及其内容
rm -f 强制删除,忽略不存在的文件,不提示确认
rm -i 在删除前需要确认
rm -I 在删除超过三个文件或者递归删除前要求确认
rm -d 删除空目录
rm -v 详细显示进行的步骤
案例
1.删除普通文件,需要确认提示
rm -i 1.txt
2.强制删除文件,不提示
rm -f 1.txt
3.递归删除文件夹
rm -r ddd1/
强制删除所有的文件和文件夹
rm -rf ./* 一定要看清楚是否写清楚
千万别写这个命令 rm -fr / 后果自负 删除机器所有内容
注意文件恢复
rm命令删除文件后可以通过如ext3grep工具恢复数据,若是想要粉碎文件,还有其他方式
ps命令
选项 | 参数含义 |
---|---|
- ef | 查看所有进程及其PID(进程号)系统时间,命令详细目录 执行者 |
-aux | 除了显示-ef所有内容还可以显示cpu即内存占用率,进程状态 |
ps -ef | grep ntp 查找与ntp相关的进程,通过管道符
grep命令
作用,在指定文件中搜索特定的内容,并将含有这些内容的行标准输出
格式
grep [选项] 格式 [文件及路径]
其中格式是指要搜索的内容格式
选项 | 参数含义 |
---|---|
-c | 只输出匹配行的计算 |
-I | 不区分大小写 |
-n | 显示匹配行及行号 |
-s | 不显示不存在或匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
top命令
动态显示系统中运行的程序
clear命令
清除屏幕上的信息
磁盘相关的命令
fdisk 可以查看硬盘分区情况,并可以对硬盘进行分区管理
fidsk -l 列出文件系统的分区情况
使用 fdisk必须拥有root权限
文件系统挂载命令 mount
-t 选择类型
mount -t 文件格式 挂载设备 目录路径
mount -t vfat /dev/hda1 /mnt/win/c
在使用后可以卸载
umount /mnt/win/c
ln命令
-s参数,创建符号的连接,软连接,快捷方式
ln -s 目标文件的绝对路径 快捷方式的绝对路径
如果删除了快捷方式会怎样?
删除快捷方式,不影响源文件
可以生成多个快捷方式,仅仅都是指向了源文件
源文件如果删除,快捷方式则失效了
使用readlink 可以源文件的路径
软链接和硬链接的区别
1.删除软链接对源文件和硬链接无影响
2.删除硬链接,对软链接,源文件,也是无影响
3.删除源文件,对硬链接也是无影响的,但是影响软链接
4.只有删除源文件和所有的硬链接,文件的连接数就位0了,此时文件数据丢失
5.源文件和硬链接具有相同的inode号码
6.软链接和源文件的inode号码不同,因此是两个单独的源文件
inode与硬链接
操作系统中专门用于管理和存储文件的信息软件称之为文件系统,文件系统将文件的元信息(文件的创建者,日期,大小等,可以通过stat命令查看元信息)存储在一个称之为inode的区域中文是索引节点
查看文件的inode号 ls -li
Linux帮助命令
man帮助命令
语法
man 命令
如 man ls
进入man帮助文档后 按回车就是继续向下浏览 按下 q退出
使用–help参数
语法:
命令 --help
帮助命令的精简版
如 ls --help
help命令获取帮助
语法:
help 命令
只针对bash内置命令
info命令获取帮助
语法:
info 命令
Linux开关机命令
shutdown重启或者关机
重启
shutdown -r 参数
shutdown -r 10 #十分钟后重启
shutdown -r 0 #立刻重启
shutdown -r now #立刻重启
关机
语法:
shutdown -h --halt 停止的含义
shutdown -h 10 #十分钟后关机
shutdown -h 0
shutdown -h now #立即关机
vim
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是
命令模式(Command mode),
输入模式(Insert mode)和
底线命令模式(Last line mode)。
这三种模式的作用分别是:
vim工作模式
命令模式:进入 vim 默认的模式
编辑模式:按 i 进入的 a i o 也可以进入 按Esc键退出编辑模式
底行模式: 按下:(冒号)之后进入到的模式
安装vim
yum install vim -y #通过yum软件管理工具 安装vim 默认为yes
当vim打开不存在的文件时候,默认会创建文件
命令模式
命令/操作 | 说明 |
---|---|
ZZ(shift + zz) | 保存退出 |
gg | 移动光标到文档的首行 |
G | 移动光标到文档尾行 |
ngg | 定位到第n行 |
数字0 | 移动到本行开头 |
$ | 移动光标到本行结尾 |
dd | 删除光标所在行 |
ndd | 删除光标开始的n行 |
yy | 拷贝光标所在行 |
nyy | 拷贝光标所在的n行 |
u | 撤销上一步的操作 |
ctrl +r | 反撤销 |
. | |
移动光标
w(e) 移动光标到下一个单词
b 移动到光标上一个单词
数字0 移动到本行开头
$ 移动光标到本行结尾
H 移动光标到屏幕首行
M 移动到光标到屏幕的中间一行
L 移动光标到屏幕的尾行
gg 移动光标到文档的首行
G 移动光标到文档尾行
ctrl + f 下一页
ctrl + b 上一页
`. 移动光标到上一次的修改行
复制、删除、粘贴
yy 拷贝光标所在行
nyy 拷贝光标所在的n行
dd 删除光标所在行
D 删除当前光标到行尾的内容
dG 删除当前行到文档尾部的内容
p 粘贴yy所复制的内容
x 向后删除字符
X 向前删除字符
u 撤销上一步的操作
ctrl +r 反撤销
. 重复前一个执行过的动作
快捷操作
删除光标所在位置到行尾的内容并进入编辑模式 C(大写字母)
在命令模式下按下字母i,即可进入输入模式,可以编写代码啦。。。
在当前行下面插入一行并进入编辑模式 o(小写字母)
在当前行上面插入一行并进入编辑模式 O(大写字母)
快速到达行尾并进入编辑模式 A
快速保存并退出 ZZ
批量快捷操作
批量删除:
进入批量编辑模式(可视块)
ctrl+v
连按两次ESC可以取消选定文本块
选择 上下左右
删除 d
批量增加:进入批量编辑模式(可视块)ctrl+v
选择区域
输入大写的 I 进入编辑模式 编辑
按下ESC键
批量去掉注释
1. 进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列
2. 按字母j,或者k选中注释符号
3. 按d键就可全部取消注释
输入模式
命令 | 说明 |
---|---|
i | 在光标位置插入 |
I | 在第一个非空字符插入 |
a | 在光标的下一个字符输入 |
A | 在行尾插入 |
o | 在光标所在的行下面插入空行 |
O | 在光标所在的行上面插入空行 |
s | 删除光标所在字符,并进入输入模式 |
S | 删除光标所在行,并进入输入模式 |
底线命令模式
选项 | 说明 |
---|---|
:w | 将编辑的文件保存 |
:q | 退出vi 如果对文件修改了就无法按q退出 |
:q! | 强制退出,不保存修改 |
:wq | 存盘后退出 |
:e! | 放弃修改,恢复到修改之前的状态 |
:w newfile | 文件另存为 |
:set nu[mber] | 显示行号 |
set nonu[mber] | 隐藏行号 |
[:]/内容 | 查找指定内容,n下翻,N上翻 |
[:]?内容 | 查找指定内容,N下翻,n上翻 |
:%s/原内容/新内容/[g] | 所有行内容替换,g表示全局(默认只能替换一行中第一处) |
:m,ns/原内容/新内容/[g] | m到n行内容替换,g用法同上 |
:n | 将光标定位到第n行,n表示行号 |
:w 将编辑的文件保存
:q 退出vi 如果对文件修改了就无法按q退出
:q! 强制退出vi
:wq 存盘后退出
:x 存盘退出
:w 文件名 另存一个文件,相当于另存为
:e! 放弃修改,恢复到修改之前的状态
:w newfile 文件另存为
:set nu 显示行号
:set nonu 取消行号显示
:set ignorecase 不区分大小写
:set tabstop=n 按下 tab 键则实际输入 n 个空格
:set hlsearch 搜索时高亮显示
:syntax on 开启语法高亮
查找
:/dyk 在整篇文档中搜索dyk字符串,向下查找
:?dyk 在整篇文档中搜索dyk字符串,向上查找
:* 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
:# 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
:gd 找到光标所在单词匹配的单词,并停留在非注释的第一个匹配上
:% 找到括号的另一半!!
:%s /原内容/新内容 默认替换每行里第一次匹配到的数据
:%s /原内容/新内容 -g 全部替换
如果出现异常操作产生了 .swp文件应该怎么办
vim -r 123.txt.swp
rm -rf 123.txt.swp
在 Vi 内执行配置命令的效果是临时的,关闭 Vi,再次打开 Vi,需要重新配置。Vi 有自己的配置文件,可以是“/etc/vim/vimrc”或者“~/.vimrc”。两者的区别是前者全局的,影响登录本机的全部用户,后者仅仅对当前用户有效。
vim配置文件:打开文件后的配置是临时的,关闭后就失效了。
配置方法一:
直接修改 /etc/vim/vimrc文件。(vim安装好以后的默认配置,不推荐)
方法二:自己创建文件进行配置
在用户家目录创建一个文件.vimrc
将vim相关的配置写在文件中
若文件没有生效,需要重新加载一次source ~/.vimrc
cat命令
cat命令可以将一个或者多个文件输出到标准输出上,可用于查看文件
功能 | 说明 |
---|---|
查看文件内容 | cat file.txt |
多个文件合并 | cat file.txt file2.txt > file3.txt |
– | – |
非交互式编辑或追加内容 | cat >> file.txt <<EOF 内容 EOF |
清空文件内容 | cat/dev/null >file.txt |
– | – |
1.查看文本内容
cat sing.txt
2.对非空行显示行号
cat -b sing.txt
结果为:
1 哈哈哈哈
2 哈哈哈
3 哈哈
4 哈
3.对所有行显示行号
cat -n sing.txt
结果为:
1 哈哈哈哈
2
3
4 哈哈哈
5 哈哈
6 哈
4.在每行结尾加上$ 符号
cat -E sing.txt
5.减少空行数量,如果有多个空行,减为1个
cat -s sing.txt
6.合并多个文件内容,写入到新的文件中
cat 123.txt sing.txt > new.txt 将123.tx和456.txt合并写入new.txt中
7.cat非交互式的写入文件内容
cat >>new.txt <<EOF
>文件内容
>
> EOF
cat清空文件的用法
1.直接清空文件,留下一个空行
echo > 123.txt
2.直接清空文件内容,不留空行
> 123.txt
3.利用cat读取一个黑洞文件,然后清空其他文本
cat /dev/null > 123.txt
echo命令
echo命令将内容显示到标准输出
echo 内容 或者 "内容" #输出到标准输出
echo 内容 或者 "内容" > 文件 #重定向到文件,如果文件不存在则创建新的文件
案例
echo i am dyk > a
#i am dyk
echo "i am dyk" > a
#i am dyk
加引号和不加引号的区
不加引号输入的内容,连续空格被单空格替换了,
加入引号连续的空格依然保留
重定向符号
重定向的意思是,将数据传到其他地方
符号 | 解释 |
---|---|
> | 输出覆盖重定向 |
>> | 输出追加重定向 |
– | – |
<或<< | 标准输入重定向 |
1.读取文件内容,写入到另一个文件中,覆盖写入的文件的内容
cat 123.txt > 456.txt
将123.txt的内容覆盖写入456.txt
2.追加写入文件内容
cat 123.txt >> 456.txt
将123.txt的内容追加写入456.txt
3.重定向写入符
cat < 123.txt 把文件中的数据,发送给cat去读
将文本内容拆分成多行
xargs 命令
xargs -n 4 <123.txt 把123.txt拆分成多行,每行不超过4个
4.重定向追加写入符
可以结合cat命令
root@iZ2ze9vpvhtdv9o9rg8zmfZ:/home/dyk/ddd2#
cat >>sing.txt <<EOF
> 哈哈哈哈
> 哈哈哈
> 哈哈
> 哈
> EOF
EOF 代表着文件的开始或者结束
最后 cat sing.txt的结果为
哈哈哈哈
哈哈哈
哈哈
哈
tac命令
与cat命令的作用相反,反向读取文件内容
grep命令
过滤的字符串信息的命令
管道符
Linux提供的管道符“|”讲两条命令隔开,管道符左边命令的输出会作为管道符右边命令的输入。
cat new.txt | grep "天才" 通过查看new.txt文本内容,且对内容进行二次过滤,找出内容中包含的天才的行输出
案例
检查python 程序是否启动
ps -ef | grep "python"
找到ddd1目录下所有txt文件
ls | grep ".txt"
检查nginx的端口是否存活
netstat -tunlp |grep nginx
more命令
More是一个过滤器, 用于分页显示 (一次一屏) 文本,以当前屏幕窗口尺寸为准
语法
more 参数 文件
-num 指定屏幕显示大小为num
+num 从num行开始显示
交互式more的命令:
空格 向下滚动一屏
Enter 向下显示一行
= 显示当前行号
q 退出
1.显示4行内容
more -4 new.txt
2.从第6行开始输出内容到屏幕
more +6 new.txt
less命令
语法
less 参数 文件
-N 显示每行编号
-e 到文件结尾自动退出
/文本 可以在文本中搜索字符串,匹配的字符串高亮显示
more和less的区别
1.more不可以回去,就是不可以向前,只能向后,况且只能使用Enter和Space向后翻动。
less使用vim中的j,k键盘可以上下翻动,还可以使用上下箭头。
2、速度
less不必读整个文件,加载速度会比more更快。
3、内容
less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容。
head命令
用于显示文件内容头部,默认显示开头10行
语法
head [选项] [文件]
如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。
如果不指定文件,或者文件为"-",则从标准输入读取数据
1.显示文件的前n行内容
head -n new.txt 显示new.txt前n行内容
2.显示每个文件的前K 字符内容;
head -c k new.txt 显示new.txt的前k个字节
tail命令
tail默认从后向前看10行,也可以指定行数
tail 文件名 显示默认后10行
tail -n 显示后n行
tail -c 指定显示的字节数
tail -f 实时刷新文件变化
tail -F 不断打开文件,与-f合用
tail --pid=进程号 结束进程后自动退出tail命令
tail -s 秒数 检测文件变化的时间间隔秒数
案例
检测文件变化
tail -f new.txt
tail -f-F new.txt
tail 123.txt #显示文件的后10行
tail -5 123.txt #显示文件的后5行
#从文件第3行开始显示
tail -n +3 123.txt
tail -f new.txt #检测文件变化,若文件不存在,则报错退出
tail -F new.txt #若文件不存在,则等待文件生成
cut命令
在文件的每一行中提取片段
在每个文件的各行中,把提取的片段显示在标准输出
cut 参数 文件名
-b 以字节作为单位切割
-n 取消分割多字节字符,与-b一起用
-c 以字符为单位
-d 自定义分隔符,默认以tab为分隔
-f 与-d一起使用,指定显示那个区域
N 第 N 个 字节, 字符 或 字段, 从 1 计数 起
N- 从 第 N 个 字节, 字符 或 字段 直至 行尾
N-M 从 第 N 到 第 M (并包括 第M) 个 字节, 字符 或 字段
-M 从 第 1 到 第 M (并包括 第M) 个 字节, 字符 或 字段
案例
cat 123.txt
dyk is a tiancai
#切割出第5个字符
cut -b 5 123.txt
#切割第4到6个字符
# is
#切割第4个和第6个字符
# s
#切割第一个到第五个的字符
cut -b -5 123.txt
dyk i
cut -b 5- 123.txt
is a tiancai
file命令
显示文件的类型
which命令
查找PATH环境变量中的文件,linux内置命令不在path中
which python
/usr/bin/python
whereis命令
whereis命令用来定位指定的二进制程序,源代码文件和man手册页等相关文件的路径
文件的打包和压缩
tar是UNIX系统的一个文件打包工具,只是连续相连的文件堆放起来,并不具备压缩功能,但是加上选项,tar可以调用其他压缩解压工具,实现对文件的压缩和解压
tar命令在linux系统里面,可以实现对多个文件进行压缩打包和接压
格式
tar [选项] 打包后的文件名 文件目录列表
选项 | 参数含义 |
---|---|
-c | 建立新的打包文件 |
-x | 从打包文件中解出文件 |
-v | 处理过程中输出相关信息 |
-f | 对普通文件操作,后面跟指定文件 |
-z | 调用gzip压缩打包文件,与-x连用的时候调用gzip完成解压缩 |
-j | 调用bzip2来压缩打包文件,与-xl连用时调用bzip2完成解压缩 |
-C <目录> | 这个选项用在解压缩,要在特定目录解压缩 |
-t | 不解包查看内容 |
-r | 添加到已压缩的文件,向打包文件末尾追加文件 |
-h | -h参数能够保证,打包的不仅仅是个快捷方式,而是找到源文件 |
注意 -f后面必须跟指定文件
只打包不压缩
tar -cvf 123.txt.tar 123.txt
拆开tar包
tar -xvf 123.txt.tar
打包后用gzip压缩
tar -zcvf 123.txt.tar.gz 123.txt
拆开tar的压缩包
tar -zxvf 123.txt.tar.gz
不解压列出tar包内的文件
tar -tvzf test.tar.gz
拆开tar包中部分文件
#正常的解压命令,单独加上你要拆除的文件名,指定路径
tar -xzvf test.tar.gz test/my_pow.o
指定目录解tar包
tar -zxvf test.tar.gz -C dyk/
#将目标包解压到dyk目录下
排除文件解包
#注意--exclude 跟着文件名或是文件夹,不得加斜杠,排除多个文件,就写多个--exclude
tar -zxvf test.tar.gz --exclude my_pow.c -C ./dyk
#将test.tar.gz里面的文件除了my_pow.c全部解压到dyk目录下
打包链接文件
-h参数能够保证,打包的不仅仅是个快捷方式,而是找到源文件
注意
-f参数必须写在最后面,后面紧跟压缩文件的名
tar命令仅打包,习惯用.tar作为后缀
tar命令加上z参数,文件以.tar.gz 或.tgz表示
-c -t -x 不能同时出现
gzip命令
对文件进行压缩和解压缩,而gzip根据文件的类型可以自动识别压缩或解压缩
格式
gzip [选项] 压缩的文件名
选项 | 参数含义 |
---|---|
-c | 将输出信息写到标准输出上,并保留源文件 |
-d | 将压缩文件解压缩 |
-v | 对每一个压缩和解压的文件,显示文件名和压缩比 |
-l | 列出压缩文件的相关信息 |
-r | 递归处理压缩文件夹里的所有文件 |
-k | 保留源文件 |
注意
gzip无法压缩文件夹,必须先打包
gzip默认会把源文件替换掉,也就是解压会把删除源文件
gzip套件提供了许多方便的工具命令,可以直接操作压缩文件内容
zcat 直接读取压缩文件内容
zgrep
zless
zdiff
zip命令
zip命令:是一个跨平台的压缩工具,压缩文件的后缀为zip,还可以压缩文件夹
格式
zip 压缩文件名 要压缩的内容
语法:
zip 压缩文件名 要压缩的内容
-A 自动解压文件
-c 给压缩文件加注释
-d 删除文件
-F 修复损坏文件
-k 兼容 DOS
-m 压缩完毕后,删除源文件
-q 运行时不显示信息处理信息
-r 处理指定目录和指定目录下的使用子目录
-v 显示信息的处理信息
-x “文件列表” 压缩时排除文件列表中指定的文件
-y 保留符号链接
-b<目录> 指定压缩到的目录
-i<格式> 匹配格式进行压缩
-L 显示版权信息
-t<日期> 指定压缩文件的日期
-<压缩率> 指定压缩率
unzip命令用于解压
-l 显示压缩文件内容包含的文件
-d <目录> 指定文件压缩后要存储的目录
gcc的基本使用
gcc [选项] [文件名]
选项 | 含义 |
---|---|
-c | 只编译不链接。编译器只是将输入的.c 等源代码文件生成.o 为后缀的目标文件 |
-S | 只对文件进行编译,不汇编和链接 ,生成汇编代码 |
-E | 只对文件进行预处理,不编译汇编和链接 |
-o output_filename | 确定输出文件的名称为 output_filename,这个名称不能和源文件同名。如果不给出这个选项,gcc 就给出预设的可执行文件 a.out |
-v | 显示 gcc 执行时执行的详细过程,以及 gcc 和相关程序的版本号 |
-Idirname | 将 dirname 目录加入到程序头文件搜索目录列表中,是在预编译过程中使用的参数 |
注意 -o后面必须跟可执行文件
gcc 编译过程
从 hello.c 到 hello(或 a.out)文件,必须历经 hello.i、hello.s、hello.o,最后才得到 hello(或
a.out)文件,分别对应着预处理、编译、汇编和链接 4 个步骤
(1) 预处理,C 编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩
展、条件编译的选择等;
(2) 编译,将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标
程序,得到机器语言的汇编文件;
(3) 汇编,将汇编代码翻译成了机器码,但是还不可以运行;
(4) 链接,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中
的合适信息,通常是虚拟地址。
1.预处理
在 gcc 命令加上-E 参数,可以得到预处理文件
$ gcc -E hello.c –o hello.i
hello.c 经过预处理后得到的 hello.i
文件,除了原本的几行代码之外,还包含了很多额外的变量、函数等等,这些都是预处理器
处理的结果。
2.编译
在 gcc 编译参数加上-S,可以将 hello.i 编译成 hello.s 文件
gcc -S hello.i -o hello.s
hello.s该文件内容都是汇编语句
3.汇编
得到了汇编文件后,通过 gcc 就可以得到机器码了,也即是.o的目标二进制代码
gcc -c hello.s -o hello.o
尽管已经得到了机器码,但这个文件却还是不可以运行的,必须要经过链接才能运行。
4.链接
链接可分为动态链接和静态链接:
动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态
库才能运行。动态链接生成的程序小巧,但是必须依赖动态库,否则无法执行。
Linux 下的动态链接库实际是共享目标文件(shared object),一般是.so 文件,
作用类似于 Windows 下的.dll 文件。
静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直
接运行,不过体积较大。
Linux 下静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。
gcc 默认是动态链接,加上-static 参数则采用静态链接
头文件包含
#include <my.h>
#include "my.h"
对于使用尖括号的第一种情况,预处理器会在系统预设的头文件包含目录搜索头文
件。
对于使用双引号的第二种情形,预处理程序则会在目标文件的文件夹内搜索相应的
头文件,如果在该路径下没有找到所包含的头文件,就会到系统预设目录进行搜索。
也就是说,使用双引号的搜索路径包含了使用尖括号的情形。
创建静态库
静态库是.o 文件的集合,这些.o 文件是编译器按照常规方法生成的,在 Linux 下也称文
档(archive),用 ar 工具来管理。
add.c
int add(int a,int b)
{
return a+b;
}
use_add.c
#include <stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
scanf("%d",&b);
int sum=add(a,b);
printf("%d",sum);
return 0;
}
首先生成两个目标文件
gcc -c add.c -o add.o
使用归档工具ar将一些目标文件集成在一起
ar rcsv libadd.a add.o
ls
add.c add.o libadd.a use_add.c
gcc -o use_add use_add.c -L. -ladd
-L dir 能够在库文件的搜索路径中添加dir目录
-lname 选项指示编译时链接到的库文件
./use_add
1 2
3
创建共享库
首先使用gcc的-fPIC 选项为动态库构造一个目标文件
gcc -fPIC -Wall -c add.c
接下来使用-shared选项和已创建的位置无关的代码生成一个动态库libadd.so
gcc -shared -o libadd.so add.o
编译主程序,它将会链接到刚生产的动态库libadd.so
gcc -o use_add use_add.c -L. -ladd
运行前需要添加动态库的路径名
export LD_LIBRARY_PATH=/home/20181117026/test1
./use_add
1 2
3
gdb
需要使用 GDB 调试的程序,在编译的时候必须加-g 参数,开启调试信息
gcc -g test.c -o test
gdb 程序名
命令格式 | 含义 |
---|---|
break 行号或函数名 <条件表达式> | 设置断点:break + 要设置断点的行号 |
tbreak 行号或函数名 <条件表达式> | 设置临时断点,到达后自动删除 |
delete 断点号 | 删除断点 |
disable | 让设置的断点失效,如果要让多个断点失效可以用空格隔开 |
info b | 查看所有断点 |
enable | 与 disable 相对激活断点 |
run | 运行调试程序 |
countinue | 继续执行正在调试的程序,直到函数结束或者遇到新的断点 |
step | 执行一行源代码而且进入函数内部 |
next | 执行一行源代码但不进入函数内部 |
watch | 监视一个变量的值而不管它何时被改变 |
ignore 断点号 num | 忽略对应断点num次 |
在 GDB 命令提示符,直接按回车键为重复上一次的命令。
makefile 变量
规则
需要由make工具创建的目标体,通常是目标文件或者执行文件
要创建的目标体所依赖的文件
创建每个目标体时需要运行的命令,这一行必须以制表符开头
必须以 TAB 字符(‘\t‘)隔开,且不能以相同数量的空格代替。
格式正确的 Makefile 文件,在 Vi 中会语法高亮显示
在终端输入 make 命令就会调用 make 工具,make 会在当前目录按照文件名顺序寻找
Makefile 文件,依次按照:GNUmakefile、makefile、Makefile。如果找到其中的任何一个,
就读取并按照其中的规则执行,否则报错