Linux常用命令
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
yum install yum-utils
debuginfo-install glibc
- if the warning’s still there, edit
/etc/yum.repos.d/CentOS-Debuginfo.repo
, setenabled=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