二、Linux基础
1、Linux下的目录一般放什么东西:
bin:可执行文件
boot:一般放启动的文件
dev:设备
etc:大部分的配置文件
home:主目录,每个用户自己的目录
lib:库目录
lib64:64位的库的目录
mnt:挂载目录
opt:可选目录,用户自己安装的程序可以放在这里面,例如编译器clang。
root:根目录
sbin:系统的执行文件目录
usr:自己安装的软件一般放在这里
tmp:放临时文件的目录,系统重启的时候里面的东西会删掉的
2、输入ls -l命令打印的东西表示什么意思:
drw-rw-r-- 2 username1 username2 4096 Aug 7 05:24 DeskTop
文件属性:drw-rw-r--:
d表示目录,普通文件是-,软链接是l。
后面每三位为一组,表示这个文件拥有者的权限。
r:读。w:写。x:可执行(文件)、可进入(目录)。
第一组rw-:文件创建者的权限。
第二组rw-:同一组用户的权限。
第三组r--:其他用户的权限。
2:表示硬链接数,类似于智能指针的引用计数器。
username1:表示文件归属者。
username2:归属组。
4096:大小。
Aug 7 05:24:上一次修改的时间。
3、一般的文件命令:
ps -e | grep ssh:看ssh服务有没有安装
sudo apt install openssh-server:安装ssh服务
who:看谁连在这机子上
sudo apt-get update:一般安装好系统后的更新远端服务器的资源信息
sudo apt-get upgrade:看看有没有什么包需要更新
sudo apt-get dist-upgrade:非常重要版本的更新,比如内核版本的更新
pwd:打印当前目录
man pwd:pwd这个命令怎么用,也就相当于是帮助文档
ls:看当前目前下有哪些文件,也可以直接用ll
cd:切换目录
touch abc.txt:生成一个字节大小为0的空文件。如果这个文件已经存在,则修改它的修改时间。
ls a*:列出a开头的文件
ls *.txt:列出txt格式的文件。*表示任意个字符。
ls a?b.txt:一个?表示一个字符。
cp aaa.txt aaa.bak:拷贝aaa.txt,生成一个aaa.bak
ls -sail *bak;i选项表示打印文件在操作文件上的node(在硬盘上的位置)。
cp -i abc.txt aaa.txt:-i表示当aaa.txt存在的时候,询问是否覆盖掉aaa.txt
cp -l abc.txt aaa.txt:-l表示abc.txt和aaa.txt指向的是同一个东西。硬链接数会加1。硬链接不可以跨文件系统。
cp -s abc.txt aaa.txt:-s表示软链接,相当于快捷方式。软链接可以跨文件系统。
mkdir docTmp:创建一个目录docTmp。
rm abc.txt:删除文件。
rmdir docTmp:删除空目录。
rm -r:递归删除目录。
stat aaa.txt:详细地列出文件的属性信息。
file aaa.txt:列出非空文件的文件类型。
wget -c http://mirrors.163.com/xxxxx:从远处的机器拉文件到本地
cat aaa.txt:看文件的内容
more aaa.txt:看文件的内容,一页一页地往下看
less aaa.txt:看文件的内容,可以上下翻页
tail aaa.txt:看文件的尾部的10行。常用于看日志文件。
tail -n 3 aaa.txt:看文件的尾部的3行。
tail -f -n 3 aaa.txt:实时查看文件的尾部的3行。
head aaa.txt:看文件的头部的10行。
mv aaa.txt bbb.txt:重命名一个文件
clear:清屏
ls ~/sources.list:~表示当前用户目录,输入cd就可以到这个目录
sudo !!:以sudo方式执行上一条指令
cd ..:返回上一次目录
mkdir -p a/b/c:递归创建a、b、c目录
4、更新软件源的方法:
wget -c http://mirrors.163.com/xxxxx/sources.list:-c表示如果本地下载中断,下次再输入该命名时,会从上一次继续。
cd /etc/apt
cat sources.list
ls -l sources.list
sudo cp sources.list sources.list.bak
sudo cp ~/sources.list .
cat sources.list
sudo apt-get update
sudo apt-get upgrade
5、一般的查看系统资源的命令:
ps:输出当前控制台用户拥有的进程。
ps -ef:-e显示所有的进程。-f显示完整的输出。PPID表示进程的父进程。C表示CPU占用率。STIME表示进程启动的系统时间。TIME表示该进程累计使用的CPU时间。
ps -axgl:a显示所有的。l显示全部信息。VSZ表示使用的内存,单位KB。RSS表示使用的物理内存。
ps --forest:显示进程数
top:相当于任务管理器,实时显示系统资源占用情况。PR表示进程的级别。VIRT表示虚拟内存。RES表示物理内存。
sudo apt-get install htop:更好用的htop命令,比top好看。
ps aux | grep top
kill -s INT 1608:给PID为1608的程序发送中断信号。优雅地退出程序
ps aux | grep top
kill -9:强杀程序
killAll:杀掉一批程序
df -h:查看磁盘空间
du -h:目录所在的磁盘空间
6、其他命令:
grep:一般用于查看日志。
grep myName aaa.txt:打印aaa.txt中出现了myName字符串的行
grep -c myName aaa.txt:打印aaa.txt中出现了myName字符串行的行数
grep -v myName aaa.txt:打印aaa.txt中没有出现myName字符串的行
grep -n myName aaa.txt:打印aaa.txt中出现了myName字符串的行和行号
grep my*ame aaa.txt:打印aaa.txt中出现了my*ame(正则)字符串的行
ps | grep bash:|表示管道,ps的输出作为grep的输入。
sudo apt-get install zip
zip
unzip
tar
tar -xvf xxxxx.tar.gz:解压
printenv:查看全局环境变量有哪些。
echo $PATH:打印环境变量PATH。冒号分割。
printenv | grep PATH:打印环境变量PATH
set | head:查看局部环境变量有哪些,打印前10行。
创建局部的变量:
test=hello
echo $test
创建子bash:
bash
echo $test:啥也没打印
exit
echo $test:打印hello
export test:在子bash也能显示
unset test:干掉刚刚设置的环境变量test。
chmod +x aaa.sh:添加可执行权限。
chmod -w aaa.sh:减掉写权限。
chown:改变所有者。
shell脚本的第一行注释是有意义的,意思是用/bin/sh对整个脚本进行处理。
例如,
#! /bin/sh
who
cat aaa.cpp >> bbb.cpp:将aaa.cpp的内容追加到bbb.cpp的结尾。
7、怎么拷贝远端机器的文件?用scp命令。
sudo apt-get install git
git --version
scp --version
scp sourceName@192.168.xxx.xxx:/home/sourceName/aaa.txt .:以sourceName登录远端机器并拷贝远端机器192.168.xxx.xxx的文件/home/sourceName/aaa.txt到当前目录下
8、sudo apt-get install make:安装make。
sudo apt-get install cmake:安装cmake。
sudo apt-get install clang:安装clang。
clang++ aaa.cpp:编译aaa.cpp
9、设置环境变量
vim ~/.bashrc
添加PATH=$PATH:/opt/llvm/bin
source ~/.bashrc
echo $PATH
10、通过makefile编译。但实际项目中应该用cmake。
自己写makefile的话,当一个类包含头文件的时候要全部链接,例如,
test002.o:test002.cpp test0021.h
其中,test002.cpp包含了test0021.h。
vim makefile
test002.cpp生成一个test002的可执行文件。内容如下:
一个文件的时候:
test002:test002.o
clang++ -o test002 test002.o
test002.o:test002.cpp
clang++ -c -o test002.o test002.cpp
test0021.h、test0021.cpp、test002.cpp生成一个test002的可执行文件。test002.cpp调用test0021里面的方法。
多个文件的时候:
test002:test002.o test0021.o
clang++ -o test002 test002.o test0021.o
test002.o:test002.cpp test0021.h
clang++ -c -o test002.o test002.cpp
test0021.o:test0021.cpp test0021.h
clang++ -c -o test0021.o test0021.cpp
然后
make
屏幕输出
clang++ -c -o test002.o test002.cpp
clang++ -o test002 test002.o
time ./test002:计算消耗cpu的时间和程序运行所占用的时间。
11、sudo apt-get install xxxxx
Ubuntu16.04版本之后用sudo apt install xxxxx就行,去掉-get。