Linux常用命令

学习 Linux 笔记,常用命令,linux编程


前言

linux是编程工作中必备的知识,若不懂linux 想要深入了解计算机行业确实是寸步难行!在学习中记录了常用的命令,方便今后的复习,全文章全部手敲,若有错误请指出。


一、关于Linux下的目录与快捷键

1、常用快捷键

主键盘快捷键:
Ctrl-p
Ctrl-n
Ctrl-b
Ctrl-f
DelCtrl-d delete 光标后面的
HomeCtrl-a first letter
EndCtrl-e end
BackspaceBackspace
清除整行Ctrl-u
删除光标到行末Ctrl-k
显示上滚Shift-PgUp
显示下滚Shift-PgDn
增大终端字体Ctrl-Shift-+
减小终端字体Ctrl- -
新打开一个终端Ctrl-Alt-T
清屏Ctrl-l 直接用clear也行

2、常用目录

/根目录
/bin存放二进制可执行文件
/boot存放开机启程序
/dev存放设备文件:字符设备、块设备
/home存放普通用户
/etc用户信息和系统配置文件 passwd、group
/lib库文件:libc.so.6
/root管理员宿主目录(家目录)
/user用户资源管理目录unix software resource
/tmp临时文件目录
//sys系统信息

3、对用户的操作

su 进入管理员权限Ctrl+d 退出管理员权限
sudo adduser username添加用户
sudo adduser username sudo追加管理员权限
sudo deluser username删除指定用户
sudo deluser username sudo删除指定用户的sudo权限

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、文件和目录管理

1、常用文件目录管理命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10mount挂在一个文件系统

长文件格式:drwxrwxrwx :d-文件,r-读,w-写,x-执行
第一组rwx-文件拥有这对文件的权限
第二组rwx-同一用户组的用户权限
第三组rwx -其他用户对文件的权限

-rw-------- 1 root root 1024 09-30 12:00 filename
权限位、引用计数、所有者、属组、大小、最后一次修改时间、文件名

10、mount

mkdir /u01 #挂在文件系统前必须先创建一个目录
mount /dev/sdb1/u01 #再将文件系统挂在到目录上
#也可以把它添加到fstab中进行自动挂在,这样任何时候系统启动的时候,文件系统都会被加载
/de/sdb1/u01 ext2 defualts 0 2 #遗留问题

2.文件内容查看

序号命令功能
1whereis可以查找某个命令的位置。eg:whereis ls
2whatis显示某个命令的描述信息
3locate可以显示某个文件的路径,它会使用由updatedb创建的数据库
4findfind ./ -type d #搜索当前目录下文件类型是文件夹的文件
5catcat file #查看文件的内容 ;cat -n file #查看文件内容,并列出行号
6moremore file#查看文件内容,Enter建继续查看,q退出
7lessless file #查看文件内容,enter键查看剩余内容、↑回看,q退出
8headhead -n 20 file #显示文件前20行;-20 后20行,默认前10行
9grepgrep -r ‘copy’ ./ -n 查找当前目录下所有文件中含有copy内容的文件,-n显示行号
10xargs对查找后的命令进行操作
11tailtail -n N [-f] filename 显示最后N行内容
12man系统命令参考手册

find ./ -name “filename” 按文件名搜索
find ./ -maxdepth 1 -name ‘*.jpg’ 指定搜索深度
find /home/itcast -size +20M -size -50M 按文件大小搜索. 单位:k、M、G
这里要注意,两个size一个都不能少,还有就是文件大小单位对大小写敏感

xargs 命令
find … | xargs ls -l 对find操作的结果集进行操作
等价于:
find … -exec ls -l {} ;
两者最大的区别是党结果集合很大的时候,xargs会对结果进行分段处理,所以性能好些,但是xargs也有缺陷,axrgs默认用空格来分割结果集,当文件有空格的时候,会因为文件名被切割失效

12、man
语法: man [num] commandname

man crontab #显示crontab 命令的man页面

num 可以分为8钟命令类型

序号内容
1用户命令
2系统调用
3c库函数
4设备与网络接口
5文件格式
6游戏与屏保
7环境、表、宏
8系统管理员命令和后台运行命令
whatis crontab #先使用whatis命令查看有哪几种命令类型
man 5 crontab #再使用man查看

3、Linux 文件权限设置

序号命令功能
1chown修改文件所者和所属组
2chgrp修改文件用户组
3chmod改变文件和目录的权限

1、chown

sudo chown username:groupname filename //同时修改文件所属用户和用户组
sudo -R username:groupname /home/filename //进行递归修改

2、chgrp

sudo chgrp groupname filename //修改文件所属用户组 

3、chmod

//给指定文件的属主和属组所有权限(包括读、写、执行)
$ chmod ug+rwx file.txt
//删除指定文件的属组的所有权限
$ chmod g-rwx file.txt
//修改目录的权限,以及递归修改目录下面所有文件和子目录的权限
$ chmod -R ug+rwx file.txt

Linux数字权限

4、vim 编辑器

vim +10 filename.txt #打开文件并跳到第10行
vim -R /filename #只读迷失打开文件

定位:

命令英文功能
gggo跳转首行
Ggo跳转末行
数字gggo移动到 数字 对应行数
0(数字)光标移动到首行,工作模式不变
光标移到行尾,工作模式不变

撤销恢复

命令英文功能
uundo撤销上次命令
Ctrl+rredo回复撤销的命令

删除

命令英文功能
s删除光标所在行字符并进入编辑模式
S栓出光标所在行并进入编辑模式
x删除光标所在字符,工作模式不变
dwdelete删除光标所在的单词,要求光标在首字母上,如果不再首字母,只会删除当前位置到单词末,工作模式不变
rr删除光标所选中的字符
dddelete剪切光标所在行
Ddelete删除光标所在位置至行末,工作模式不变
d0删除光标所在位置到首行,工作模式不变
d$删除光标所在位置到行末,工作模式不变

进入编辑器命令

命令英文功能
iinsert光标前插入字符
Iinsert光标所在行的首行插入字符
aappend
Aappend光标所在行的行末插入字符
o光标所在行的下一行插入字符
O光标所在行的上一行插入字符

命令模式下的光标移动

命令英文功能
h
j
k
l
%在命令模式下,光标处于大空号时,使用%跳转到对应的大括号处

自动缩进
在这之前要进行vimrc修改,不然自动缩进是8个空格
ubuntu的vimrc位置在/etc/vim/vimrc
在文件末尾添加三行:
set tabstop=4 //设置制表符宽度为4
set softtabstop=4 // 设置软制表符宽度为4
set shiftwidth=4 // 设置缩进空格数为4
gg=G (命令模式),无回显

命令功能
yy复制光标所在行
p向后粘贴剪切板内容,如果复制整行,这里时粘贴在光标所在位置的下一行
P向前粘贴剪切板内容,如果是整行,这里时粘贴在光标所在位置的上一行
n-yy复制光标所在位置的n行,包括光标所在行

查找和替换
1、查找

命令功能
/ +findname命令模式下查找
按回车键气筒查找后,按n,会自动找下一个,N跳到上一个

查找光标所在单词
光标在目标单词上时,*或# 查找下一个,这里不要求光标必须在首字母上。

替换:末行模式下进行
单行替换
光标置于代替换行, :s /代替换词/替换词
全文替换

命令功能
:%s /待替换词/替换词这个默认替换每行的首个,一行有多个目标词时,后面的不会变
:%s /待替换词/替换词/g真正意义上的全局替换

区域替换

命令功能
:24,35s /待替换词/替换词/g替换24-35行之间的目标词

末行模式下历史命令

命令功能
Ctrl-p上一条命令
Ctrl-n下一条命令

保存退出

命令英文功能
wwrite保存
qquit退出,如果没有保存不允许退出
q!
wqwrite & quit保存并退出
x保存并推出

vim更多命令详情:vim终端编辑器快速入手详细指南

4、 软件包安装和卸载

1、安装

sudo apt-get install softname

2、更新

sudo apt-get update

3、卸载

sudo apt-get remove softname

在这里插入图片描述

5、压缩命令

1、gzip和bzip2

两这都是配合tar打包命令使用
这两个压缩的缺陷都是只能对单个文件进行压缩, 一不能压缩目录,而不能打包

gzip 只能压缩文件,不能压缩目录,后缀名为.gz,而且不保留源文件

gzip filename //压缩文件
gzip -d filename.gz //解压文件
gunzip filename.gz //解压文件

bzip2 压缩解压文件
参数 -k:刹那生压缩文件后保留源文件(压缩比高)

bzip2 filename //压缩文件
bzip2 -d filename.bz2 //解压文件

2、zip和tar 压缩

zip
语法:zip 选项[-r] [压缩后文件名称][文件或目录]

zip filename.zip  /root/home/filename  zip压缩后的文件名 压缩文件
zip -r filename.zip /test 压缩目录
unzip filename.zip 解压文件

tar
语法:tar [-zcf] 压缩文件名 文件或目录

-c 建立一个压缩文件的参数指令(create),后缀是.tar
-x 解开一个压缩文件的参数指令(extract)
-z 以gzip命令压缩/解压缩
-j 以bzip2命令压缩/解压缩
-v 压缩的过程中显示文件(verbose)
-f file 指定文件名,必选项

tar -zxvf 文件名 解压的
tar -zcvf 文件名 压缩的
tar -tvf 文件名 查看

三、系统配置命令

1、网络命令

序号命令功能
1ifconfig用于查看和配置Linux系统的网络接口
2ping检测与主机是否连通
3ssh登陆远程主机
4ftp链接ftp服务器并下载多个文件
5traceroute
6talnet
7rcp
8scp

1、ifconfig

ifconfig -a #查看所有网络接口及其状态
ifconfig eth0 up #启动eth0接口
ifconfig eth0 down #关闭eth0接口

2、ping

ping -c 5 baidu.com #ping百度主机,只发5个包

3、ssh

ssh -1 洪湖吗 主机地址 #登陆
ssh -v -1 jsmith 地址 #调试ssh客户端
ssh -V #显示ssh客户端版本

4、ftp

ftp IP/hostname

2、性能优化和监控命令

序号命令功能
1top显示当前系统中占用资源最多的一些进程(默认以CPU占用率排序)
2free显示系统当前内存的使用情况,包括已用内存,可用内存和交换内存的情况
3vmstat
4iostat
5shutdown关机命令
6uname可以显示一些重要的系统信息,例如:内核名称、主机名、内核版本号、处理器类型等信息

1、top

top -u username #显示username用户的进程

2、free

free #默认以字节方式显示内存的使用情况
free -g #以GB为为单位输出内存的使用情况。-g GB,-m MB, -b B字节
free -t #显示内存情况的总汇

5、shutdown

shutdown -h now #关闭系统并立即关机
shutdown -h +10 #10分钟后关机
shutdown -r now #立即重启
shutdown -Fr now #重启期间强行进行系统检查

6、uname

uname -a #显示系统重要信息

3、磁盘存储

序号命令功能
1df显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位显示磁盘的使用情况
2du
3mysqlmysql 是linux最钢钒的数据库,可以使用mysql客户端链接远程MySQL服务器

1、df

df -k #以字节为单位显示磁盘使用情况
df -h #以人类阅读习惯方式显示磁盘使用情况
df -T #显示文件系统类型

2、du

3、mysql

mysql -u root -p -h 192.168.1.2 #远程连接数据库
mysql -u root -p #连接本地数据库

四、其他命令

序号命令功能
1ln创建软连接或者创建硬连接
2diff比较是忽略空白字符
3sort对文件进行排序
4date显示或设置系统日期
5wget下载软件,音乐,视频
6export输出设置全局变量
7ps命令用于显示正在运行中的进程的信息
8service运行System Vinit脚本,这些脚本一般位于/etc/init.d 文件下
9kill终止一个进程
10crontab某个用户的crontab入口
11passwd修改密码
12yum安装卸载apache
13rpm安装卸载apache
14env环境变量
15top文字版任务管理器
16jobs查看操作系统当前运行了哪些用户作业
17alias设置别名

1、ln

ln -s file file.s #创建一个软链接
#软连接就像windows下的快捷方式
#linux下的软件行为和windows下的快捷方式差不多,但
#是如果是相对路径创建的软连接,在软连接移动之后就会失效,无法访问
#而windows快捷方式不同,windows快捷方式随便移动
#所以创建软连接最好使用绝对路径
ls -s /home/mydir/file file.s2 #绝对路径下的软连接,移动后不会失效
ln file file.h #创建一个硬连接
#创建硬连接后,文件的硬件计数+1
stat file #查看文件状态
stat file.h#查看文件状态
#在显示的信息中文件和硬连接的Inode是相同的,每个文件都有唯一的Inode,他们就是同一个文件
#当创建硬连接是硬链接计数+1,删除时计数器-1,直到计数器为0是才会删除这个文件

2、diff

diff -w filename1 filename2

3、sort
4、date

data -s "mm/dd/yy hh:MM:ss" #修改系统时间
#需要同步硬件时间和系统时间
# hwclock -systohc
# hwclock --systohc -utc

5、wget

wget http://prodiwnloads.sourceforge.net/nogios.tar.gz
#下载文件并以指定的文件名保存文件
wget -0 taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701

6、export

7、ps

ps -ef | more #查看当前正在运行的所有进程
ps -efH | more #以属性结构显示当前正在运行的进程,H选项标识显示进程的层次结构

8、service

service ssh status #查看服务状态
service --status-all #查看所有服务状态
service ssh restart #重启服务

9、kill

#通常会先用ps -ef查找某个进程得到他的进程号,然后再使用kill -9 进程号 终止该进程
ps -ef | grep vim #查找vim的进程
kill -9 进程号 #终止进程

10、crontab
?

crontab -u username -l #查看某个用户的crontab 入口
#设置每10分钟执行一次的计划任务
*/10**** /home/ramesh/check-disk-space

11、passwd

passwd #修改当前用户密码

#超级管理员权限可以修改其他用户的密码
passwd username
passwd -d username #超级管理员可以删除一个用户的密码

12、yum:Ubuntu 中未找到该命令

#使用yum安装apache
$ yum install httpd
#更新apache
$ yum update httpd
#卸载/删除apache
$ yum remove httpd

13、rpm

#使用rpm安装apache
rpm -ivh httpd-2.2.3-22.0.1.el5.i386.rpm
#更新apache
rpm -uvh httpd-2.2.3-22.0.1.el5.i386.rpm
#卸载/删除apache
rpm -ev httpd

14、env

env | grep SHELL #查看SHELL的环境变量

16、alias 别名 =’指令‘

alias pg=’ps oem | grep‘ #设置别名
pg abc #找到oem 用户下的 abc的进程

五、编程常用命令

1、gcc 编译命令

参数功能
-I指定头文件所在目录位置
-c只做预处理、编译、汇编。 得到二进制文件
-g编译时添加调试文件,共gdb调试
-Wall显示所有警告信息
-D向程序中“动态”注册宏定义
-l指定动态库库名
-L指定动态库路径

当头文件和源码不在一个目录下时,需要指定头文件
用 -I 参数指定头文件所在位置,位置可以在编译文件前,也可以在后面
其中 -o是为编译文件起一个别名

gcc —I ./headDir hello.c -o myHello

2、动态与静态库

名称功能
静态库对空间要求较低,对时间要高
动态库对空间要求高,对时间要求低

制作静态库-静态库在应用程序生成时,可以不必再编译,节省再编译的时间。
ar rcs [lib库名.a] file1.o
#库必须以lib开头,静态库必须以.a结尾
#file.o是实现库中的功能文件

#1、将.c生成 .o文件
gcc -c add.c -o add.o
#2、使用ar工具制作静态库
ar rcs libMyMath.a add.o
#3、静态库的使用:
gcc test.c lib库名.a -o a.out

将静态库封装成.h的头文件
在头文件中有库函数中的声明

 #ifndef _MYMATH_H_
 #define _MYMATH_H_                                                 //防止在代码中多次include头文件,多次展开静态库,带来额外的开小
 int add(int,int);
 int sub(int,int);
 double div1(int,int);
 #endif

动态库的制作生成与位置无关的代码

#1、生成位置无关的.o文件,使用-fPIC参数后,生成的汉书就和位置无关,挂上@plt表示,等待动态绑定
gcc -c add.c -o add.o -fPIC
#2、使用 gcc -shared 制作动态库
gcc -shared -o lib库名.so add.o sub.o div.o
#3、编译可执行程序时指定使用的动态库。 -l:指定库名 -L:指定库路径
gcc test.c -o a.out -l mymath -L ./lib
#4、运行可执行程序 
./a.out
#报错
hjc@hjc-Master:~/myCode/lib$ ./a.out 
./a.out: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directory

报错原因

连接器:工作连接阶段:工作时需要 -l 和 -L
动态连接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置


1、#通过环境变量来指定动态库所在目录位置
export LD_LIBRARY_PATH=./lib #临时生效
#运行执行程序
./a.out #解决报错了

2、#永久生效,写入终端配置文件。 .bashrc
vi ~/.bashrc
写入export LD_LIBRARY_PATH=动态库路径 (建议使用绝对路径)保存
. .bashrc 或者重启 终端-->让修改后的.bashrc 生效。```

3、# 拷贝自定义动态库 到/lib 系统库中

4、#配置文件法
sudo vim /etc/ld.so.conf
写入 动态库的绝对路径 保存
sudo ldconfig -v 使配置文件生效
./a.out ---》ldd a.out 查看

3、gdb调试基础指令

参数功能
-g使用该参数编译可以执行文件,找到调试表。
listlist 1 列出源码。根据源码指定 行号设置断点。
bb 20 在20行位置设置断点
r/run运行程序
n/next下一条指令(会越过函数)
s/step下一条指令(会进入函数)
p/printp i 查看变量的值
continue继续执行断点后续指令。
finish结束当前函数调用
quit推出gdb当前调试
set follow-fork-mode child命令设置gbd 在fork之后根中子进程
set follow-fork-mode parent设置跟踪父进程

其他指令:

参数功能
run使用run查找段错误出现位置。
set args设置main 函数命令行参数(在start、run之前)
run 字符串1 字符串2…设置main 函数 命令行参数
info b查看断点信息表
b 20 if i=5设置条件断点
ptype查看变量类型
bt列出当前程序正存活的栈帧
frame根据栈帧编号,切换栈帧
display设置跟踪变量
undisplay取消设置跟踪变量,使用跟踪变量的编号
clear n清除第n行的断点
#程序在汇编时必须添加 -g 参数
gcc test.c -o test -g

gdb test #进入调试系统

常见错误说明 没有符号被读取——编译时每家-g参数
file 后ian加使用 -g编译的文件 可以不用推出, gdb 直接读取后进行调试

4、makefile 项目管理

1个规则

基本原则: 1、若想生成目标,检查规则中的依赖条件是否存在,若不存在,则寻找是否有规则用来生成该以来文件
2、检查规则中的目标是否需要更新,必须见检查它的所有依赖,以来中有任意一个被更新,则目标必须更新

目标:依赖条件
(一个tab缩进)命令
1、目标的时间必须晚于依赖条件的时间,否则,更新目录
2、依赖条件如果不存在,找寻新的规则区产生依赖
ALL: 指定项目中的中级目标

2个函数

src=$(wildcard ./*.c) 
 #匹配当前工作目录下的所有.c 文件,将文件名组成列表,复制给变量 src 。--> src=add.o sub.o div1.o
obj=$(patsubst %.c, %.o, $(src))
 #将参数3中,包含参数1的部分,替换为参数2。obj=add.o sub.o div1.o 
 #其中"%"就是一个匹配字符,匹配时不能带有路径
clean: (没有依赖)
	-rm -rf $(obj) a.out  #其中 "-" 的作用是,删除不存在文件时,不报错,顺序执行结束
	 

3个自动变量:

自动变量功能
$@在规则的命令中,表示规则中的目标
$<在规则的命令中,表示规则中的第一个依赖条件。如果第一个依赖条件,如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则
$^在规则的命令中,表示规则中的所有依赖条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项.

模式规则–易拓展

%.o:%.c
	gcc-c $< -o $@

静态模式规则

$(obj): %.o:%.c
	gcc -c &< -o $@

伪目标

.PHONY: clean ALL

make的参数

参数功能
-n模拟执行 make 、 make clean 命令
-f指定文件执行 make 命令 *.mk

提示:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值