0%

lscpu 显示CPU架构的有关信息

Linux的CPU设备查看器。lscpu命令用来显示cpu的相关信息。
lscpusysfs/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读 。
命令输出的信息包含cpu数量,线程,核数,socket和Nom-Uniform Memeor Access(NUMA),缓存等等。

官方定义为:

lscpu - display information about the CPU architecture

参数基本用处不大,默认即可,部分参数可以查看offline和online的设备信息。

默认实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ lscpu
Architecture: x86_64 #架构信息
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 64 #逻辑cpu颗数
On-line CPU(s) list: 0-63
Thread(s) per core: 2 #每个核心线程
Core(s) per socket: 16 #每个cpu插槽核数/每颗物理cpu核数
Socket(s): 2 #cpu插槽数
NUMA node(s): 2
Vendor ID: GenuineIntel #cpu厂商ID
CPU family: 6 #cpu系列
Model: 63 #型号
Model name: Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz
Stepping: 2 #步进
CPU MHz: 1290.335 #cpu主频
BogoMIPS: 4604.47
Virtualization: VT-x #cpu支持的虚拟化技术
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 40960K
NUMA node0 CPU(s): 0-15,32-47
NUMA node1 CPU(s): 16-31,48-63

其中几个概念需要理解清楚,基本比较重要的都有了备注。

其中第一个为CPU(s),这个值为Socket * Core * Thread得出,也就是逻辑的CPU个数。

1
2
3
4
5
CPU(s):                64   #逻辑CPU数
On-line CPU(s) list: 0-63
Thread(s) per core: 2
Core(s) per socket: 16
socket: 2

而其他几个概念为:

  • Socket : 物理上的CPU插槽的数量,也就是物理的实体概念
  • Core:即平常说的单核、多核、四核等,即每个CPU上的核数
  • Thread:每个core上的线程数,即超线程。

什么是NUMA node

NUMA体系结构中多了Node的概念,Node是一个逻辑上的概念,这个概念其实是用来解决core的分组的问题。每个node有自己的内部CPU,总线和内存,同时还可以访问其他node内的内存。即Node用来将core分组,每个Node拥有一个对应的本地内存。

node 和socket没有必然的联系,一般是一个socket上的core属于同一个node。

对操作系统来说,其逻辑CPU的数量就是Socket * Core * Thread

CentOS 安装配置zabbix库

安装zabbix库

1
2
3
4
5
6
7
$ sudo rpm -ivh https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm

# 安装zabbix前端的一些包
$ yum-config-manager --enable rhel-7-server-optional-rpms

# Installation
$ sudo yum install zabbix-server-mysql

新建数据库

新建 zabbix Mysql 数据库及专用账号

1
$ mysql 
1
2
3
4
5
6
7
mysql > CREATE DATABASE zabbix character set utf8 collate utf8_bin;

mysql > GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';

mysql > flush privileges;

mysql > quit

导入数据

默认情况下,执行下述命令就可以;

1
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

但是我好想没有找到这个压缩文件,所以执行下面的命令:

1
2
3
4
5
$ cd /usr/share/zabbix-mysql/
# 依次导入下列sql表
$ cat schema.sql | mysql -uzabbix -p zabbix
$ cat images.sql | mysql -uzabbix -p zabbix
$ cat data.sql | mysql -uzabbix -p zabbix

配置数据库

1
2
3
4
5
6
7
8
9
$ vim /etc/zabbix/zabbix_server.conf

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=zabbix

启动 Zabbix server 进程

1
2
3
$ service zabbix-server start

$ systemctl enable zabbix-server

web UI 安装zabbix

重启一下Httpd 服务后,进入 http://zabbix-server-ip/zabbix 即可web配置,

初始登录信息为Admin/zabbix

安装zabbix agent

安装Zabbix Agent

1
yum install zabbix-agent

编辑Zabbix Agent 配置文件

1
2
3
4
5
6
vim /etc/zabbix/zabbix_agentd.conf

Server=[zabbix server ip]

ServerActive=[zabbix server ip]
Hostname=[ Hostname of client system ]

重启Zabbix Agent

1
2
3
4
5
service zabbix-agent restart

添加开机启动
​```bash
chkconfig zabbix-agent on

Zabbix agent on Zabbix server is unreachable for 5 minutes

checked and found that the ServerActive address is not changed to zabbix-server IP address in configuration file. So we changed it to Zabbix-server IP.

We made the changes in:

1
/etc/zabbix/zabbix_agentd.conf

and restarted the service using:

1
$ sudo service zabbix-agent2 start 

This fixed the issue.

Not able to find zabbix data source in grafana After enabling plugin

It appears as signed on grafana’s plugin panel, but /etc/grafana/grafana.ini needs editing.


[plugins]
allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource

zabbix 无法启动server服务器

可以检查日志tailf /var/log/zabbix/zabbix_server.log

ZABBIX 报错连接拒绝(cannot connect to [10050]: [111] Connection refused)

首先还是看一下防火墙等是不是阻断.
然后确认数据库的最大连接数.默认的是256.

1.vim /etc/my.cnf
[mysqld]
max_connections=需要添加的最大连接数

2.vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535

3.重启

systemctl daemon-reload

systemctl restart mysqld.service

查看最大连接数
mysql>show variables like ‘max_connections’;
查看当前连接数
show status like ‘%thread%’;

查看Linux的CPU信息

可以通过命令lscpu来查看

lscpu用于显示CPU的相关信息,该命令主要从sysfs和/proc/cpuinfo收集CPU体系结构信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ lscpu
Architecture: x86_64 # 架构
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16 # 逻辑CPU颗数
On-line CPU(s) list: 0-15
Thread(s) per core: 2 # 每个核的线程
Core(s) per socket: 4 # 每个CPU插槽的核数
Socket(s): 2 # CPU的插槽数
NUMA node(s): 2
Vendor ID: GenuineIntel # CPU厂商ID
CPU family: 6 # CPU系列
Model: 85 # 型号
Model name: Intel(R) Xeon(R) Gold 5222 CPU @ 3.80GHz
Stepping: 7 # 步进
CPU MHz: 3538.279 # CPU主频
CPU max MHz: 3900.0000
CPU min MHz: 1200.0000
BogoMIPS: 7600.00
Virtualization: VT-x # CPU支持的虚拟化技术
L1d cache: 32K # 一级缓存
L1i cache: 32K # 一级缓存
L2 cache: 1024K # 二级缓存
L3 cache: 16896K # 三级缓存
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14 # Nom-Uniform Memeory Access(NUMA)
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1d arch_capabilities

可以加上参数-p来获取比较容易解析的输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,1,1,,1,1,1,1
2,2,0,0,,2,2,2,0
3,3,1,1,,3,3,3,1
4,4,0,0,,4,4,4,0
5,5,1,1,,5,5,5,1
6,6,0,0,,6,6,6,0
7,7,1,1,,7,7,7,1
8,0,0,0,,0,0,0,0
9,1,1,1,,1,1,1,1
10,2,0,0,,2,2,2,0
11,3,1,1,,3,3,3,1
12,4,0,0,,4,4,4,0
13,5,1,1,,5,5,5,1
14,6,0,0,,6,6,6,0
15,7,1,1,,7,7,7,1

或者直接读取/proc/cpuinfo文件

1
2
3
4
5
6
7
8
9
10
11
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

kswapd often uses 100% CPU when swap is in use

如果此时的Mem并没有用很多的话,可能需要执行下面的命令来强制关闭:

1
2
$ killall -9 kswapd
$ echo 1 > /proc/sys/vm/drop_caches

超凡脱俗的 sudo

Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

如果希望可以执行这个命令,需要管理员在文件 /etc/sudoers 中增加权限即可。

官方的定义为:

execute a command as another user

语法

1
$ sudo [ option ] command

参数说明

  • -l--list:显示出自己(执行 sudo 的使用者)的权限
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在后台执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

没有sudo权限的用户

如果没有sudo权限,在执行命令的时候还有下面👇的输出:

1
2
3
$ sudo ls
[sudo] password for username:
username is not in the sudoers file. This incident will be reported.

指定用户执行命令

这个的应用场景为,其他用户在登录,而你具有sudo权限,测试可以通过指定用户名来操作。

1
$ sudo -u username ls -l

列出目前sudo的权限

如果不清楚,可以执行那些命令,可以通过参数-l来查看,主要看在sudoer里面的修改。

1
2
3
4
5
6
7
8
9
10
11
$ sudo -l
Password:
Matching Defaults entries for user on localhost:
!visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User user may run the following commands on localhost:
(ALL) ALL

以root权限执行上一条命令

使用sudo快速统计家目录的使用情况

1
2
3
4
5
6
7
$ sudo sh -c "cd /home ; du -s * | sort -rn "
15013524344 user1
1170974156 user2
139238772 user3
1382673532 user4
41071068 user5
3523056 user6

Linux sudo命令

Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

如果希望可以执行这个命令,需要管理员在文件 /etc/sudoers 中增加权限即可。

官方的定义为:

execute a command as another user

语法

1
$ sudo [ option ] command

参数说明

  • -l--list:显示出自己(执行 sudo 的使用者)的权限
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在后台执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

没有sudo权限的用户

如果没有sudo权限,在执行命令的时候还有下面👇的输出:

1
2
3
$ sudo ls
[sudo] password for username:
username is not in the sudoers file. This incident will be reported.

指定用户执行命令

这个的应用场景为,其他用户在登录,而你具有sudo权限,测试可以通过制定用户名来操作。

1
$ sudo -u username ls -l

列出目前sudo的权限

如果不清楚,可以执行那些命令,可以通过参数-l来查看,主要看在sudoer里面的修改。

1
2
3
4
5
6
7
8
9
10
11
$ sudo -l
Password:
Matching Defaults entries for user on localhost:
!visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL
LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User user may run the following commands on localhost:
(ALL) ALL

以root权限执行上一条命令

使用sudo快速统计家目录的使用情况

1
2
3
4
5
6
7
$ sudo sh -c "cd /home ; du -s * | sort -rn "
15013524344 user1
1170974156 user2
139238772 user3
1382673532 user4
41071068 user5
3523056 user6

炫技 - 快速执行上一条命令

第一种方法:在终端输入两个感叹号,然后回车就可以快速地执行上一条命令了。

1
$ !!

在linux下修改权限

1
2
3
4
5
6
7
chmod g+r path/file 加读权限 当前目录
chmod -R g+r path/file 加读权限 当前目录以及子目录
g-r 减读权限
g+w 加写权限
g-w
g+x 加执行权限
g-x

chgrp修改文件所属组

简单使用,将文本test.txt所属组改为gourp1

1
chgrp gourp1 test.txt

2.chown修改文件拥有者
##将test.txt文件所属用户修改为user1

1
chown user1 test.txt

##同时修改test.txt的所属用户和所属组

1
chown user1:group1 test.txt

3.chmod修改文件属性

1
2
3
4
chmod 755 test
chmod u+x test
chmod u-x test
chmod g+x test

4.usrmod修改用户所属组
一般的话只是将当前用户添加到其它组中去

1
usrmod -a -G group1 user1

如果要彻底更改用户所属的组的话使用

1
usrmod -g group1 user1

使用Linux时,需要以一个用户的身份登陆,从而限制一个使用者能够访问的资源;而组则是用来方便组织管理用户。

用户与组

•每个用户拥有一个UserID
•每个用户属于一个主组,属于一个或多个附属组
•每个组拥有一个GroupID
•每个进程以一个用户身份运行,并受该用户可访问的资源限制
•每个可登陆用户有一个指定的SHELL

系统中的文件都有一个所属用户及所属组,用户、组信息保存在以下三个文件中:

1
2
3
4
5
/etc/passwd   用户信息

/etc/shadow 用户密码

/edc/group  组信息

命令id用以显示当前用户的信息,命令passwd可以修改当前用户的密码;以下命令可以显示登陆用户信息:

1
2
3
4
5
whoami   显示当前用户

who 显示当前登陆的用户信息

w 显示登陆用户的详细信息

命令usermod修改一个用户的信息:

usermod 参数 用户名
-l  修改用户名
-u 修改uid
-g 修改用户主组
-G 修改用户附属组
-L 锁定用户
-U 解锁用户

命令userdel用户删除一个用户:

userdel 用户名
userdel -l 用户名 删除用户的同时删除该用户家目录

命令groupadd、groupmod用以创建、修改一个组:
groupadd 组名

groupmod -n 新组名 旧组名
groupmod -g 新组ID 旧组ID

例如:

userdel -r sam

此命令删除用户sam在系统文件(主要是/etc/passwd,/etc/shadow,/etc/group等)中的记录,同时删除用户的主目录。

删除一个组

同样的,我们有时会需要删除一个组,命令groupde用以删除一个组

Linux文件特殊权限:SUID、SGID和SBIT

SUID

当s这个标志出现在 文件所有者的x权限上时,例如文件权限状态“-rwsr-xr-x”,此时就称为 Set UID,简称为SUID的特殊权限。SUID有这样的限制和功能:

(1)SUID权限仅对 二进制程序有效;

(2)执行者对于该程序需要 具有x的可执行权限

(3)本权限仅在 执行该程序的过程中有效;

(4)执行者将具有该程序所有者的权限。

举个例子,在Linux中,所有账号的密码记录在/etc/shadow这个文件中,并且只有root可以读和强制写入这个文件。那么,如果另一个账号vbird需要修改自己的密码,就需要访问/etc/shadow这个文件,但是上面明明说了只有root能访问/etc/shadow这个文件,是不是矛盾?但事实上,vbird是可以修改/etc/shadow这个文件内的密码的,这就是SUID的功能。

通过上述的功能说明,我们知道,

(1)vbird对于/usr/bin/passwd这个程序具有x权限,表明vbird可以执行passwd;

(2)passwd的所有者为root;

(3)vbird执行passwd的过程中会暂时获得root的权限;

(4)/etc/shadow因此可以被vbird所执行的passwd所修改。

但是vbird如果使用cat去读取/etc/shadow这个文件时,是不能读取的。

img

(SUID只能用在文件上,不能用在目录)

SGID

当s标志出现在文件所有者的x权限时称为SUID,那么s出现在用户组的x权限时称为SGID。(U表示user,G表示group)。SGID有如下功能:

(1)SGID对二进制程序有用;

(2)程序执行者对该程序需具备x权限;

(3)执行者在执行过程中会获得该程序用户组的支持。

举个例子,/usr/bin/locate这个程序可以去查询/var/lib/mlocate/mlocate.db这个文件的内容,mlocate.db的权限如下:

-rwx–s–x root slocate /usr/bin/locate

-rw-r—– root slocate /var/lib/mlocate/mlocate.db

若使用vbird这个账号执行locate时,vbird就会获得用户组slocate支持,又由于用户组slocate对mlocate.db具有r权限,所以vbird就可以读取mlocate.db了。

img

除二进制程序外,SGID也可以用目录上。当一个目录设置了SGID权限后,它具有如下功能:

(1)用户若对此目录具有r和x权限,该用户能够进入该目录;

(2)用户在此目录下的有效用户组将变成该目录的用户组;

(3)若用户在此目录下拥有w权限,则用户所创建的新文件的用户组与该目录的用户组相同。

SBIT

SBIT目前只对目录有效。

SBIT对目录的作用是:

(1)当用户对此目录具有w和x权限时,即具有写入权限时;

(2)当用户在该目录下创建新文件或目录时,仅有自己和root才有权力删除。

SUID\SGID\SBIT权限设置

先将其转换成数字:

SUID->4

SGID->2

SBIT->1

假设要将一个文件权限修改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,原先的755前面还要加上4,也就是4755,所以,

用命令chmod 4755 filename 设置就可以了。此外,还可能出现S和T的情况。

我们知道,s和t是替代x这个权限的,但是,如果它本身没有x这个权限,修改为s或t时就会变成大S或大T,例如:

执行chmod 7666 filename。 因为666表示“-rw-rw-rw”,均没有x权限,所以最后变成“-rwSrwSrwT”。

Linux中的特殊权限粘滞位(sticky bit)详解

在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问。最为我们熟知的一个文件或目录可能拥有三种权限,分别是读、写、和执行操作。我们创建一个文件后系统会默认地赋予所有者读和写权限。当然我们也可以自己修改它,添加自己需要的权限。

除了通用的这些权限,我们来说说在linux下的另一个特殊权限。首先我们来看看在根目录下的一个目录tmp,可以看到tmp目录的other权限是rwt,那么这里的t又是什么权限呢,有什么意义。

t就是粘滞位(粘着位)

上面所说的t权限就是我们在这里要讲的粘滞位(sticky bit),我们给刚刚的cur目录采用chmod o+t的方式给other用户设置粘滞位。

可以看到此时我们是没有权限删除root用户创建的文件了,这也就是粘滞位的作用。

粘滞位权限便是针对此种情况设置,当⽬录被设置了粘滞位权限以后,即便⽤户对该⽬录有写⼊权限,也不能删除该⽬录中其他⽤户的⽂件数据,⽽是只有该⽂件的所有者和root⽤户才有权将其删除。设置了粘滞位之后,正好可以保持⼀种动态的平衡:允许各⽤户在⽬录中任意写⼊、删除数据,但是禁⽌随意删除其他⽤户的数据。

如果去掉了other的执行权限,可以看到本来’t’的位置变成了’T’,,那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t).否则, 显示为大写字母 (S, S, T) 。

粘滞位权限是针对目录的,对文件无效

CentOS7安装gitlab-ce

安装配置相关依赖

在系统防火墙中打开HTTP和SSH。

1
2
3
4
5
6
7
8
sudo yum install curl policycoreutils openssh-server openssh-clients -y
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

添加GitLab包服务器并安装

1
2
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce -y

也可以下载软件包然后安装

1
2
curl -LJO https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-XXX.rpm/download
rpm -i gitlab-ce-XXX.rpm

清华镜像

如果这版本不能下载,可以考虑清华版本,

新建/etc/yum.repos.d/gitlab-ce.repo

1
2
3
4
5
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
1
2
sudo yum makecache
sudo yum install gitlab-ce

配置并启动GitLab

1
sudo gitlab-ctl reconfigure

浏览并登陆

此时就可以设置用户名和密码了。

Enjoy!!!

IDE开发环境

网上流传的最好的10个用于开发C/C++的IDE环境。

IDE

IDE Windows Linux MacOSX Free
eclipse
Code::Blocks
GNAT
CodeLite
NetBeans
Qt Creator
Dev C++
C++ Builder
Anjuta
MonoDevelop

终端链接 tty

Linux tty命令用于显示终端机连接标准输入设备的文件名称。

Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。

比如ttyN就是今天说的设备,而sddN等就是硬盘设备。

你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

官方定义为:

tty - print the file name of the terminal connected to standard input

使用方法比较简单:

1
$ tty [-s][--help][--version]

对于-s选项就是–silent,–quiet,即屏蔽掉输出,仅仅显示一个退出状态。

默认使用

默认情况下显示当前终端

1
2
$ tty
/dev/pts/4

查询谁在以及在那个tty

Linux里面输入who可以看到目前登陆的用户,而输出信息包括用户名,tty终端,及登陆的时间信息等等。

1
2
3
4
5
6
7
8
9
10
11
12
$ who
user1 pts/4 2017-04-21 19:58 (xxx.xxx.xxx.xxx)
user1 pts/5 2017-04-07 13:41 (:99)
user1 pts/0 2017-04-08 16:31 (:99)
user1 pts/1 2017-04-08 17:12 (:99)
user1 :0 2017-04-15 15:05 (:0)
user1 pts/2 2017-04-15 15:38 (:0)
user2 pts/3 2017-04-16 08:53 (:3)
user2 pts/6 2017-04-16 11:01 (:3)
user2 pts/7 2017-04-16 16:49 (:3)
user3 pts/8 2017-04-21 20:05 (xxx.xxx.xxx.xxx)
user3 pts/9 2017-04-21 20:07 (xxx.xxx.xxx.xxx)

而如前面所说,对于write命令其中有一个参数就是指定ttyN的信息。