Linux_Aron
2018-02-26 10:09:10 0 举报
AI智能生成
Linux常用命令,求点赞,谢谢支持,凑字数,凑字数.....................
作者其他创作
大纲/内容
配置安装
.bash_alias
配置 ...............................
无root权限安装应用
zsh
Download
mkdir ~/tmp
cd ~/tmp
wget http://sourceforge.net/projects/zsh/files/zsh/5.0.7/zsh-5.0.7.tar.gz
5.0.7版本
http://sourceforge.net/projects/zsh/files/zsh
wget http://sourceforge.net/projects/zsh/files/zsh/5.4.2/zsh-5.4.2.tar.gz
5.4.2版本
2020
5.7.1和5.8版本了
wget http://sourceforge.net/projects/zsh/files/zsh/5.7.1/zsh-5.7.1.tar.xz
wget -O zsh.tar.gz https://sourceforge.net/projects/zsh/files/latest/download
最新版本
解压
tar xzvf zsh-5.4.2.tar.gz
tar xzvf zsh.tar.gz
tar xvJf zsh.tar.xz
tar xvJf zsh.tar.gz
编译
依赖libncursesw.so.6
ncurses
cd ~/tmp/zsh-5.4.2
./configure --prefix=$HOME
make
make install
则会安装到/home/wenrong.liu/share/zsh
和/home/wenrong.liu/bin/zsh
和/home/wenrong.liu/bin/zsh
最后就是设置成默认的shell。chsh这个命令是不能用了,因为没有root权限,
所以只能在 .bash_profile 里面做手脚了。在 .bash_profile里面添加如下内容:
所以只能在 .bash_profile 里面做手脚了。在 .bash_profile里面添加如下内容:
exec $HOME/bin/zsh -l
.bashrc无效
zsh打不开
error while loading shared libraries: libncursesw.so.6: cannot open shared object file: No such file or directory
取消设置LIBS
C compiler cannot create executables
取消设置LIBS
oh my zsh
git 下载
.zshrc配置
zsh?
# 下载
wget -O zsh.tar.gz https://sourceforge.net/projects/zsh/files/latest/download
# 解压
mkdir zsh && tar -xvzf.tar.gz -C zsh --strip-components 1
cd zsh
切换到解压后的目录,运行 ./configure。其选项可以通过 ./configure –help来获取,非root用户下最重要的应该是定义安装目录,即应该定义 ./configure –prefix=/yulong/liuwenrong/usr/bin 注:绝对路径, 对于一些依赖库,可能还需要使用 ./configure –prefix=xxx –with-xx-dir=xxx这种形式。
# 配置,比如将Zsh安装到~/usr下
./configure --prefix=$HOME/usr/bin
make
make install
修改.bash_profile
export ZSH_HOME=~/usr/bin
export PATH=$ZSH_HOME/bin:$JAVA_HOME/bin:$PATH
source .bash_profile
vim
git clone https://github.com/vim/vim.git
cd src
make distclean # if you build Vim before
make
sudo make install
./configure --prefix=/usr/local/vim –enable-multibyte。
接着输入make && make install。
autojump
git clone git://github.com/joelthelion/autojump.git
执行install.py
把文件复制到用户的软件目录
添加到.bashrc
[[ -s /home/wenrong.liu/.autojump/etc/profile.d/autojump.sh ]] && source /home/wenrong.liu/.autojump/etc/profile.d/autojump.sh
拷贝.autojump
tmux
$ git clone https://github.com/tmux/tmux.git
$ cd tmux
sh autogen.sh
./autogen.sh: 15: ./autogen.sh: aclocal: not found
aclocal failed
安装automake
/bin/autoconf failed with exit status: 1
autoreconf failed
aclocal -I .
./configure --prefix=$HOME && make
--libexecdir=$HOME/lib
configure: error: "libevent not found"
1。编译安装libevent
tar -zxvf libevent-2.0.19-stable.tar.gz
cd libevent-2.0.19-stable/
./configure
make && make install
此时会生成libevent.pc在本地目录。拷贝到pkgconfig目录下。
cp ./libevent.pc /usr/share/pkgconfig/.
无此操作,编译tmux会报错
CFLAGS="-I$HOME/include" LDFLAGS="-L$HOME/lib"
LIBS="-l$HOME/lib"
tmux1.8
configure: error: "curses not found"
apt-get source curses
/usr/bin/ld: cannot find -lncursesw
libncursesw5-dev
tmux2.5
./configure: line 5156: syntax error near unexpected token `newline'
./configure: line 5156: `PKG_CHECK_MODULES('
dpkg
选择安装.deb软件到其他目录
sudo dpkg -i --instdir=/opt/apache apache2
然后可以建立一个软链接
ln -s /opt/gsopcast/usr/local/bin/gsopcast /usr/local/bin
基本流程
下载源码
apt-get source 包名
apt-get source libbsd-dev
wget 源码网站
linux配置java环境变量
1. 修改/etc/profile文件 全局用户
a. 你要将 /usr/share/jdk1.6.0_14改为你的jdk安装目录
b. linux下用冒号“:”来分隔路径
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值
在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种
常见的错误。
d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。
e. export是把这三个变量导出为全局变量。
f. 大小写必须严格区分。
b. linux下用冒号“:”来分隔路径
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值
在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种
常见的错误。
d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。
e. export是把这三个变量导出为全局变量。
f. 大小写必须严格区分。
修改.bash_profile文件
export JAVA_HOME=~/java/jdk1.8.0_121 注:一定要~,否则失败
export JAVA_HOME=~/usr/lib/jvm/java-8-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME=~/usr/lib/jvm/java-8-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source .bash_profile
查看已经安装的Java : update-alternatives --config java
常见问题
没有make命令
端口不对,22-->8701
SecureCRT
vim按Backspace不能向前删除
设置一下secureCRT就可以了.
Options-->Session Options-->Terminal-->Emulation-->Mapped Keys-->Other mappings
选中复选框 Backspace sends delet
Delete sends backspac
vim 高亮问题
选项-会话选项-终端-仿真-选择Linux
Android 源码编译
repo sync -j8
error.GitError: manifests rev-list ('^HEAD', u'7edad705a660c3299a67afcacc034a4220b63e2b', '--'):
fatal: bad object 7edad705a660c3299a67afcacc034a4220b63e2b
fatal: bad object 7edad705a660c3299a67afcacc034a4220b63e2b
git命令更新.repo/manifest的代码
git pull --rebase
常见问题
子主题
子主题
1/1 100%
Android.mk 格式可能为PC
1. 用 NotePad++改成Unix
2. 内容复制到test.mk
mv test.mk Android.mk
mv test.mk Android.mk
项目没有改变
尝试删除之前编译生成的apk或jar
子主题
加了aidl编不过
需要按依赖顺序一个个加到Android.mk
子主题
error: 'out/target/common/obj/APPS/AntHalService_intermediates/with-local/classes.dex', needed by 'out/target/common/obj/APPS/AntHalService_intermediates/classes.dex', missing and no known rule to make it
1,尝试修改端口号 .jack-setting 和 .jack-server/config.properties
“ServerException: './config.properties' musthave permission rw------- but have rwx------Caused by: java.io.IOException: './config.properties' must have permissionrw------- but have rwx------”如果有权限问题,根据提示修改对应文件的权限即可。不过我没遇到过
2. 数字设定法 我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。 例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。 数字设定法的一般形式为: chmod [mode] 文件名¼
chmod 600 config.properties
成功了
成功了
搜索相关命令Tools
搜索文件
find <指定目录> <指定条件> <指定动作>
find [搜索范围] [匹配条件]
find [搜索范围] [匹配条件]
搜索文件名
find / -name 'interfaces'
从根目录root开始寻找
find . -name zsh
从当前目录开始递归寻找
find . -name TelephonyManager.java
-iname
忽略大小写
-size
+n,-n,n
n为数据块,
1数据块=512字节=0.5k
n为数据块,
1数据块=512字节=0.5k
find / -size +204800
大于100M的文件
根据时间
-amin
访问时间access
find /etc -cmin -5
5分钟内修改过的
-cmin
文件属性change
-mmin
文件内容modify
-type
f文件,d目录, l软链接文件
子主题
-a
and
find / -size +163840 -a -size -204800
查找/根目录下大于80M且小于100M的文件
-o
or
-inum
根据i节点
可以找到硬链接文件
指定动作
-exec/-ok ls -l {} \
find / -name init -exec ls -l {} \
查找init文件并显示详细信息
-ok 会提示确认
locate搜索linux系统中的文件,它比find命令快
使用”whereis“命令可以搜索linux系统中的所有可执行文件即二进制文件
whereis grep
whereis zsh
使用which命令查看系统命令是否存在,并返回系统命令所在的位置
which gerp.exe
Windows下的grep
which grep
得到alias
使用type命令查看系统中的某个命令是否为系统自带的命令
type cd
type zsh.exe
搜索内容
grep
从指定文件中搜索内容
grep -i hello a.txt b.txt
忽略大小写搜索hello 在a.txt和b.txt中
grep -in hello *.txt
忽略大小写并打印行号 搜索hello在所有 .txt后缀结尾的文件
grep -inr hello *
忽略大小写 打印行号并递归搜索 hello 在所有文件中
grep "text" . -r -n
.表示当前目录。
grep -e "is" -e "line" -o file
选项 -e 制动多个匹配样式
从当前目录查找内容
grep -rn content
grep搜索结果中包括或者排除指定文件
#只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
grep "main()" . -r --include *.{php,html}
#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
正则表达式RE
BRE基础正则
单个字符匹配
.
任意字符
[]
指定字符
[^]
取反字符
次数匹配
*
任意次
\?
0或1次
\+
1次或多次
\{m}或者\{m,n\}
至少m次,至多n次
位置锚定
^
行首
$
行尾
\<, \>
词首,词尾
分组及引用
ERE扩展正则
次数匹配
*
?
+
{m}或者{m,n}
常用命令
目录文件处理
ln
link
软链接
创建快捷方式
ln -s ~/.Config4Roger/.vimrc ~/_vimrc
ln -s 源目录 目标快捷方式
比如你要在/etc下面建立一个叫LXBC553的快捷方式,指向/home/LXBC,那就是
ln -s /home/LXBC /etc/LXBC553
硬链接
ln 源文件 目标快捷方式
相当于复制,但是文件可以同步更新
删除源文件,硬链接依然可以访问
ls -i
id 相同
不能跨分区
如 C盘到D盘 ,root分区到boot分区
不能针对目录
lnif ~/.Config4Roger/.vimrc ~/.vimrc
查看文件夹大小
du -ah --max-depth=1
挺慢的
df -h
权限管理命令
chmod
change the permissions mode of a file
chmod [{ugoa}{+-=}{rwx} [文件或目录]
chmod a=rwx a.txt
chmod [mode=421] [文件或目录]
r=4 w=2 x=1 -=0
chmod 777 a.txt
-R 递归修改
chown
change
chown [用户] [文件或目录]
umask
umask -S
查看新建文件和文件夹权限
u=rwx,g=rx,o=rx
umask
022
即777-755
如果要把默认权限改成rwxr-xr--
umask 023
即754
修改密码
若修改其他用户,如oracle 的密码,可直接输入passwd oracle.
若修改root自己的密码,直接输入 passwd .
smbpasswd(选项)(参数)
-a:向smbpasswd文件中添加用户;
-c:指定samba的配置文件;
-x:从smbpasswd文件中删除用户;
-d:在smbpasswd文件中禁用指定的用户;
-e:在smbpasswd文件中激活指定的用户;
-n:将指定的用户的密码置空。
-c:指定samba的配置文件;
-x:从smbpasswd文件中删除用户;
-d:在smbpasswd文件中禁用指定的用户;
-e:在smbpasswd文件中激活指定的用户;
-n:将指定的用户的密码置空。
用户名:指定要修改SMB密码的用户。
压缩和解压xz压缩包
压缩
tar -czf systemUI.tar.gz SystemUI
解压
tar -xJf xx.tar.xz 简写,有效
tar -x -xz -f xx.tar.xz 会出错
tar -c -xz -f filename.tar.xz /folder
tar -xzvf file.tar.gz //解压tar.gz
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
系统
查看系统版本
uname -a
高级命令
子主题
Linux连接PC电脑的共享
Linux连接PC电脑的共享
smbclient -L 172.16.55.173
查看共享目录
smbclient //172.16.55.173/目录
secure copy
scp -r yangzhulin@172.16.7.41://home/users/yangzhulin/BM_app /home/users/liuwenrong/0Work
Linux 在一个命令行上执行多个命令
1. [ ; ]
如果被分号(;)所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令。
2. [ && ]
如果命令被 && 所分隔,那么命令也会一直执行下去,但是中间有错误的命令存在就不会执行后面的命令,没错就直行至完为止。
3. [ || ]
如果每个命令被双竖线 || 所分隔,那么一遇到可以执行成功的命令就会停止执行后面的命令,而不管后面的命令是否正确与否。如果执行到错误的命令就是继续执行后一个命令,一直执行到遇到正确的命令为止。
如果被分号(;)所分隔的命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令。
2. [ && ]
如果命令被 && 所分隔,那么命令也会一直执行下去,但是中间有错误的命令存在就不会执行后面的命令,没错就直行至完为止。
3. [ || ]
如果每个命令被双竖线 || 所分隔,那么一遇到可以执行成功的命令就会停止执行后面的命令,而不管后面的命令是否正确与否。如果执行到错误的命令就是继续执行后一个命令,一直执行到遇到正确的命令为止。
编译Android相关
下载Android源码
Zs_1.0
安卓根目录如:new android_n
tar -xzvf repo.tar.gz
解压 注: 不要在Windows下解压36G的大文件
cd android_n
.repo/repo/repo sync -j8
sync 命令会将代码同步到当前目录,即android_n
repo工具在tools下
android_n 目录下
android_n 目录下
../tools/repo/repo sync -j16
当没有repo工具时
tools目录下
tar -xzvf repo.tar.gz 注:2.6M的文件
得到 repo.git文件夹
git clone repo.git/ 生成repo文件夹
复制repo 和repo.git到android_n下
cp -R repo ../android_n/repo
cp -R repo.git ../android_n/repo.git
repo init -u ssh://10.3.11.45:29418/ZS/.repo/manifests -b default -m zeusis/JV_8953_Dev.xml
会在android_n/.repo下更新一些文件
T6
下载前配置
[下载前配置]:
在文件 ~/.ssh/config中添加下面信息,以保证25和21代码都能下载
在文件 ~/.ssh/config中添加下面信息,以保证25和21代码都能下载
Host 172.16.7.21
User gerrit账号
Port 29418
Hostname 172.16.7.21
Host 172.16.7.25
User gerrit账号
Port 29418
Hostname 172.16.7.25
User gerrit账号
Port 29418
Hostname 172.16.7.21
Host 172.16.7.25
User gerrit账号
Port 29418
Hostname 172.16.7.25
Host 172.16.7.21
User liuwenrong
Port 29418
Hostname 172.16.7.21
Host 172.16.7.25
User liuwenrong
Port 29418
Hostname 172.16.7.25
User liuwenrong
Port 29418
Hostname 172.16.7.21
Host 172.16.7.25
User liuwenrong
Port 29418
Hostname 172.16.7.25
注意:user是名字,不是邮箱
否则出现Permission denied (publickey) 问题
init T6的仓库
repo init -u ssh://172.16.7.21:29418/qcom/spf.2.0/platform/manifest -b release -m yota/msm8953_t6_dev.xml
repo工具要指定好
我的../zs_1.0/.repo/repo/repo
../tools/repo/repo
如果出现Permission denied (publickey) 问题,则
cat ~/.ssh/id_rsa.pub
复制到21服务器的Settings-SSH Public Key
如果出现please re-run 'repo init' with --config-name,则
../tools/repo/repo init --config-name -u ssh://172.16.7.21:29418/qcom/spf.2.0/platform/manifest -b release -m yota/msm8953_t6_dev.xml
../tools/repo/repo init --config-name "liuwenrong <liuwenrong@yotamobile.com>"
../tools/repo/repo init --config-name "liuwenrong <liuwenrong@yotamobile.com>" -u ssh://172.16.7.21:29418/qcom/spf.2.0/platform/manifest -b release -m yota/msm8953_t6_dev.xml
然后填写名字和邮箱,输入y确认
同步代码
repo sync -c -j4 -no-tags
../tools/repo/repo sync -c -j4 -no-tags
编译流程
cd 源码根目录
repo sync -j8
repo sync -c -j4
-c 是指当前分支。可以加快下载速度。
-j8 指启动8个线程
source build/envsetup.sh
lunch
输入数字选择编译的手机型号
make update-api -j8
当framework代码有修改,都需要执行该命令
make
编译出错
有个项目编不过,如
make YotaDevicesSDK -j16
cd vendor/yotadevices/frameworks/yotadevices-api/sdk
mm -j16
make snod
编译好的内容打包成image,不用重新编译
make sdk
编出源码jar
Linux编译
mk语法
LOCAL_DEX_PREOPT := true
预优化
LOCAL_DEX_PREOPT := false
Android.mk引入jar包
LOCAL_STATIC_JAVA_LIBRARIES := \ #add
okhttp \ #/为jar起一个别名
okio \ #add
okhttp \ #/为jar起一个别名
okio \ #add
include $(BUILD_PACKAGE)
................. #标志
................. #标志
include $(CLEAR_VARS) #add
# //冒号前面为jar别名,后面为jar文件的实际路径
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ okhttp:libs/okhttp-3.6.0.jar \
okio:libs/okio.jar \ #add
include $(BUILD_MULTI_PREBUILT) #add
# //冒号前面为jar别名,后面为jar文件的实际路径
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ okhttp:libs/okhttp-3.6.0.jar \
okio:libs/okio.jar \ #add
include $(BUILD_MULTI_PREBUILT) #add
签名
子主题
子主题
在build\target\product\security\下有platform、shared、testkey、media四个密钥
1. signapk.jar:signapk可执行文件,在out/host/Linux-x86/framework/signapk.jar;
2. signapk用法:到out/host/linux-x86/framework/目录下执行
Java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk;
2. signapk用法:到out/host/linux-x86/framework/目录下执行
Java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk;
命令 Android根目录
清除
make clean -j32
更新过时的api
make update-api -j32
全编
make -j32
编译 某个模块
make xx -j32
如: make SystemUI -j32
make systemimage -j32
Linux操作
修改用户密码
passwd
修改当前用户
若修改其他用户,如oracle 的密码,可直接输入passwd oracle.
修改映射密码
smbpasswd
手动输入一次旧密码和两次新密码
编译framework
2,在frameworks/base/core/res/res/drawable目录下执行touch pic.png.
3,进入目录frameworks/base/core/res/ 执行mm命令, 编译 framework-res.apk
4,执行完后com.android.internal.R 会新生成一个R.drawable.pic的引用.在程序中使用即可.
5,在目录frameworks/base/ 下执行mm 编译 framework.jar.
6,在WindowManagerService.java中使用com.android.internal.R.drawable.pic,使用完后保存文件.
7,进入目录frameworks/base/services/java/ 执行mm 编译 services.jar
8,替换机器上(虚拟机或者真机)的jar apk文件.
adb push framework-res.apk /system/framework/
adb push services.jar /system/framework/
adb push framework.jar /system/framework/
执行命令时注意framework-res.apk 的真实路径.
添加apk
新建项目变添加apk和Android.mk
若要将该APK集成到system.img,需要apk的包名添加到PRODUCT_PACKAGES中,一般在device/product.mk文件中听见,比如Y3.mk。
需要在repo/mainfest.xml中配置,才能将项目 放到服务器编译
build/target/product/generic.mk添加你的应用程序名字
PRODUCT_PACKAGES := \
AccountAndSyncSettings \
CarHome \
DeskClock \
AlarmProvider \
Bluetooth \
Calculator \
Calendar \
Camera \
CertInstaller \
DrmProvider \
Email \
Gallery3D \
LatinIME \
Launcher2 \
Mms \
Music \
Provision \
Protips \
QuickSearchBox \
Settings \
Sync \
Updater \
CalendarProvider \
这样才会调用项目的Android.mk
其他
jack
jack-admin
jack-admin list-server
jack-admin kill-server
jack-admin start-server
编译某个Moudle或app
cd android_n
make update-api
非必须,的操作sync同步代码后需要
源码根目录下 source build/envsetup.sh
lunch
选择一个模式如eng,userdebug 输入对应数字如44
cd frameworks/base/packages/SystemUI/
mm -B -j32
mm -j8
JDK需要1.8.x 去官网下载 后解压
Android刷机
刷机问题
target didn't report max-download-size
sending 'system' (1 KB)...
FAILED (command write failed (Unknown error))
finished. total time: 0.016s
sending 'system' (1 KB)...
FAILED (command write failed (Unknown error))
finished. total time: 0.016s
0 条评论
下一页