开发人员的linux操作系统Tips

时间:2022-01-16 16:42:07

Don’t Repeat Yourself

1. ssh工具推荐

xshell,可以把xftp安装上,传输文件方便

2. 搭建本地yum源


当操作系统安装后,难免会出现有些工具未安装,如果通过rpm包手动安装
又会出现大量的依赖关系需要处理,我们可以通过搭建本地的yum源让yum来完成自动安装,从而不需要处理依赖。


  1. 挂载光盘或者iso

    mount /dev/sr0 /mnt
    或者
    mount -o loop /*.iso /mnt

  2. 安装createrepo
    rpm -ivh createrepo-x.y.z.rpm
    如果有依赖,先安装依赖

  3. 添加安装源

    cd /etc/yum.repos.d/

    mkdir back

    mv * back/

    cp back/cenos-base.repo ./

    删除centos-base.repo中的内容,只留以下内容

    name=local
    baseurl=file:///mnt/—>这里的目录mnt就是1中挂载的光盘位置
    enabled=1
    gpgcheck=0

  4. 更新安装源
    yum clean all

  5. 安装想要的软件

    如安装java

    yum -y install java-1.8.0*

  6. 指定安装目录
    A. mkdir /home/yum-install

    B. yum -y install java-1.8.0* –installroot=/home/yum-install

    执行installroot时,如是第一次,会自动创建相关目录,并用/etc/yum.repose.d/下的*repo。
    
    以后的执行如果指定了installroot,那么将会用installroot目录下的/etc/yum.repose.d,所以需要执行C
    

    C. cp /etc/yum.repose.d/*.repo /home/yum-install/etc/

3. linux访问windows

1. 首先在windows端设置共享目录src
2. 在linux端输入命令
mount.cifs //192.168.30.100/src /tmp/ -o username=cq,nounix,noserverino password=00000000 domain=WORKGROUP soft directio rw
注意:其中username、password、domain需要和自己Windows共享目录的设置一致。

4. linux访问linux

scp filename root@192.168.30.25:/home

5. windows 访问linux

1. linux需要已安装samba服务器
2. 添加需要共享的目录
    在配置文件/etc/samba/smb.conf中添加如下几行:
        [vppclean]
        path = /home/cq/genvpn
        available = yes
        browseable = yes
        public = yes
        writable = yes
        admin usrs = root
3. 给smb添加root用户的密码
    smbpasswd -a root 11111111  

4. 重启服务
    service smb restart
5. windows 访问linux的共享
    在我的电脑上点击鼠标右键,选择“映射网络驱动器”
    在弹出的窗口中输入"\\192.168.30.9\vppclean"

6. 添加鼠标右键

a. 在HKEY_CLASSES_ROOT\*\shell添加项"Edit with Vim"

b. 再在项"Edit with vim"下添加子项“command”,把键值设定为
    “D:\cq\tool\VIM\gVimPortable_7.4\vim74\gvim.exe”
    -p --remote-tab-silent "%1" 

c. 根据步骤b可以把任何命令添加到鼠标右键

7. linux不启动图形界面

systemctl set-default multi-user.target

等同于

ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

8. 解压rpm包

平常安装rpm包时,不清楚它安装了哪些东西,下面命令
可以从rpm包中提取出目录结构
rpm2cpio xx.rpm | cpio -div
也可以使用-vv参数得到更多内容输出
rpm -ivv xx.rpm

9. 内核模块在操作系统光盘的位置

以centos7.0安装光盘为例,内核模块在LiveOS/squashfs.img中,查看方式如下。
mount -o loop squashfs.img /mnt/m1

10. 解压cpio或者img

cpio -idmv < filenam.cpio/filename.img

11. 同步代码文件,防止误删除 #

  1 #!/bin/sh
  2 src=$1
  3 dst=$2
  4 
  5 inotifywait -mrq  -e modify,delete,create,attrib $src  | while read files
  6 do
  7     rsync -avzP $src $dst & >/dev/null
  8 done

12. 在所有的.c文件中查找字符串

find ./ -name *.c | xargs grep CLIB_DEBUG 

13. tar解压时使用系统的当前时间

使用参数m tar zxvfm *.tgz

14. iptables 从定向流 #

iptables -t nat -A POSTROUTING -s 192.168.0.56/32 -d 192.168.2.156/32 -p udp -j SNAT --to-source 192.168.2.78
conntrack -D

15. 挂载img文件

  1. kpartx -av *.img 会出现以下输入
    add map loop0p1 (253:3): 0 509952 linear /dev/loop0 2048
    add map loop0p2 (253:4): 0 3523024 linear /dev/loop0 512000
  2. 挂载分区
    mount /dev/mapper/loop0p1 /tmp

16. 查看进程中的线程在哪个core运行

top -H -p 进程ID

17. 查看某个线程的运行栈

pstack 进程ID/线程ID

18. 创建项目分支

1. 项目长期存在的两个分支
    master: 主分支,负责记录上线版本的迭代,该分支的代码与线上代码是完全一致的。

    develop: 开发分支,该分支记录相对稳定的版本,所有的feature分支和bugfix分支都
             从该分支创建。

2. 其他分支为短期分支,其完成功能开发之后需要删除
    feature/*: 特性(功能)分支,用于开发新的功能,不同的功能创建不同的功能分支,功能
               分支开发完成并自测通过之后,需要合并到develop分支,之后删除该分支。

    bugfix/*: bug修复分支,用于修复不紧急的bug,普通bug均需要创建bugfix分支开发,
              开发完成自测没问题后合并到develop分支后,删除该分支。

    release/*: 发布分支,用于代码上线准备,该分支从develop分支创建,创建之后由测试
               同学发布到测试环境进行测试,测试过程中发现bug需要开发人员在该release
               分支上进行bug修复,所有bug修复完后,在上线之前,需要合并该release分支
               到master分支和develop分支。

    hotfix/*: 紧急bug修复分支,该分支只有在紧急情况下使用,从master分支创建,用于紧急
              修复线上bug,修复完成后,需要合并该分支到master分支以便上线,同时需要再
              合并到develop分支。 

19. 查看文件被哪些进程占用?

lsof | grep hugepages

20. make时提示up to date

是因为makefile文件里面的target与目录名字同名
解决方法,把该名字加入到.PHONY中

21. 关掉selinux

setenforce  0

22. 启动shell时默认执行命令

当通过ssh连接到linux时,会打开一个shell,shell会首先读取文件/etc/profile 来设置当前shell的环境变量,用户就可以在此文件中加入自己需要的命令,如打开shell时默认产生core-dump:在/etc/profile 中添加 ulimit -c unlimited

23. 查看有几个CPU,每个CPU的物理核数,逻辑core数

cat /proc/cpuinfo
信息如下:
    processor   : 3
    vendor_id   : GenuineIntel
    cpu family  : 6
    model       : 55
    model name  : Intel(R) Celeron(R) CPU  J1900  @ 1.99GHz
    stepping    : 8
    microcode   : 0x829
    cpu MHz     : 2400.000
    cache size  : 1024 KB
    physical id : 0
    siblings    : 4
    core id     : 3
    cpu cores   : 4    

CPU个数:physical id
每个CPU的物理核数: cpu cores
逻辑core数:processor

24. 查看内存的频率,是否多通道

使用如下命令可查看平台下的内存通道。
    dmidecode -t memory | grep Locator
    dmidecode -t memory | grep Speed

25. 创建RPM包

0. 制作RPM包的几个关键阶段
    %prep阶段
        这个阶段主要完成对源代码的解压和打补丁,系统把源码包从SOURCES解压到BUILD目录,并切换到BUILD下的压缩包解压生成的目录里,完成打补丁等准备工作,最后退回到BUILD目录下。

    %build
        这个阶段开始构建包,就是执行常见的configure和make操作

    %install
        这个阶段就是执行make install操作。这个阶段会在BUILDROOT目录里建好目录结构,然后将需要导报到rpm软件包里的文件从BUILD里拷贝到BUILDROOT里对应的目录里。

    %clean阶段
        执行编译完成后的一些清理工作,相当于make clean

    %files阶段
        这里是包含制作rpm包文件的阶段,它主要用来说明会将%{buildroot}目录下的哪些文件和目录最终打包到rpm包里。

    其他附加阶段
        %pre rpm包安装前执行的脚本
        %post rpm包安装后执行的脚本
        %preun rpm包卸载前执行的脚本
        %postun rpm包卸载后执行的脚本

    常见宏定义
        在/usr/lib/rpm/macros文件中定义了各种宏变量
1. 写spec文件

2. 查看spec文件是否正确
    rpmspec -P xxx.spec
    此命令会预分析spec文件

26. Linux开机启动顺序

1. 加载内核
2. 启动init(/etc/inittab)内核启动的第一个用户级别的进程,其pid始终为1,其它的开机启动脚本都是通过这个进程来启动的
3. 执行/etc/rc.d/rc.sysinit这时init执行的第一个脚本,这个脚本主要的工作是进行系统的初始化。
4. 根据inittab中的设置执行/etc/rc.d/rc*.d,运行设置的级别的脚本
5. 执行/etc/rc.d/rc.local,在各级别服务启动后,会执行该文件。
6. /sbin/mingetty,等待用户登录

27. 查看本机udp程序

netstat -anup

28. gdb 调试正在运行的进程

gdb attach process_id

29. centos 插拔网线导致掉ip

网口的状态变化会导致网口的ip掉,原因是NetworkManager后台守护程序导致的

关闭此服务

systemctl disable NetworkManager.service

查看运行状态

systemctl -l status NetworkManager

30. 查看Linux系统属于哪个操作系统版本

lsb_release -a

LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.0.1406 (Core) 
Release:    7.0.1406
Codename:   Core

31. 启效rc.local服务

systemctl enable rc-local

查看状态 systemctl -l status rc-local