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文件及目录管理命令

命令对应英文作用
lslist查看文件内容
pwdprint 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。
但是我们不想要用户在新建立文件时,文件的属性是666777,那么我们就要设置
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。如果找到其中的任何一个,
就读取并按照其中的规则执行,否则报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值