1、常用命令
1、目录操作
# 创建目录和父目录a,b,c,d
mkdir -p a/b/c/d
# 拷贝文件夹a到/tmp目录
cp -rvf a/ /tmp/
# 移动文件a到/tmp目录,并重命名为b
mv -vf a /tmp/b
# 删除机器上的所有文件
rm -rvf /
ls 命令能够看到当前目录的所有内容。ls -l能够看到更多信息,判断你是谁。
pwd 命令能够看到当前终端所在的目录。告诉你你在哪。
cd 假如你去错了地方,cd命令能够切换到对的目录。
find find命令通过筛选一些条件,能够找到已经被遗忘的文件。
2、文本处理
cat
最常用的就是cat命令了,注意,如果文件很大的话,cat命令的输出结果会疯狂在终端上输出,可以多次按ctrl+c终止。
# 查看文件大小
du -h file
# 查看文件内容
cat file
grep
grep用来对内容进行过滤,带上–color参数,可以在支持的终端可以打印彩色,参数n则输出具体的行数,用来快速定位。
比如:查看nginx日志中的POST请求。
grep -rn --color POST access.log
推荐每次都使用这样的参数。
如果我想要看某个异常前后相关的内容,就可以使用ABC参数。它们是几个单词的缩写,经常被使用。A after 内容后n行B before 内容前n行C count? 内容前后n行
就像是这样:
grep -rn --color Exception -A10 -B2 error.log
3、压缩与解压
.tar 使用tar命令压缩或解压
.bz2 使用bzip2命令操作
.gz 使用gzip命令操作
.zip 使用unzip命令解压
.rar 使用unrar命令解压
最常用的就是.tar.gz文件格式了。其实是经过了tar打包后,再使用gzip压缩。
创建压缩文件
tar cvfz archive.tar.gz dir/
解压
tar xvfz. archive.tar.gz
快去弄清楚它们的关系吧。
4、运维
chown
chown 用来改变文件的所属用户和所属组。
chmod 用来改变文件的访问权限。
这两个命令,都和linux的文件权限777有关。
示例:
# 毁灭性的命令
chmod 000 -R /
# 修改a目录的用户和组为 xjj
chown -R xjj:xjj a
# 给a.sh文件增加执行权限(这个太常用了)
chmod a+x a.sh
systemctl
当然,centos管理后台服务也有一些套路。service命令就是。systemctl兼容了service命令,我们看一下怎么重启mysql服务。 推荐用下面这个。
service mysql restart
systemctl restart mysqld
对于普通的进程,就要使用kill命令进行更加详细的控制了。kill命令有很多信号,如果你在用kill -9,你一定想要了解kill -15以及kill -3的区别和用途。
su
su用来切换用户。比如你现在是root,想要用xjj用户做一些勾当,就可以使用su切换。
su xjj
su - xjj
5、系统状态概览
uname
uname命令可以输出当前的内核信息,让你了解到用的是什么机器。
uname -a
ps
ps命令能够看到进程/线程状态。和top有些内容重叠,常用。
# 找到java进程
ps -ef|grep java
top
top系统状态一览,主要查看。cpu load负载、cpu占用率。使用内存或者cpu最高的一些进程。下面这个命令可以查看某个进程中的线程状态。
top -H -p pid
free
top也能看内存,但不友好,free是专门用来查看内存的。包括物理内存和虚拟内存swap。
df
df命令用来查看系统中磁盘的使用量,用来查看磁盘是否已经到达上限。参数h可以以友好的方式进行展示。
df -h
ifconfig
查看ip地址,不啰嗦,替代品是ip addr命令。
ping
至于网络通不通,可以使用ping来探测。
6、其他
export
很多安装了jdk的同学找不到java命令,export就可以帮你办到它。export用来设定一些环境变量,env命令能看到当前系统中所有的环境变量。比如,下面设置的就是jdk的。
export PATH=$PATH:/home/xjj/jdk/bin
wget
你想要在服务器上安装jdk,不会先在本地下载下来,然后使用scp传到服务器上吧(有时候不得不这样)。wget命令可以让你直接使用命令行下载文件,并支持断点续传。
wget -c http://oracle.fuck/jdk2019.bin
2、 CMake && Makefile
1. 可执行文件
cpp文件是我们的代码文件,是不能直接执行的,需要编译源码生成可执行文件
g++ -o demo demo.cpp
./demo
2. 链接第三方库
编译代码时如果用到了第三方库(非c++标准库),我们需要告诉编译器第三方库的头文件(.h .hpp)和库文件(.so .a)的位置
安装第三方库一般有两种方式
apt
sudo apt-get install xxxx
直接在终端输入以上命令即可安装,apt默认情况下,头文件放在==/usr/include下,库文件放在/usr/lib下,可执行文件放在/usr/bin==下
从源码编译安装
在对应库的官网下载源码安装,如opencv等,默认情况下头文件放在==/usr/local/include下,库文件放在/usr/local/lib下,可执行文件放在/usr/local/bin==下
(就相当于下一个cpp文件的源码,自己在自己的机器上编译)
3. Makefile
Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。 其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等
以下是一段makefile的代码
hello:hello.c
gcc -I${HOME}/incl -c hello.c
gcc -o hello hello.o
rm -f hello.o
mv hello ${HOME}/bin
有了makefile文件,我们只需要在终端输入
make
即可自动编译整个工程
不同的系统(linux,mac,windows)cpp文件生成可执行文件的过程可能不通,makefile文件也可能不同。不同的Make工具遵循着不同的规范和标准,makefile的格式也不同,其可移植性比较差
4.CMake
CMake是一个 跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装 (编译过程)
在工程文件夹中编写CMakeLists.txt文件,执行
cmake
即可自动生成Makefile文件,再执行
make
即可自动编译整个工程,生成一个可执行文件,比如hello,然后运行一下
./hello
以下是一段链接opencv的CMakeLists.txt文件
cmake_minimum_required(VERSION 3.5)
project(opencv_test)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(opencv_test main.cpp)
target_link_libraries( opencv_test ${OpenCV_LIBS})
但是执行cmake之后整个文件夹会比较乱,多出一些乱七八糟的文件,所以一般在.cpp文件和cmakelist同目录下新建一个build文件夹,编译在这个build文件夹里进行
cmake .. # 因为cmakelists在上一级文件夹里面,所以到上一级去找,一个点是在同级找
make # 因为makefile直接就在build文件夹里面所以直接make就行了
# 用了cmake之后要发给别人只需要吧build文件夹删去就可以了