Linux基础知识笔记

---------------------学习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++开发


一、linux小知识


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 没有/ 这个才是删除软链接

二、Linux常用命令


1 日期时间


date -u 看UTC时间
date -s 设置时间 要用sudo  
date +%Y--%m--%d 
(hwclock)clock 查看硬件时钟时间(主板上时钟保存的时间) 
cal 查看日历
uptime 查看系统运行时间


2 查看命令


echo "string"
cat 用来显示文本文件
head 显示开头10行 head -n 3 filename
tail 显示末尾10行 tail -f 追踪显示文件更新
more 向后翻页
less 前后翻页


3 查看硬件信息


lspci 查看PIC设备  -v详细信息
lsusb 查看USB设备    -v
lsmod 查看加载了的模块(驱动)


4 关机重启


shutdown -h now
shutdown -h +10   //after 10min
shutdown -h 23.30
shutdown -r
poweroff  reboot


5 归档、压缩


zip **.zip myfile
unzip **.zip
gzip filename
tar用以归档文件(打包)
tar -cvf my.tar filename
tar -xvf my.tar
tar -cvzf my.tar.gz /path  归档后还压缩。


6 查找


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

 

四、fdisk进行磁盘分区


partprobe命令让内核更新分区操作。
cat /proc/partitions也可以用来查看分区信息。

 

五、创建文件系统


1 命令mke2fs -t ext4 /dev/sda3

-b blocksize 指定文件系统块大小(每次文件系统读写操作的最小单位默认4096 4K)
-c 检查坏块
-L 指定卷标
-j 建立文件系统日志
mkfs.ext4 /dev/sdb1  速度快,不能进行精细化控制。


2 dumpe2fs查看分区的文件系统信息

dumpe2fs /dev/sdb1


3 e2label /dev/sdb1 LABELNAME 打标签 一般大小标签名


4 fsck /dev/sda2 检查文件系统是否完好  必须先卸载

lost+found目录,存放损坏的但是恢复不了的数据。
修改文件系统一定要先卸载设备。

 

六、挂载MOUNT


1 mount /dev/sdb1  /mnt/


mount显示所有已经挂载上的文件系统。
-t 指定文件系统的类型
-o 指定挂载选项
    ro,rw  默认rw,只读或者读写。
    ....


2 umount /dev/sdb1   相当于弹出

! device is busy
有时候不能正常弹出,因为有进程在使用当前文件系统。
fuser -m /dev/sdb1  查看哪些进程在使用
lsof /mnt/ 查看哪些文件打开了,被谁打开


3 自动挂载 配置文件/etc/fstab

/dev/sdb1        /mount        ext4    defaults    0 0
关机重启
mount -a命令会挂载fstab下所有定义的挂载。

 

七、man -k查看对应类型的文档


man -k passwd
man -k pass
info ls
/+关键字  找内容。
/usr/share/doc目录中有help文档。DOC

 

八、用户权限


1 改变文件所属用户  

chown user filename.txt
-R 参数递归的修改目录下的所有文件的所属用户。

2 命令chgrp用以改变文件的所属组

chgrp grop1  filename.txt
-R 参数递归的修改目录下所有文件的所属组。

3 chmod

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

4 每一个终端都拥有一个umask属性,来确定新建文件、文件夹的默认权限。

umask使用数字权限方式表示,如022
目录的默认权限是:777-umask
文件的默认权限是: 666-umask
一般,普通 用户的默认umask是002,root用户的默认umask是022
也就是说,对于普通 用户来讲:
新建文件的权限是:666-002 = 664
新建目录的权限是:777-002 = 775
命令umask用以查看设置umask值
umask 022

5 特殊权限

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设备的数据都会自动丢弃掉。

 十、文本处理


 1 基于列处理文本 cut命令

 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个字符。

 2 wc统计文本信息

 wc filename
 -l 只统计行数
 -w 只统计单词 
 -c 只统计字节数
 -m 只统计字符数

 3 文本排序 sort命令

 sort filename
 -r 进行倒序排序
 -n 基于数字进行排序
 -f 忽略大小写
 -u 删除重复行
 -t c 使用c作为分隔符为列进行排序
 -k x 当进行基于指定字符分割为列的排序时,指定基于那个列排序

4 删除重复行

 sort -u可以用以删除重复行。
 uniq 用以删除相邻的重复行。

5 文本比较

 diff fileold filenew
 -i 忽略大小写
 -b 忽略空格数量的改变
 -u 统一显示信息(一般用以生成patch文件-->补丁文件:开发时源代码打补丁)
 diff -u fileold filenew > final.patch

 6 检查英文拼写 aspell

 7 处理文本内容

 tr命令
 删除关键字
 tr -d 'KEYWORD' < yourfile
 转换大小写
 tr 'a-z' 'A-Z' < linuxcast

 8 搜索替换

 (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)


 十一、网络


 1 以太网

 lspic查看pci接口的网卡,eth0表示ethrnet 0 代表网上编号。
 如果网上是usb接口,通过lsusb查看。
 ifconfig (interface config) 查看网络连接。
 ifup、ifdown启用、关闭一个网络接口。
 centOs上可以用过setup命令设置网络连接。

 2 网络相关配置文件

 网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0
 DNS配置文件 /etc/resolv.conf
 主机名配置文件 /etc/sysconfig/network
 静态主机名配置文件 /etc/hosts
 hostname命令查看主机名,修改主机名:hostname newname 通过配置文件永久修改。

 3 网络测试命令

 测试网络连通性: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

 4 网络故障排查

 遵循从底层到高层、从自身到外部的流程进行。
 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) 源代码形式软件安装

 1 源代码基本编译流程:
 ./configure    检查编译环境、相关库文件以及配置参数并生成makefile
 make            对源代码进行编译,生成可执行文件
 make install    将生成的可执行文件安装到当前计算机中
 优点:跨平台,可控制性好    缺点:会有大量的依赖关系

 (2) RPM(redhat Package Manager)

 通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系。可升级、追踪依赖关系、基本信息查询、软件验证、支持多平台。
 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

(3)YUM(Yellodog Updater,Modified)

主要用来解决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

(4)dpkg

dpkg -L foo - 显示名为“foo”的包都安装了哪些文件以及它们的路径。

 

十四、C++开发


(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

你可能感兴趣的:(linux)