Keywords: Linux命令、常用命令、备忘

自动补全历史命令

如果你以前使用了cp -r /root/home/test/,下次还想使用同样的命令,可以采用:!cp 试试。

或者

在终端按下ctrl + r然后输入以前用过的命令,如cp -r会自动补全

pwd

查看当前路径:

pwd
vim

Ctrl-f 即 PageDown 翻页。

Crtl-b 即 PageUp 翻页

h 左,或 Backspace 或方向键

j 下,或 Enter 或 +(要 Shift 键),或方向键

k 上,或 方向键或 -(不必 Shift 键)

l 右,或 Space 或方向键

v 按字符选择文本

V 按行选择文本

d 剪切操作

y 复制操作

p 粘贴操作

^ 选中当前行,光标位置到行首(或者使用键盘的HOME键)

$ 选中当前行,光标位置到行尾(或者使用键盘的END键)

/要查找的字符+回车 查找字符串。n 查找下一个;N 反向查找下一个

:行数 跳到指定行数,例如跳到第100行,输入冒号,在输入数字100,再敲回车,:100

查找替换:
Replace All:

#Find each occurrence of 'foo' (in all lines), and replace it with 'bar'.
:%s/foo/bar/g

For specific lines:

#Change each 'foo' to 'bar' for all lines from line 6 to line 10 inclusive.
:6,10s/foo/bar/g

参考: Search and replace
https://vim.fandom.com/wiki/Search_and_replace

cp

复制文件夹:

cp -r 源目录 目标目录
kill

netstat -ntlp 找出svnserve的进程id

强制关闭:
然后:

kill -9 id

其中 -d 表示守护进程, -r 表示在后台执行。

正常关闭:
向指定进程发送Ctrl + C(通知进程正常关闭)

kill -SIGINT 进程ID

通过进程名杀掉进程:

# my_process_name 为目标进程的名称
ps aux  |  grep -i my_process_name  |  awk '{print $2}'  |  xargs sudo kill -9
find

示例:find / -name httpd.conf 表示在整个系统根目录下查找httpd.conf文件

ps
ps -ef | grep 8080 //查看8080端口后是否被占用
ps -aux | grep GameServer //查看名为`GameServer`的信息
yum

在Centos中yum安装和卸载软件的使用方法
安装方法
安装一个软件时

yum -y install httpd

安装多个相类似的软件时

yum -y install httpd*

安装多个非类似软件时

yum -y install httpd php php-gd mysql

卸载一个软件时

yum -y remove httpd

卸载多个相类似的软件时

yum -y remove httpd*

卸载多个非类似软件时

yum -y remove httpd php php-gd mysql
rm

rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

删除文件夹实例:

rm -rf /var/log/httpd/access

将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

删除文件使用实例:

rm -f /var/log/httpd/access.log

将会强制删除/var/log/httpd/access.log这个文件

tar

解压bz2文件

tar -xvjf 文件名

解压gz文件

tar zxvf 文件名

-z 是配合解压.GZ的 -x 解开一个包文件 -v 显示详细信息 -f 必须,表示使用归档文件

解压文件到指定路径

tar -zxvf 待解压文件名 -C 目标文件名

仅打包,不压缩

tar -cvf /tmp/etc.tar /etc

打包后,以 gzip 压缩

tar -zcvf /tmp/etc.tar.gz /etc

打包后,以 bzip2 压缩

tar -jcvf /tmp/etc.tar.bz2 /etc

不解压文件,只查看文件内容:

tar vtf aaa.gz  查看aaa.gz中文件的详细信息

tar tf aaa.gz  查看aaa.gz中的文件名

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar

[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩! 
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩 
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩 
unzip

将data目录下的所有zip文件解压到dest目录下:

unzip -o /data/*.zip -d /dest/

-o 不必先询问用户,unzip执行后覆盖原有文件

-q 执行时不显示任何信息

-n 解压缩时不要覆盖原有的文件

不解压文件,只查看zip文件里面的内容

zipinfo -l -M aaa.zip
chmod

改变一个文件的权限:

chmod [mode] file.txt

改变一个目录的权限:

chmod [mode] dir

改变一个目录和其子目录的权限:

chmod [mode] dir -R

mode = 777 or 752 and so on.
mode的三个数字,分别表示owner,group,others所具备的权限。
1=x 执行
2=w 写
4=r 读
比如owner具有所有权限,1+2+4=7,又比如 group 具有读和执行权限1+4=5。

chown

更改文件或目录的拥有者

-R参数表示递归改变

[root@linux ~]#chown [-R] 账户名称 文件或目录

[root@linux ~]#chown [-R] 账户名称:用户组名称 文件或目录
useradd

以root身份登陆,执行:passwd修改密码。useradd 用户名,添加用户。

具体的如下:

#passwd root

输入root密码,输入两遍。

#useradd 用户名 

#passwd 用户名 

密码,输入两遍

rpm

rpm好像不能指定安装路径!
1.安装一个包

# rpm -ivh

2.升级一个包

# rpm -Uvh

3.移走一个包

# rpm -e

4.安装参数
–force 即使覆盖属于其它包的文件也强迫安装
–nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。

5.查询一个包是否被安装

# rpm -q < rpm package name>

6.得到被安装的包的信息

# rpm -qi < rpm package name>

7.列出该包中有哪些文件

# rpm -ql < rpm package name>

8.列出服务器上的一个文件属于哪一个RPM包

#rpm -qf

9.可综合好几个参数一起用

# rpm -qil < rpm package name>

10.列出所有被安装的rpm package

# rpm -qa

11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?

# rpm -qilp < rpm package name>

查看mysql的相关文件

rpm -qa | grep mysql

然后用下面删除所有mysql相关文件

rpm -e mysql的相关文件
date

查看日期:

date

设置日期:

date 123123592012  (月日时分年)
date 123123592012.59  (月日时分年秒)
date -s 20080103 设置日期
date -s 18:24  设置时间

如果要同时更改BIOS时间 再执行

clock -w
tail

tail -n 50 log2014.log 查看末尾50行内容

sed & perl (string search and replace 文件中的字符串查找替换)

Replace any of foo, bar or baz with foobar:

sed -Ei 's/foo|bar|baz/foobar/g' file

or:

perl -i -pe 's/foo|bar|baz/foobar/g' file

How can I replace a string in a file(s)?
https://unix.stackexchange.com/a/112024/446854

查看硬件

查看CPU信息
使用下面的指令,就可以查看到CPU的详细信息了。一般来讲,多核的CPU,或者支持超线程的CPU,或者物理上的多个CPU,就会显示出对应的条数的信息。比如说双核的CPU就会显示2条CPU信息,双核超线程的CPU就会显示出4条CPU信息。虽然条数多了,但是基本信息都一样。

#cat /proc/cpuinfo

查看内存信息
与查看CPU信息对应的,查看内存信息的命令就是:

#cat /proc/meminfo

查看硬盘分区信息
使用下面的命令,可以看到当前硬盘的分区信息,以及容量大小、已使用的空间和剩余空间大小,还可以查看每个分区的挂载点:

#df -lh

查看硬盘的型号信息
可以使用下面的命令显示物理硬盘的个数以及对应的接口,还有硬盘的具体型号信息:

#cat /proc/scsi/scsi
How to disable Intel Turbo Boost

Ensure that P-State driver is works in active (governor) or passive (cpufreq) mode.

$ cat /sys/devices/system/cpu/intel_pstate/status

active

Inspect current Intel Turbo Boost status. 0 states that it is not disabled, 1 that it disabled.

$ cat /sys/devices/system/cpu/intel_pstate/no_turbo

Disable Intel Turbo Boost.

$ echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo

Origin:
https://sleeplessbeastie.eu/2019/07/15/how-to-disable-intel-turbo-boost/

How can I run dos2unix on an entire directory?

Batch convert file line ending from CR+LF to LF:

find . -type f -print0 | xargs -0 dos2unix

Reference:
https://stackoverflow.com/a/11929475/1645289

Shell

Shell脚本:转换Windows下的字符串结束符

使用dos2unix命令转换字符串结束符:

dos2unix filename

或者在vim的命令状态下如下设置:

:set fileformat=unix

Origin:
https://stackoverflow.com/a/39527986/1645289

并行执行多个shell脚本
for((i=1;i<100;i++)); do nohup bash script${i}.sh & done

Calling multiple bash scripts and running them in parallel, not in sequence
https://unix.stackexchange.com/a/169328/446854

如何后台运行Linux脚本

Command:

nohup script.sh &

How to run a shell script in background?
https://askubuntu.com/a/88092/1476756

如何修改nohup输出文件名
nohup some_command &> nohup2.out &

Origin: Can I change the name of nohup.out?
https://stackoverflow.com/a/4549515/1645289

Connect remote host using ssh without password
C:\Users\neil>ssh-keygen

C:\Users\neil>cd .ssh

C:\Users\neil\.ssh>scp id_rsa.pub root@192.168.1.2:~/

Then hit password, then you would enter remote host command.
Copy content of id_rsa.pub to authorized_keys:

[root@bogon ~]# cat id_rsa.pub >> .ssh/authorized_keys

[root@bogon ~]# chmod 600 .ssh/authorized_keys

[root@bogon ~]# exit

Now you can login remote host without password:

C:\Users\neil\.ssh>ssh root@192.168.1.2

Compilation & Debugging

Enable Core Dump

1, To check where the core dumps are generated, run:

sysctl kernel.core_pattern

or:

cat /proc/sys/kernel/core_pattern

where %e is the process name and %t the system time. You can change it in /etc/sysctl.conf and reloading by sysctl -p.

2, Check the limits by:

ulimit -a

If your core file size is limited, run:

ulimit -S -c unlimited

You can test it by:

sleep 10 &
killall -SIGSEGV sleep

If core dumping is successful, you will see “(core dumped)” after the segmentation fault indication.

Reference:
How to generate a core dump in Linux on a segmentation fault?
https://stackoverflow.com/a/32461658/1645289

Core dump file is not generated
https://stackoverflow.com/a/18428840/1645289

GDB Installation

Error on back trace under GDB:

Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/23/3d7fc1208d8219

Missing separate debuginfos. use: debuginfo-install alsa-lib-1.1.8-1.el7.x86_64
debuginfo-install alsa-lib-1.1.8-1.el7.x86_64 atk-2.28.1-2.el7.x86_64 bzip2-libs-1.0.6-13.el7.x86_64 cairo-1.15.12-4.el7.x86_64 dbus-libs-1.10.24-15.el7.x86_64 elfutils-libelf-0.176-5.el7.x86_64 elfutils-libs-0.176-5.el7.x86_64 expat-2.1.0-12.el7.x86_64 fontconfig-2.13.0-4.3.el7.x86_64 freetype-2.8-14.el7.x86_64 fribidi-1.0.2-1.el7_7.1.x86_64 glib2-2.56.1-7.el7.x86_64 graphite2-1.3.10-1.el7_3.x86_64 harfbuzz-1.7.5-2.el7.x86_64 libX11-1.6.7-2.el7.x86_64 libXScrnSaver-1.2.2-6.1.el7.x86_64 libXau-1.0.8-2.1.el7.x86_64 libXcomposite-0.4.4-4.1.el7.x86_64 libXcursor-1.1.15-1.el7.x86_64 libXdamage-1.1.4-4.1.el7.x86_64 libXext-1.3.3-3.el7.x86_64 libXfixes-5.0.3-1.el7.x86_64 libXi-1.7.9-1.el7.x86_64 libXrandr-1.5.1-2.el7.x86_64 libXrender-0.9.10-1.el7.x86_64 libXtst-1.2.3-1.el7.x86_64 libattr-2.4.46-13.el7.x86_64 libcap-2.22-11.el7.x86_64 libffi-3.0.13-19.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 libgcrypt-1.5.3-14.el7.x86_64 libglvnd-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-egl-1.0.1-0.8.git5baa1e5.el7.x86_64 libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64 libgpg-error-1.12-3.el7.x86_64 libpng-1.5.13-8.el7.x86_64 libselinux-2.5-15.el7.x86_64 libthai-0.1.14-9.el7.x86_64 libuuid-2.23.2-65.el7.x86_64 libxcb-1.13-1.el7.x86_64 lz4-1.8.3-1.el7.x86_64 nspr-4.21.0-1.el7.x86_64 nss-3.44.0-7.el7_7.x86_64 nss-util-3.44.0-4.el7_7.x86_64 pango-1.42.4-4.el7_7.x86_64 pcre-8.32-17.el7.x86_64 pixman-0.34.0-1.el7.x86_64 systemd-libs-219-78.el7.x86_64 xz-libs-5.2.2-1.el7.x86_64 zlib-1.2.7-18.el7.x86_64cd

Solution:
debuginfo-install is a command of yum-utils, so

  1. yum install yum-utils
  2. debuginfo-install glibc
  3. if the warning’s still there, edit /etc/yum.repos.d/CentOS-Debuginfo.repo, set enabled=1

Origin:
https://stackoverflow.com/a/17194583

Get call stack from core dump
gdb /usr/bin/myapp.binary corefile

Then, use one of:

(gdb) bt
(gdb) bt full
(gdb) info threads
(gdb) thread apply all bt
(gdb) thread apply all bt full

Reference:
getting stacktrace from core dump
https://stackoverflow.com/a/5745312/1645289

GDB: How do I list the symbols in a .so file

The standard tool for listing symbols is nm, you can use it simply like this:

nm -gD yourLib.so

If you want to see symbols of a C++ library, add the “-C” option which demangle the symbols (it’s far more readable demangled):

nm -gDC yourLib.so

Origin:
https://stackoverflow.com/a/34796/1645289

g++ undefined reference although symbol is present in *.so file

The pedantically correct way to check that a .so exports a symbol is:

nm --demangle --dynamic --defined-only --extern-only <lib.so> | grep <symbol>.

Without --defined-only your command also shows undefined symbols.

Without --extern-only it also shows symbols with internal linkage which are unavailable for linking.

Origin:
https://stackoverflow.com/a/43257338/1645289

Compilation Documents

Object Files and Symbols
http://nickdesaulniers.github.io/blog/2016/08/13/object-files-and-symbols/


The best way to predict your future is to create it. ― Peter Drucker