---------------------学习linux时记录的笔记,用于个人回顾。
目录
一、linux小知识
二、Linux常用命令
1 日期时间
2 查看命令
3 查看硬件信息
4 关机重启
5 归档、压缩
6 查找
三、编辑
四、fdisk进行磁盘分区
五、创建文件系统
1 命令mke2fs -t ext4 /dev/sda3
2 dumpe2fs查看分区的文件系统信息
3 e2label /dev/sdb1 LABELNAME 打标签 一般大小标签名
4 fsck /dev/sda2 检查文件系统是否完好 必须先卸载
六、挂载MOUNT
1 mount /dev/sdb1 /mnt/
2 umount /dev/sdb1 相当于弹出
3 自动挂载 配置文件/etc/fstab
七、man -k查看对应类型的文档
八、用户权限
1 改变文件所属用户
2 命令chgrp用以改变文件的所属组
3 chmod
4 每一个终端都拥有一个umask属性,来确定新建文件、文件夹的默认权限。
5 特殊权限
九、管道与重定向
十、文本处理
1 基于列处理文本 cut命令
2 wc统计文本信息
3 文本排序 sort命令
4 删除重复行
5 文本比较
6 检查英文拼写 aspell
7 处理文本内容
8 搜索替换
十一、网络
1 以太网
2 网络相关配置文件
3 网络测试命令
4 网络故障排查
十二、系统启动流程
十三、软件管理
(1) 源代码形式软件安装
(2) RPM(redhat Package Manager)
(3)YUM(Yellodog Updater,Modified)
(4)dpkg
十四、C++开发
1 可通过file命令查看文件
2 uname查看系统内核
3 cd /proc --> cat cpuinfo meminfo ........ 查看很多信息
4 su - 切换到root用户并启用新的终端
5 sudo 用管理员用户执行命令
6 建立软链接, ln -s 源文件 目标文件
ln -s /home/SSD/workspace/boost1.64/lib/*.so.* /usr/lib
注意:
-s 是代号(symbolic)的意思。
第一,ln命令会保持每一处链接文件的同步性,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又软链接和硬链接两种,软链接就是ln -s ** **
它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间
硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件
删除软链接 确实是用rm 但是!!!
rm -fr xxxx/ 加了个/ 这个是删除文件夹
rm -fr xxxx 没有/ 这个才是删除软链接
date -u 看UTC时间
date -s 设置时间 要用sudo
date +%Y--%m--%d
(hwclock)clock 查看硬件时钟时间(主板上时钟保存的时间)
cal 查看日历
uptime 查看系统运行时间
echo "string"
cat 用来显示文本文件
head 显示开头10行 head -n 3 filename
tail 显示末尾10行 tail -f 追踪显示文件更新
more 向后翻页
less 前后翻页
lspci 查看PIC设备 -v详细信息
lsusb 查看USB设备 -v
lsmod 查看加载了的模块(驱动)
shutdown -h now
shutdown -h +10 //after 10min
shutdown -h 23.30
shutdown -r
poweroff reboot
zip **.zip myfile
unzip **.zip
gzip filename
tar用以归档文件(打包)
tar -cvf my.tar filename
tar -xvf my.tar
tar -cvzf my.tar.gz /path 归档后还压缩。
locate keyword 查找快 预先建立数据库,数据库默认每天更新一次。
优点:找得快,缺点:新建立的文件找不到。
updatedb建立、更新数据库
find 查找位置 查找参数
缺点:慢
find . -name *aaa*
find / -name *.conf
find / -perm 777 查找所有权限是777的文件
find / -type d 返回目录类型的文件 链接就是 find / -type l
find . -name "a*" -exec ls -l {} \; 把带a开头的文件ls出来 把返回结果传递给ls命令当参数。
参数还有: -name -perm -user -group -ctime -type -size
vi :!系统命令 执行一个命令并显示结果
:sh 切回到命令行。ctl+d 回到vi
partprobe命令让内核更新分区操作。
cat /proc/partitions也可以用来查看分区信息。
-b blocksize 指定文件系统块大小(每次文件系统读写操作的最小单位默认4096 4K)
-c 检查坏块
-L 指定卷标
-j 建立文件系统日志
mkfs.ext4 /dev/sdb1 速度快,不能进行精细化控制。
dumpe2fs /dev/sdb1
lost+found目录,存放损坏的但是恢复不了的数据。
修改文件系统一定要先卸载设备。
mount显示所有已经挂载上的文件系统。
-t 指定文件系统的类型
-o 指定挂载选项
ro,rw 默认rw,只读或者读写。
....
! device is busy
有时候不能正常弹出,因为有进程在使用当前文件系统。
fuser -m /dev/sdb1 查看哪些进程在使用
lsof /mnt/ 查看哪些文件打开了,被谁打开
/dev/sdb1 /mount ext4 defaults 0 0
关机重启
mount -a命令会挂载fstab下所有定义的挂载。
man -k passwd
man -k pass
info ls
/+关键字 找内容。
/usr/share/doc目录中有help文档。DOC
chown user filename.txt
-R 参数递归的修改目录下的所有文件的所属用户。
chgrp grop1 filename.txt
-R 参数递归的修改目录下所有文件的所属组。
chmod 模式 文件
模式:u、g、o,a代表ugo,+、-代表加入或者删除权限。
chmod u+rw filename.txt
chmod g-x filename.txt
chmod go+r filename.txt
chmod a-x filename.txt
-R参数可以递归修改文件夹内的所有文件。
chmod -R a+x directoy
umask使用数字权限方式表示,如022
目录的默认权限是:777-umask
文件的默认权限是: 666-umask
一般,普通 用户的默认umask是002,root用户的默认umask是022
也就是说,对于普通 用户来讲:
新建文件的权限是:666-002 = 664
新建目录的权限是:777-002 = 775
命令umask用以查看设置umask值
umask 022
suid :以文件的所属用户身份执行,而非执行文件的用户。
sgid : 以文件所属组身份执行。功能:在该目录中创建的任意新文件的所属组与该目录的所属组相同。
sticky(黏贴位) : 功能:对目录拥有写入权限 的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件。
设置suid: chmod u+s filename.exe
设置sgid: chmod g+x directory
设置sticky: chmode o+t directory
也可以用数字表示: SUID = 4, SGID = 2, Sticky = 1 --> chmod 4755 filename.exe
STDIN 标准输入 编号0 默认 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端
重定向:
> 将STDOUT重定向到文件(覆盖) echo "linuxcast.net" > outfile --> ls outfile
>> 将STDOUT重定向到文件(追加) echo "linuxcast.net" >> outfile
2> 将STDERR重定向到文件(覆盖) ls errorfile 2> errorout
2>&1 将STDERR与STDOUT结合 ls nothere 2>&1 alloutput
< 重定向STDIN grep linuxcast < /etc/passwd 将/etc/passwd的内容作为标准输入,输入到命令grep linuxcase
管道:
| 将一个命令的STDOUT作为另一个命令的STDIN
ls -l | grep linuxcast
find / -user linuxcast 2> /dev/null | grep video 所有重定向到/dev/null设备的数据都会自动丢弃掉。
cut -d: -f1 /etc/passwd 显示/etc/passwd下所有行的第一列。
grep root /etc/passwd | cut -d: -f3 显示root用户的uid。
-d 指定分割字符(默认是TAB)
-f 指定输出的列号
-c 基于字符进行切割 cut -c2-6 /etc/passwd 只显示/etc/passwd的第2到第6个字符。
wc filename
-l 只统计行数
-w 只统计单词
-c 只统计字节数
-m 只统计字符数
sort filename
-r 进行倒序排序
-n 基于数字进行排序
-f 忽略大小写
-u 删除重复行
-t c 使用c作为分隔符为列进行排序
-k x 当进行基于指定字符分割为列的排序时,指定基于那个列排序
sort -u可以用以删除重复行。
uniq 用以删除相邻的重复行。
diff fileold filenew
-i 忽略大小写
-b 忽略空格数量的改变
-u 统一显示信息(一般用以生成patch文件-->补丁文件:开发时源代码打补丁)
diff -u fileold filenew > final.patch
tr命令
删除关键字
tr -d 'KEYWORD' < yourfile
转换大小写
tr 'a-z' 'A-Z' < linuxcast
(1)sed只用正则表达式处理文件。
sed 's/old/new/g' filename /g全局替换 将所有的old替换为new
sed '1,50s/old/new/g' filename 只替换1到50行
sed -e 's/old/new/g' -e 's/abc/ABC/g' filename 同时替换old、abc
sed -f sededit filename 把替换的指定放到sededit文件中,调用sededit文件进行替换。
(2)grep [option] 'PATTERN' FILE (Global search Regular Expression and Print out the line)
lspic查看pci接口的网卡,eth0表示ethrnet 0 代表网上编号。
如果网上是usb接口,通过lsusb查看。
ifconfig (interface config) 查看网络连接。
ifup、ifdown启用、关闭一个网络接口。
centOs上可以用过setup命令设置网络连接。
网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0
DNS配置文件 /etc/resolv.conf
主机名配置文件 /etc/sysconfig/network
静态主机名配置文件 /etc/hosts
hostname命令查看主机名,修改主机名:hostname newname 通过配置文件永久修改。
测试网络连通性:ping 192.168.1.1 ping www.baidu.com
测试DNS解析:host www.baidu.com dig www.baidu.com
显示路由表: ip route
追踪到达目标地址的网络路径: traceroute www.baidu.com
使用mtr进行网络质量测试(结合了traceroute和ping):mtr www.baidu.com
遵循从底层到高层、从自身到外部的流程进行。
1 先查看网络配置信息是否正确:IP、netmask、gateway、DNS
2 ping网关IP地址
3 查看DNS解析是否正确:host www.baidu.com
如果这三步没有解决,只能用traceroute。
1 BIOS
BIOS负责检查硬件并查找可启动设备。硬件有故障会出现报警音。
2 MBR:Boot Code
BIOS找到可启动设备后执行其引导代码,为MBR前446字节,跳转到真正的引导程序GRUB。
3 执行引导程序-GRUB
Grub可以引导几乎所有的操作系统,Grub的相关文件保存在/boot/grub目录中。配置文件为/boot/grub/grub.conf。负责找到内核信息,加载驱动。
4 加载内核
如果有驱动加载失败,dmesg查看本次内核启动的输出信息。
5 执行init
init是Linuxt系统中运行的第一个进程,调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂载文件系统,并且根据运行级别启动相应服务。
init可以通过/etc/inittab配置文件修改默认的运行级别,每个级别的对应的启动服务保存在/etc/rc.d/rc[0|1|2|3|4|5|6].d中,命令runlevel可以显示当前及上一个运行级别。
命令init可用以改变当前的运行级别。
6 运行级别
- 0 关机
- 1 单用户模式
- 2 不带网络的多用户模式
- 3 多用户模式
- 4 未使用
- 5 X11图形化模式
- 6 重启
7 单用户模式修改ROOT密码
为内核传递参数“1”可以让系统进入单用户模式,直接以root登陆,不需要密码。单用户模式下不启动任何服务。使用passwd修改root密码。可以使用GRUB加密,在grub.conf中加入参数。如果加密密码忘记,可以将硬盘挂载到另一个系统上,将配置文件中的加密参数删除即可。
1 源代码基本编译流程:
./configure 检查编译环境、相关库文件以及配置参数并生成makefile
make 对源代码进行编译,生成可执行文件
make install 将生成的可执行文件安装到当前计算机中
优点:跨平台,可控制性好 缺点:会有大量的依赖关系
通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系。可升级、追踪依赖关系、基本信息查询、软件验证、支持多平台。
1 安装软件 rpm -ivh app.rpm
2 卸载软件 rpm -e app
3 升级形式安装 rpm -U app-new.rpm
4 通过http、ftp协议安装 rpm -ivh www.baidu.com/app.rpm
参数: -v -h 显示详细信息、进度条。
5 查询
rmp -qa 列出所有安装的rpm软件。
rmp -qf filename 查询目标文件属于哪个rpm包。
rmp -qi packagename 查询指定已安装rpm软件的信息。
rmp -ql packagename 查询指定已经安装rpm软件包含的文件。
rmp -qip app.rpm 查询rpm文件的信息。
rmp -qlp app.rpm 查询rpm文件包含的文件。
6 RPM验证
软件在传播的过程中可能会被恶意修改,所以才用非对称加密算法,需要一个密钥。
1 导入秘钥: rpm --import password
2 验证rpm文件: rpm -K app.rpm
3 验证已安装的文件是否有被改动: rpm -V app
主要用来解决rpm的依赖关系。可以对RPM进行分组,基于组进行安装操作,支持多个仓库。仓库的配置文件保存在/etc/yum.repos.d/目录下,可以有多个配置文件,配置文件以repo为后缀。
1 常用命令:
yum install software-name
yum remove software-name
yum update software-name
2 查询
yum search keyword 搜索包含keyword的包。
yum list(all|installed|recent|updates) 列出全部的、安装的、最近的、软件更新
yum info packagename 显示指定软件的信息。
yum whatprovides filename 查询哪个rpm软件包含目标文件。
3 创建仓库。
将所有rpm文件拷贝到一个文件夹中,通过createrepo软件创建,可以指定分组。
yum会创建缓存信息,为了提高速度。
清除缓存信息: yum clean all
dpkg -L foo - 显示名为“foo”的包都安装了哪些文件以及它们的路径。
(1) 段错误生成文件
ulimit -c unlimited(解决不易复现的错误) 程序发生段错误时,程序退出,同时错误信息转储到core.*文件。
gdb helloword core.* 来查看发生段错误的代码位置。
(2) 查看helloword是否包含调试信息
objdump -h helloword
(3) 编译不优化
添加编译选项-O0,意思是不进行编译优化,gdb在默认情况下会使用-O2。
./configure --enable-debug
开启debug,不执行gcc -O2命令,在编译的时候不优化代码,在debug你能看到很多变量
(4) CC 与 CXX
这是 C 与 C++ 编译器命令 默认值一般是 “gcc” 与 “g++”。
CPPFLAGS will be given to the C preprocessor
这是用于预处理阶段的选项
CFLAGS 与 CXXFLAGS
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项
这两个变量实际上涵盖了编译和汇编两个步骤
(5) gdb中打印当前所在位置
bt 或者 where
(6) 另一种生成Makefile方式
aclocal;
automake --add-missing;
./configure --with-incompatible-bdb;
make